In questa pagina vi illustrerò alcuni esempi pratici per incominciare ad imparare ad utilizzare i pin di arduino come  input e output. Commenterò ogni istruzione dello sketch in modo da farvi comprendere meglio il funzionamento. Iniziamo con un led che lampeggia… 🙂

Blink

Questo sketch farà semplicemente lampeggiare un led ad intervalli di 1 secondo. Modificando il ritardo [ delay(valore_in_millisecondi); ], il led lampeggerà più velocemente o più lentamente in base al valore dato.

Breadboard

Materiale:

blink_arduino

 

Sketch

int led = 9; // Creiamo una variabile di tipo intero con valore 9.
             // Il 9 sarà il pin dove andrà collegato l'anodo del led

void setup() {                
  pinMode(led, OUTPUT); // Impostiamo il pin 9 come pin di OUTPUT    
}

void loop() {
  digitalWrite(led, HIGH);   // Scriviamo sul pin 9 lo stato alto (5 Volt)
  delay(1000);               // Ritardo di 1000ms = 1 secondo
  digitalWrite(led, LOW);    // Scriviamo sul pin 9 lo stato basso (0 Volt)
  delay(1000);               // Ritardo di 1000ms = 1 secondo
}

Fade

Questo sketch accenderà e spegnerà un led con l’effetto dissolvenza utilizzando un pin PWM (Se non sai cosa sono i pin PWM leggi qui). Lo schema elettrico è lo stesso dell’esempio precedente.

Sketch

int led = 9;         // Creiamo una variabile di tipo intero con valore 9.
                     // Il 9 sarà il pin dove andrà collegato l'anodo del led
                     
int luminosita = 0;  // Variabile in cui andrà memorizzato il valore di
                     // luminosità che avrà il led.
                     
int fadeAmount = 5;  // Incremento e Decremento di 5

void setup()  { 
  pinMode(led, OUTPUT); // Impostiamo il pin 9 come pin di OUTPUT
} 

void loop()  { 
  analogWrite(led, luminosita); // Scriviamo sul pin 9 il valore di luminosità.
                                // Dovrà essere un valore compreso tra 0 e 255  

  luminosita = luminosita + fadeAmount; // Incrementiamo il valore di luminosità di 5 per ogni ciclo
                                        // fino ad arrivare a 255.

  if (luminosita == 0 || luminosita == 255) { // Se luminosità è uguale a 0 o a 255
    fadeAmount = -fadeAmount ;                // fadeAmount sarà uguale all'opposto del suo valore
                                              // Es. Se fadeAmount è uguale a 5 
                                              // in questo caso diventerà -5 e viceversa.                                            
  }     
  delay(30);   // Ritardo di 30ms (in modo da vedere l'effetto dissolvenza)                      
}

Button

In questo esempio vedremo come accendere e spegnere un led tramite un pulsante. Il funzionamento è abbastanza semplice, finché il pulsante è premuto il led rimarrà acceso, se lasciamo il pulsante il led si spegnerà.

Breadboard

Materiale:

button_arduino

Sketch

const int Pulsante = 2;    // 2 sarà il pin dove andrà collegato il pulsante 
const int ledPin =  9;      // 9 sarà il pin dove andrà collegato l'anodo del led 

int Stato_Pulsante = 0;        // Variabile su cui andrà memorizzato il valore del pulsante

void setup() {
  pinMode(ledPin, OUTPUT);     // Impostiamo il pin 9 come pin di OUTPUT (LED)
  pinMode(Pulsante, INPUT);   // Impostiamo il pin 2 come pin di INPUT (PULSANTE)
}

void loop(){
  Stato_Pulsante = digitalRead(Pulsante); // Con questa istruzione leggiamo il valore del pulsante
                                          // e lo salviamo nella variabile stato_pulsante

  if (Stato_Pulsante == HIGH) {    // Se Stato_Pulsante è uguale a 1 o HIGH (5 volt)     
     
    digitalWrite(ledPin, HIGH);    // Scriviamo sul pin 9 lo stato alto (5 Volt)
  } 
  else {                           // Altrimenti
    
    digitalWrite(ledPin, LOW);     // Scriviamo sul pin 9 lo stato basso (0 Volt)
  }
}

Debounce

In questo esempio vedremo come lasciare  acceso o spento un led con un pulsante. Da non confondersi con l’esempio precedente. In questo caso premendo il pulsante una sola volta il led rimarrà acceso, ripremendolo il led si spegnerà. Lo schema elettrico è lo stesso dell’esempio Button. Nello sketch noterete anche la funzione millis() non è altro che una funzione del core di Arduino che restituisce il numero di millisecondi trascorsi dall’istante in cui si fornisce l’alimentazione ad arduino.

Sketch

const int Pulsante = 2;    // 2 sarà il pin dove andrà collegato il pulsante 
const int ledPin =  9;      // 9 sarà il pin dove andrà collegato l'anodo del led 

// Variabili
int ledState = HIGH;         // Variabile su cui andrà memorizzato lo stato del led (HIGH o LOW)
int buttonState;          // Variabile su cui andrà memorizzato il valore del pulsante
int lastButtonState = LOW;   // Variabile su cui andrà memorizzato l'ultimo valore del pulsante

long lastDebounceTime = 0;  // Variavile su cui andrà memorizzato il tempo dell'ultima volta che il pulsante è stato premuto
long debounceDelay = 50;    // Tempo di antirimbalzo (Aumentare se si vede uno sfarfallio nel led)

void setup() {
  pinMode(Pulsante, INPUT); // Impostiamo il pin 2 come pin di INPUT (PULSANTE)
  pinMode(ledPin, OUTPUT);   // Impostiamo il pin 9 come pin di OUTPUT (LED)

  digitalWrite(ledPin, ledState); // Impostiamo lo stato iniziale del led, in questo caso è HIGH.
}

void loop() {

  int reading = digitalRead(Pulsante); // Con questa istruzione leggiamo il valore del pulsante
                                       // e lo salviamo nella variabile reading

  if (reading != lastButtonState) {    // Se reading è diverso di lastButtonState

    lastDebounceTime = millis();       // lastDebounceTime sarà uguale a mills()
  } 
  
  if ((millis() - lastDebounceTime) > debounceDelay) {
  
    if (reading != buttonState) {
      buttonState = reading;

      if (buttonState == HIGH) {
        ledState = !ledState;
      }
    }
  }
  
  digitalWrite(ledPin, ledState);

  lastButtonState = reading;
}

BuzzerButton

Ora vedremo come far suonare un Buzzer con un Pulsante.  Il tutto si basa sulla funzione tone(pin, frequency, duration) , che genera un onda quadra di una frequenza specifica su un pin dove andrà il buzzer.

Questa funzione è abbastanza semplice da utilizzare. Su pin va inserito il valore del pin utilizzato per il buzzer, suduration la durata del suono in millesecondi e su frequency la frequenza della nota musicale (ogni nota ha una sua frequenza).

Ecco un elenco con le frequenze di tutte le note musicali:

/*************************************************
 * Public Constants
 *************************************************/

#define NOTE_B0  31
#define NOTE_C1  33
#define NOTE_CS1 35
#define NOTE_D1  37
#define NOTE_DS1 39
#define NOTE_E1  41
#define NOTE_F1  44
#define NOTE_FS1 46
#define NOTE_G1  49
#define NOTE_GS1 52
#define NOTE_A1  55
#define NOTE_AS1 58
#define NOTE_B1  62
#define NOTE_C2  65
#define NOTE_CS2 69
#define NOTE_D2  73
#define NOTE_DS2 78
#define NOTE_E2  82
#define NOTE_F2  87
#define NOTE_FS2 93
#define NOTE_G2  98
#define NOTE_GS2 104
#define NOTE_A2  110
#define NOTE_AS2 117
#define NOTE_B2  123
#define NOTE_C3  131
#define NOTE_CS3 139
#define NOTE_D3  147
#define NOTE_DS3 156
#define NOTE_E3  165
#define NOTE_F3  175
#define NOTE_FS3 185
#define NOTE_G3  196
#define NOTE_GS3 208
#define NOTE_A3  220
#define NOTE_AS3 233
#define NOTE_B3  247
#define NOTE_C4  262
#define NOTE_CS4 277
#define NOTE_D4  294
#define NOTE_DS4 311
#define NOTE_E4  330
#define NOTE_F4  349
#define NOTE_FS4 370
#define NOTE_G4  392
#define NOTE_GS4 415
#define NOTE_A4  440
#define NOTE_AS4 466
#define NOTE_B4  494
#define NOTE_C5  523
#define NOTE_CS5 554
#define NOTE_D5  587
#define NOTE_DS5 622
#define NOTE_E5  659
#define NOTE_F5  698
#define NOTE_FS5 740
#define NOTE_G5  784
#define NOTE_GS5 831
#define NOTE_A5  880
#define NOTE_AS5 932
#define NOTE_B5  988
#define NOTE_C6  1047
#define NOTE_CS6 1109
#define NOTE_D6  1175
#define NOTE_DS6 1245
#define NOTE_E6  1319
#define NOTE_F6  1397
#define NOTE_FS6 1480
#define NOTE_G6  1568
#define NOTE_GS6 1661
#define NOTE_A6  1760
#define NOTE_AS6 1865
#define NOTE_B6  1976
#define NOTE_C7  2093
#define NOTE_CS7 2217
#define NOTE_D7  2349
#define NOTE_DS7 2489
#define NOTE_E7  2637
#define NOTE_F7  2794
#define NOTE_FS7 2960
#define NOTE_G7  3136
#define NOTE_GS7 3322
#define NOTE_A7  3520
#define NOTE_AS7 3729
#define NOTE_B7  3951
#define NOTE_C8  4186
#define NOTE_CS8 4435
#define NOTE_D8  4699
#define NOTE_DS8 4978

BreadBoard

Materiale:

BuzzerButton_arduino

Sketch

#include "pitches.h" // Libreria con tutte le frequenze delle varie note musicali

const int Pulsante = 2;
const int Buzzer = 7;

int Stato_Pulsante = 0;
int note = NOTE_A4;

void setup() {
  pinMode(Pulsante, INPUT);   // Impostiamo il pin 2 come pin di INPUT (PULSANTE)
}

void loop() {
 Stato_Pulsante = digitalRead(Pulsante); // Con questa istruzione leggiamo il valore del pulsante
                                         // e lo salviamo nella variabile stato_pulsante
                                          
     if (Stato_Pulsante == HIGH) {       // Se Stato_Pulsante è uguale a 1 o HIGH (5 volt)
      
      tone(Buzzer, note, 20);            // Riproduci la nota NOTE_A4 (LA) da buzzer sul pin 7
    } 
}

Ora potete costruirvi una tastiera musicale 🙂 . Ecco a voi il tutorial !!!

In aggiornamento…

 ← Nozioni su Input/Output - Arduino          |           →