Publicidade:

quarta-feira, 9 de julho de 2014

Arduino - Vários botões em um mesmo pino - 01

Esse vídeo mostra como configurar várias entradas em um mesmo pino no Arduino.

esse circuito identifica apenas um botão por vez. se for pressionado mais de um botão de uma vez, o circuito vai entender que o botão pressionado é aquele por onde a corrente passa com menor resistência e ignora os demais botões. 





Arduino - Vários botões em um mesmo pino - 02 

Esse vídeo mostra como ligar vários botões na mesma entrada analógica do Arduino. ao contrário do outro vídeo, esse mostra como fazer para que seja reconhecida múltiplas entradas simultaneamente.

link para planilha: https://docs.google.com/spreadsheet/ccc?key=0AtZzXhiNwNSrdEFqNUpUUXM4MV9vZURINmR1WUhmeXc&usp=sharing#gid=0






int PIN_ENTRADA = A0;
int PIN_SAIDA_1   = 3;
int PIN_SAIDA_2   = 4;
int PIN_SAIDA_3   = 5;
int PIN_SAIDA_4   = 6;

void setup(void) {
  Serial.begin(9600);
  pinMode(PIN_SAIDA_1, OUTPUT);
  pinMode(PIN_SAIDA_2, OUTPUT);
  pinMode(PIN_SAIDA_3, OUTPUT);
  pinMode(PIN_SAIDA_4, OUTPUT);
}

void loop(void) {
  int val_entrada = analogRead(PIN_ENTRADA);
  float voltagem = val_entrada * (5 / 1023.0);
  Serial.println(voltagem);  
  
  trataEntrada(voltagem);
  delay(100);
}

void trataEntrada(float v){
  int led1, led2, led3, led4;
  led1 = led2 = led3 = led4 = 0;
  
  if (v >= 0.40 && v < 0.84) {led1 = 0; led2 = 0; led3 = 0; led4 = 1;}
  if (v >= 0.84 && v < 1.21) {led1 = 0; led2 = 0; led3 = 1; led4 = 0;}
  if (v >= 1.21 && v < 1.56) {led1 = 0; led2 = 0; led3 = 1; led4 = 1;}
  if (v >= 1.56 && v < 1.83) {led1 = 0; led2 = 1; led3 = 0; led4 = 0;}
  if (v >= 1.83 && v < 2.06) {led1 = 0; led2 = 1; led3 = 0; led4 = 1;}
  if (v >= 2.06 && v < 2.25) {led1 = 0; led2 = 1; led3 = 1; led4 = 0;}
  if (v >= 2.25 && v < 2.44) {led1 = 0; led2 = 1; led3 = 1; led4 = 1;}
  if (v >= 2.44 && v < 2.60) {led1 = 1; led2 = 0; led3 = 0; led4 = 0;}
  if (v >= 2.60 && v < 2.73) {led1 = 1; led2 = 0; led3 = 0; led4 = 1;}
  if (v >= 2.73 && v < 2.85) {led1 = 1; led2 = 0; led3 = 1; led4 = 0;}
  if (v >= 2.85 && v < 2.96) {led1 = 1; led2 = 0; led3 = 1; led4 = 1;}
  if (v >= 2.96 && v < 3.06) {led1 = 1; led2 = 1; led3 = 0; led4 = 0;}
  if (v >= 3.06 && v < 3.15) {led1 = 1; led2 = 1; led3 = 0; led4 = 1;}
  if (v >= 3.15 && v < 3.23) {led1 = 1; led2 = 1; led3 = 1; led4 = 0;}
  if (v >= 3.23 && v < 5.00) {led1 = 1; led2 = 1; led3 = 1; led4 = 1;}
  
  if (led1) { digitalWrite(PIN_SAIDA_1, HIGH);  } else { digitalWrite(PIN_SAIDA_1, LOW); }
  if (led2) { digitalWrite(PIN_SAIDA_2, HIGH);  } else { digitalWrite(PIN_SAIDA_2, LOW); }
  if (led3) { digitalWrite(PIN_SAIDA_3, HIGH);  } else { digitalWrite(PIN_SAIDA_3, LOW); }
  if (led4) { digitalWrite(PIN_SAIDA_4, HIGH);  } else { digitalWrite(PIN_SAIDA_4, LOW); }
}




Arduino - vários botões no mesmo pino - 03 - com on/off 




Código Fonte:

int PIN_ENTRADA = A0;
int PIN_SAIDA_1 = 8;
int PIN_SAIDA_2 = 9;
int PIN_SAIDA_3 = 10;
int PIN_SAIDA_4 = 11;

float vcc = 5;
float modo_1_voltagem = 4.55; // 100 / (100+10) * 5
float modo_2_voltagem = 4.16; // 100 / (100+20) * 5
float modo_3_voltagem = 3.84; // 100 / (100+30) * 5
float modo_4_voltagem = 3.57; // 100 / (100+40) * 5

int modo_saida = 0;  //0: desliga

//variaveis para controle de liga e desliga
const long DEBOUNCE_DELAY             = 100;
int        pino_anterior              = 0;               //armazena o status da leitura no loop anterior
int        pino_anterior_db           = 0;
long       time_ultimo_debounce       = 0;
int        debounce_ok                = 1;

void setup(void) {
  Serial.begin(9600);
  pinMode(PIN_ENTRADA, INPUT);
  pinMode(PIN_SAIDA_1, OUTPUT);
  pinMode(PIN_SAIDA_2, OUTPUT);
  pinMode(PIN_SAIDA_3, OUTPUT);
  pinMode(PIN_SAIDA_4, OUTPUT);
  
}

void loop(void) {
  int val_entrada = analogRead(PIN_ENTRADA);
  float voltagem = val_entrada * (vcc / 1023.0);

  setModoSaida(voltagem);
  mostraSaida();

  if (voltagem > 2.00) {
    //Serial.println(voltagem);  
  }
  delay(10);
}

void setModoSaida(float v){
  modo_saida = 0;
  
  if ((  v >= (  (modo_1_voltagem + modo_2_voltagem)/2) ))                                                        { modo_saida = 1; }
  if ((  v >= (  (modo_2_voltagem + modo_3_voltagem)/2  )) && ( v < (  (modo_1_voltagem + modo_2_voltagem)/2)  )) { modo_saida = 2; }
  if ((  v >= (  (modo_3_voltagem + modo_4_voltagem)/2  )) && ( v < (  (modo_2_voltagem + modo_3_voltagem)/2)  )) { modo_saida = 3; }
  if ((  v >= (   modo_4_voltagem * 0.9  ))                && ( v < (  (modo_3_voltagem + modo_4_voltagem)/2)  )) { modo_saida = 4; }
}

void mostraSaida(){
  int pino = 0;                                 
  
  if (modo_saida == 0) { pino = 0;  }
  if (modo_saida == 1) { pino = PIN_SAIDA_1;  }
  if (modo_saida == 2) { pino = PIN_SAIDA_2;  }
  if (modo_saida == 3) { pino = PIN_SAIDA_3;  }
  if (modo_saida == 4) { pino = PIN_SAIDA_4;  }
  
  if (   pino != pino_anterior    )                            {   time_ultimo_debounce = millis(); debounce_ok = 0; }
  if (  (millis() - time_ultimo_debounce) > DEBOUNCE_DELAY )   {   debounce_ok = 1;                                  }
  
  Serial.print("pino: " );
  Serial.print(pino);
  Serial.print(" - pino ant: ");
  Serial.print(pino_anterior);
  Serial.print(" - pino ant db: ");
  Serial.print(pino_anterior_db);
  Serial.println("");
  
  if (debounce_ok == 1){ 
    if (pino > 0 && pino_anterior_db == 0){   
      digitalWrite(pino, !digitalRead(pino));  
    }  
  
    pino_anterior_db = pino; 
  } else {
    pino_anterior_db = 0; 
    pino_anterior    = 0; 
  }
    
  pino_anterior = pino; 
}

Um comentário:

  1. Ola tudo bem? meu nome e Victor
    gostaria de saber se tem com ligar 14 chaves tactil em 14 Leds
    da mesma forma que você fez no seu vídeo.

    ResponderExcluir