domenica 8 novembre 2015

Bottoni letti da ingresso analogico

Quattro bottoni letti da ingresso analogico con Debouce:


Su amazon vendono lcd shield con 4 bottoni in ingresso analogico.
Così ho costruito uno sketch per quel modulo.

Collegamenti:

Da vedere sulla shield comprata, comunque per lo sketch che ho scritto:
Lcd da collegare ai pin 2, 3, 4, 5, 11, 12.
I 4 bottoni al pin A0.
Sull'Arduino Basic Control c'è lo schema per il collegamento dei bottoni per ingresso analogico.

Codice Arduino: Version 1.0 (stabile e testata)


#include <LiquidCrystal.h>
int debounce = 200;  //Tempo di rimbalzo
int readingOk;
int readingEsc;
int readingUp;
int readingDown;//Lettura corrente del pin INPUT PULSANTE
int previousOk = LOW;  //Lettura precedente del pin INPUT PULSANTE
int previousEsc = LOW;
int previousUp = LOW;
int previousDown = LOW;
long timeOk = 0;  //Ultimo tempo in cui il pin di OUTPUT è stato attivato
long timeEsc = 0;
long timeUp = 0;
long timeDown = 0;
int bottonepremuto = 0;
int LetturaValoreBottone = 0;

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


void setup()
{
     Serial.begin(9600);
     lcd.begin(16, 2);
}

void loop()
{
  leggiBottoniAnalog();
  if (bottonepremuto > 0)
  {
    Serial.println(bottonepremuto);
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print(bottonepremuto);
  }
}

void leggiBottoniAnalog(){

  bottonepremuto = 0; //azzero bottone premuto se no continua ad essere così anche finito di premere il tasto
  LetturaValoreBottone = analogRead(A0);

  if (LetturaValoreBottone > 50 && LetturaValoreBottone < 150)
  {
    readingOk = LOW;
    readingEsc = HIGH;
    readingUp = LOW;
    readingDown = LOW;
  }    
  else if (LetturaValoreBottone > 150 && LetturaValoreBottone < 250)
  { 
    readingOk = LOW;
    readingEsc = LOW;
    readingUp = LOW;
    readingDown = HIGH;
  }    
  else if (LetturaValoreBottone > 250 && LetturaValoreBottone < 350)
  {
    readingOk = LOW;
    readingEsc = LOW;
    readingUp = HIGH;
    readingDown = LOW;
  }
  else if (LetturaValoreBottone > 350)
  {
    readingOk = HIGH;
    readingEsc = LOW;
    readingUp = LOW;
    readingDown = LOW;
  }
  else
  {
    readingOk = LOW;
    readingEsc = LOW;
    readingUp = LOW;
    readingDown = LOW;
  }
  
  
  
  
  //Se abbiamo premuto in pulsante (HIGH) e la volta prima il suo stato
  //era LOW ed è trascorso il tempo necessario, allora...
  
  if (readingOk == HIGH && previousOk == LOW && millis() - timeOk > debounce) {
      //Ricorda quando l'ultima volta è stato premuto il pulsante  
      timeOk = millis();
      bottonepremuto=1;
  }
  
  if (readingEsc == HIGH && previousEsc == LOW && millis() - timeEsc > debounce) {
    //Ricorda quando l'ultima volta è stato premuto il pulsante  
    timeEsc = millis();
    bottonepremuto=4;
  }
  
  if (readingUp == HIGH && previousUp == LOW && millis() - timeUp > debounce) {
    //Ricorda quando l'ultima volta è stato premuto il pulsante  
    timeUp = millis();
    bottonepremuto=2;
  }
   
   if (readingDown == HIGH && previousDown == LOW && millis() - timeDown > debounce) {
     //Ricorda quando l'ultima volta è stato premuto il pulsante  
     timeDown = millis();
     bottonepremuto=3;
   }

  previousOk = readingOk;
  previousEsc = readingEsc;
  previousUp = readingUp;
  previousDown = readingDown;
}

Nessun commento:

Posta un commento