Risorse

Menu utente

QTube

Video Id mancante!

Banner

Guadagna soldi

Arduino
PDF Stampa E-mail

Un po' di teoria

 

Il codice accende il Led quando è premuto il pulsante ( MicroSwitch ) e lo mantiene acceso dopo che lo si rilascia.

Questi piccoli pulsante sono dispositivi molto semplici: due parti di metallo separate da una molla. Quando premete il pulsante, i due contatti si toccano e l'elettricità può fluire. Questo suona facile, ma nella vita reale il collegamento non è così perfetto, specie quando il pulsante non è premuto completamente, e genera dei segnali spuri detti simbalzi ( Bouncing )

Quando il pulsante produce questi segnali, Arduino vede una sequenza molto rapida di segnali acceso-spento. Per evitarlo sono state sviluppate molte tecniche, ma in questo semplice codice ho notato che normalmente basta aggiungere un ritardo di 10/50 millisecondi quando il codice rileva una transizione.

L'esempio sottostante mostra il codice.

 

 

Codice ( Sketch ) Accensione e Cambio luminosità ( Brightness )

 

Esempio: Accende il Led quando è premuto il pulsante e lo mantiene acceso dopo che lo si rilascia, includendo un semplice antirimbalzo ( de-bouncing )

 

#define Led 9     // Il Pin del Led
#define Pulsante 7  // Pin di Input del pulsante

int Valore = 0;      // Conserva lo stato del pin input
int Vecchio_Valore = 0;  // Conserva il valore precedente di "Valore"
int Stato = 0;    // 0 = Led spento mentre 1 = Led acceso

int brightness = 128;        // Conserva il valore della luminosità
unsigned long startTime = 0; // quando è cominciata la pressione ?

void setup() { 
 pinMode(Led, OUTPUT);   // Indica ad Arduino che Led è un Output
 pinMode(Pulsante, INPUT); // E che Pulsante è un Input
} 

void loop() {
 
 Valore = digitalRead(Pulsante); // Legge il valore dell'input e lo conserva


 if ((Valore == HIGH) && (Vecchio_Valore == LOW)) // Controlla se è venuta una transizione
{
 
 Stato = 1 - Stato; // Cambio lo stato da spento ad acceso o viceversa

 startTime = millis(); // millis() è l'orologio di Arduno che restituisce quanti millisecondi sono passati da quando è stata resettata la scheda.

 // ( Questa riga ricorda quando è stato premuto il pulsante l'ultima volta )
 delay(10);
 }

 

 if ((Valore == HIGH) && (Vecchio_Valore == HIGH)) // Verifica che il pulsante sia ancora premuto
{

 if (Stato == 1 && (millis() - startTime) > 500) // Se il pulsante è premuto per più di 500Ms
{

 brightness++; // Incrementa la luminosità di 1
 delay(10);    // Ritardo per evitare che la luminosità aumenti troppo rapidamente

 if (brightness > 255) { // 255 è la luminosità massima

 brightness = 0; // Se va oltre 255 torna a 0
 }
 }
 }

 Vecchio_Valore = Valore; // Memorizza il valore precedente di " Valore "

 if (Stato == 1) 
{      
 analogWrite(Led, brightness); // Accende il led al livello corrente di luminosità
 } 
else 
{ 
 analogWrite(Led, 0); // Spegne il Led
 } 
}


 

Aggiungi commento


Codice di sicurezza
Aggiorna

Joomla SEF URLs by Artio