Accendere in sequenza 3 led (giallo, ros... Variante con potenziometro Variante con potenz. e ciclo if Esperienze varie Conteggio , Pari o dispari, Random, If else else Da tastiera, For, Luminosità, Ritardo lampeggio Semaforo con pedoni, contatore binario SKETCH DI PROGETTI CON I LED L’occhio a scanner Un pupazzetto luminoso Un insegna luminosa ESPERIENZA N° 1: ACCENDERE IN SEQUENZA 3 LED (GIALLO, ROSSO, VERDE) 1. Riportare il diagramma a blocchi; 2. Trasformare il diagramma a blocchi in codice 3. Svolgere il processo di scrittura, compilazione e upload dello sketch (sketch=bozzetto del programma) 4. Ciascun LED va collegato ad Arduino tramite una resistenza da calcolare per un assorbimento di I=10 mA, con alimentazione Vcc=5V e Vd=2V di caduta di tensione del LED. R=(Vcc-Vd )/I =300 ohm (si sceglie il valore commerciale di 330 ohm) • I pin utilizzati possono essere D9, D10 e D11 configurate come output e collegate alla resistenza di protezione di ciascun LED. • Se l’anodo di ciascun LED e collegato al pin in questione per accendere il LED occorrerà inviargli un livello alto • (Viceversa, se colleghiamo il catodo ocorrerà inviare al pin un livello basso • Nel primo caso i catodi vanno collegati a GND DIAGRAMMA DI FLUSSO int Pin1=9; int Pin2=10; int Pin3=11; Int Pausa=1000; //Configurazione dei pin in uscita void setup () { pinMode (Pin1,OUTPUT); pinMode (Pin2,OUTPUT); pinMode (Pin3,OUTPUT); } // accendo il primo led, aspetto 1 sec e poi lo spengo void loop() { digitalWrite (Pin1,HIGH); delay (Pausa); digitalWrite (Pin1,LOW); delay (Pausa); // accendo il secondo led, aspetto 1 sec e poi lo spengo digitalWrite (Pin2,HIGH); delay (Pausa); digitalWrite (Pin2,LOW); delay (Pausa); // accendo il terzo led, aspetto 1 sec e poi lo spengo digitalWrite (Pin3,HIGH); delay (Pausa); digitalWrite (Pin3,LOW); delay (Pausa); } E S P E R I E N Z A N°2 int Pin1=9; int Pin2=10; int Pin3=11; int Pausa=1000; //Configurazione dei pin in uscita void setup () { pinMode (Pin1,OUTPUT); pinMode (Pin2,OUTPUT); pinMode (Pin3,OUTPUT); } // accendo il primo led, aspetto 1 sec e poi lo spengo void loop () { Pausa=analogRead(0); Variante al circuito precedente Nel progetto precedente I 3 led si accendono con pause identiche sia di spegnimento che di accensione.Adesso con l’aggiunta di un potenziometro cerchiamo di variare la velocità di accensione e spegnimento. Dal centrale del potenziometro otteniamo una tensione (0 ÷5V) che viene mandata all’ingresso analogico Ao e una volta convertita in un mumero ( 0 ÷1023 ) viene usata come tempo per la pausa. Questo grazie alla istruzione: Pausa=analogRead(0); digitalWrite (Pin1,HIGH); delay (Pausa); digitalWrite (Pin1,LOW); delay (Pausa); // accendo il secondo led, aspetto 1 sec e poi lo spengo digitalWrite (Pin2,HIGH); delay (Pausa); digitalWrite (Pin2,LOW); delay (Pausa); // accendo il terzo led, aspetto 1 sec e poi lo spengo digitalWrite (Pin3,HIGH); delay (Pausa); digitalWrite (Pin3,LOW); delay (Pausa); } E S P E R I E N Z A N° 3 Sempre utilizzando lo schema elettrico pregedente modificare il listato in modo da accendere uno solo dei tre LED in base alla posizione del cursore del potenziometro. [ Soluzione: aggiungere un controllo sulla variabile Pausa in modo che se il valore è compreso tra: 0 e 340 si accende il LED gialllo; 341 e 681 si accende il LED verde; 682 e 1023 si accende il LED rosso; ] int Pin1=9; int Pin2=10; int Pin3=11; int potenziometro = 0; //float tensione; //Configurazione dei pin in uscita void setup () { pinMode (Pin1,OUTPUT); pinMode (Pin2,OUTPUT); pinMode (Pin3,OUTPUT); Serial.begin (9600); } void loop (){ potenziometro= analogRead(A0); // legge il pin A0 //tensione = potenziometro * (5.0 / 1023.0); Serial.println (potenziometro); potenziometro = analogRead(A0); Serial.println(potenziometro); //lo stampo a video if(potenziometro <=300){ digitalWrite(Pin1,HIGH); delay(2000); digitalWrite(Pin1,LOW); delay(2000); } if(potenziometro >301 && potenziometro <670){ digitalWrite(Pin2,HIGH); delay(2000); digitalWrite(Pin2,LOW); delay(2000); } if(potenziometro >671){ digitalWrite(Pin3,HIGH); delay(2000); digitalWrite(Pin3,LOW); delay(2000); } } APPLICAZIONI Arduino -Resistenza 330ohm -Cavi -Breadboard -Diodo Led int ledPin = 10; int conta = 0; /* definizione della variabile del contatore di tipo intera e relativa inizializzazione */ void setup() { pinMode(ledPin, OUTPUT); // imposta il pin digitale ledPin come uscita } void loop() { if(conta<10){ digitalWrite(ledPin, HIGH); // accende ledPin delay(500); //attende mezzo secondo (500 ms) digitalWrite(ledPin, LOW); ///spegne ledPin delay(500); //attende mezzo secondo conta++; // incrementa la variabile conta } } int x=0; void setup() { Serial.begin(9600); Serial.println("Inserire un numero diverso da 0");//Stampo pinMode(2, OUTPUT);//Imposto come output i pin necessari pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); } void loop() { while (x==0){ if(Serial.available()>0){ //Controllo x=Serial.read(); } } if(x%2==0){ digitalWrite(3, HIGH);//Accendo il diodo 3 e 5 digitalWrite(5, HIGH); delay(1000); // Aspetta 1 secondo digitalWrite(3, LOW);//Spengo il diodo 3 e 5 digitalWrite(5, LOW); delay(1000); // Aspetta 1 secondo } else{ digitalWrite(2, HIGH);//Accendo il diodo 2 e 4 digitalWrite(4, HIGH); delay(1000); // Aspetta 1 secondo digitalWrite(2, LOW);//Spengo il diodo 2 e 4 digitalWrite(4, LOW); delay(1000); // Aspetta 1 secondo } x=0;//Imposto la variabile x a 0 } PROGRAMMA PARI O DISPARI RANDOM Si Genera accenderà accenderà accenderà un numero casuale. Se è compreso tra 1 e 10, si il primo LED. Se è compreso tra 11 e 20, si il secondo LED. Se è compreso tra 21 e 30, si il terzo LED. void setup() { pinMode(12, OUTPUT); pinMode (8, OUTPUT); pinMode (4, OUTPUT); } void loop() { int i=0; i=random(1,30); if(i>=1 and i<=10) { digitalWrite (4, HIGH); delay (1000); digitalWrite (4, LOW); delay (1000); } if(i>=11 and i<=20) { digitalWrite (8, HIGH); delay (1000); digitalWrite (8, LOW); delay (1000); } if(i>=21 and i<=30) { digitalWrite (12, HIGH); delay (1000); digitalWrite (12, LOW); delay (1000); } } int ledPin1 = 9; int ledPin2 = 10; int ledPin3 = 11; //pin 3 lampeggia con intensita fissa int randNumber; // variabile usata per memorizzare il valore casuale int led = 3; // un led con in serie una resistenza da 220 Ohm inserito sul pin 10 void setup() { pinMode(ledPin1, OUTPUT); pinMode(ledPin2, OUTPUT); pinMode(ledPin3, OUTPUT); } void loop() { analogWrite(ledPin1, random(120)+135); //numero compreso fra 0 e 120 "120 = MAX" analogWrite(ledPin2, random(120)+135); analogWrite(ledPin3, random(120)+135); delay(random(100)); randomSeed(millis()); // imposta millis() come base per generare un numero casuale da 0 a 255 randNumber = random(255); // numero casuale da 0 a 255 analogWrite(led, randNumber); // uscita segnale PWM ( mettendo un numero tra 0e 255 -->V tra 0 e 5 V) delay(500); // pausa di mezzo secondo } A seconda del numero inserito nel programma di Arduino, si accende un led tra il numero 1 e il numero 4 per 5 secondi. int x; void setup() { Serial.begin(9600); pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); void loop() { x=Serial.read(); if(x=='1'){ digitalWrite(2, delay(5000); // digitalWrite(2, } else if(x=='2'){ digitalWrite(3, delay(5000); // digitalWrite(3, } else if(x=='3'){ digitalWrite(4, delay(5000); // digitalWrite(4, } else if (x=='4'){ digitalWrite(5, delay(5000); // digitalWrite(5, } } } HIGH); Wait for 5000 millisecond(s) LOW); HIGH); Wait for 5000 millisecond(s) LOW); HIGH); Wait for 5000 millisecond(s) LOW); HIGH); Wait for 5000 millisecond(s) LOW); ACCENSIONE DI TRE LED DA TASTIERA ACCENSIONE DI TRE LED DA TASTIERA int x; //variabile da inserire int led=2; //indica il led int led2=3; int led3=4; void setup () { pinMode (led, OUTPUT); pinMode (led2, OUTPUT); pinMode (led3, OUTPUT); Serial.begin(9600); } void loop () { if(Serial.available()>0){ x=Serial.read(); //legge da tastiera switch(x){ case 'a': case 'A': digitalWrite (led, HIGH); Serial.println("Acceso"); delay (1000); // Attendere un secondo digitalWrite (led, LOW); Serial.println("Spento"); delay (1000); // Attendere un secondo break; case'b': case 'B': digitalWrite (led2, HIGH); Serial.println("Acceso"); delay (3000); // Attendere digitalWrite (led2, LOW); Serial.println("Spento"); delay (1000); // Attendere break; case 'c': case 'C': digitalWrite (led3, HIGH); Serial.println("Acceso"); delay (5000); // Attendere digitalWrite (led3, LOW); Serial.println("Spento"); delay (1000); // Attendere break; default: break; } } } 3 secondi un secondo 5 secondi un secondo /* Accensione e spegnimento di un led da tastiera del Personal Computer tramite interfaccia seriale Il led collegato con l'Anodo al pin 13 e il catodo a massa viene acceso digitando il carattere "H" sulla tastiera del PC, mentre digitando "L" lo stesso led viene spento. int led = 13; // il led e' collegato con l'Anodo sul pin 13 e il Catodo a GND. int leggi_byte; void setup() { pinMode(led, OUTPUT); // configura il pin 13 come output Serial.begin(9600); // inizializza la seriale a 9600 baud } void loop() { if (Serial.available() > 0) // se e' presente sul buffer della seriale un carattere ASCII { leggi_byte = Serial.read(); // acquisisci il carattere dalla seriale e memorizzalo if ((leggi_byte == 'H') || (leggi_byte == '1')) { // se il byte letto dalla seriale e' coincidente con il carattere maiuscolo "H" (0x48) // oppure con "1" (0x31) accendi il led digitalWrite(led, HIGH); // accendi il led Serial.write(leggi_byte); // ritrasmetti il carattere sulla seriale Serial.println(" --> LED ON"); } if ((leggi_byte == 'L') || (leggi_byte == '0')) { // se il byte letto dalla seriale e' coincidente con il carattere maiuscolo "L" (0x4C) // oppure con "0" (0x30) spegni il led digitalWrite(led, LOW); // spegni il led Serial.write(leggi_byte); // ritrasmetti il carattere sulla seriale Serial.println(" --> LED OFF"); } } } /* : Led_con_n_flash_controllato_da_tastiera_PC P.S. utilizzare il "Serial Monitor" settato a 9600 baud e digitare il carattere seguito da un carattere INVIO oppure effettuando un clic sul pulsante denominato "Send". Si ricorda che il PC invia sulla seriale fittizia (USB) solo codici ASCII, quindi il carattere maiuscolo "A" verra' trasmesso sulla seriale viene ricevuto dal codice presente sulla scheda Arduino come un codice 0x41 (valore espresso in esadecimale per il linguaggio C) che corrisponde al valore decimale 65. */ int led = 13; // il led e' collegato con l'Anodo sul pin 13 e il Catodo a GND. int leggi_byte; void setup() { pinMode(led, OUTPUT); // configura il pin 13 come output Serial.begin(9600); // inizializza la seriale a 9600 baud Serial.print(" Digita il N. lampeggi del LED (min. = 1 - max. = 9)"); } void loop() { if (Serial.available() > 0) // se e' presente sul buffer della seriale un carattere ASCII { leggi_byte = Serial.read(); // acquisisci il carattere dalla seriale e memorizzalo if ((leggi_byte > '0') && (leggi_byte <= '9')) // se il valore letto e' > 0 e <= 9 { leggi_byte = leggi_byte - '0'; // converti valore da ASCII a valore numerico Serial.print(" --> LED ON/OFF per "); Serial.println(leggi_byte, DEC); // ritrasmetti il numero sulla seriale // ripeti la sequenza di accensione/spegnimento per il numero inserito da tastiera del PC for (int i = 0; i < leggi_byte; i++) { digitalWrite(led, HIGH); // accendi il led delay (500); // ritardo di 0,5 secondi digitalWrite(led, LOW); // spegni il led delay (500); // ritardo di 0,5 secondi } Serial.print(" Digita il N. lampeggi del LED (min. = 1 - max. = 9)"); } } } LAMPEGGIO TRE LED CON CICLO FOR int timer = 100; la tempistica int timer = 100; // Più alto è il numero, più lenta è la tempistica void setup() { // inizializza ciascun pin come uscita: for (int Pinuno = 2; Pinuno < 5; Pinuno ++) { pinMode(Pinuno , OUTPUT); } } void loop() { for (int Pinuno = 2; Pinuno < 5; Pinuno ++) { // accensione in avanti digitalWrite(Pinuno, HIGH); delay(timer); digitalWrite(Pinuno, LOW); } } // Più alto è il numero, più lenta è void setup() { // inizializza ciascun pin come uscita: for (int Pinuno = 2; Pinuno < 5; Pinuno ++) { pinMode(Pinuno , OUTPUT); } } //--------------------------------------------------void loop() { for (int Pinuno = 2; Pinuno < 5; Pinuno ++) { // accensione in avanti digitalWrite(Pinuno, HIGH); delay(timer); digitalWrite(Pinuno, LOW); } for (int Pinuno = 5; Pinuno >= 2; // accensione in indietro digitalWrite(Pinuno, HIGH); delay(timer); digitalWrite(Pinuno , LOW); } } Pinuno --) { FADE //LED fade int ledPin = 9; void setup() { pinMode(ledPin, OUTPUT); } void loop() { //luminosita crescente for (int brightness=0;brightness<256;brightness++){ analogWrite(ledPin,brightness); delay(10); } delay(1000); for (int brightness=255;brightness>=0;brightness--){ analogWrite(ledPin,brightness); delay(10); } delay(1000); } int lucentezza = 0; // definisce la variabile lucentezzacon valore iniziale 0 int incremento = 5; // definisce la variabile incrementocon valore 5 void setup () { pinMode (9, OUTPUT); // definisce la porta 9 come porta di output } void loop() { analogWrite (9, lucentezza); // invia alla porta 9 una tensione pari a (5/255) * lucentezza lucentezza = lucentezza + incremento; // modifica il valore di lucentezza if (lucentezza == 0 || lucentezza == 255) { incremento = incremento *-1; // se la lucentezza ha raggiunto gli estremi ( 0 oppure 255) // cambia segno all'incremento (lo si moltiplica per -1 e quindi se // era 5 lo fa diventare -5 e viceversa) } delay (50); //attende 50 millisecondi prima di ricominciare il ciclo }