caricato da Utente2496

3. L'ARDUINO LED

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
}