Publicidade:

quinta-feira, 7 de março de 2019

Arduino - Várias lâmpadas controladas por um mesmo interruptor

Nesse vídeo mostro como controlar várias lâmpadas através de um único interruptor através do Arduino.

Vídeo


Código-fonte
byte pinL1 = 3;
byte pinL2 = 4;
byte pinL3 = 5;
byte pinL4 = 6;
byte pinBt  = 2;



byte lamp1 = 1;
byte lamp2 = 1;
byte lamp3 = 1;
byte lamp4 = 1;

void setup()
{
  pinMode(pinBt, INPUT_PULLUP); //internal pullup resistor is used to simplify the circuit
  pinMode(pinL1, OUTPUT);
  pinMode(pinL2, OUTPUT);
  pinMode(pinL3, OUTPUT);
  pinMode(pinL4,OUTPUT);
}
 
byte digitalReadOnce(byte val){
  static byte lastVal = LOW;
  static unsigned long m = 0;
  if (lastVal != val && millis() > (m+100) ) { //M+100 -->DEBOUNCING 100ms
    lastVal = val;
    m = millis();
    return lastVal;
  } 
  return LOW;
}
 
int getCommand(){
  static unsigned long m1 = 0;  //millis no momento inicia de pressionar o botão 
  static unsigned long m2 = 0;  //millis após soltar o botão 
  static byte count = 0;
   
  byte r = digitalRead(pinBt);
   
  if (digitalReadOnce(r) == HIGH){
    m1 = millis();
    count++;
  }
   
  if (r == HIGH){
    m2 = millis();
  } else {
    if (! (m2>0 && m2-m1 < 1000) ){  //o botão deve ser pressionado por menos de 1 segundo, senão cancela o comando
      count = 0;
      m1 = 0;
      m2 = 0;
    }
     
    if (m2>0 && millis()-m2 > 1500){  //após a ultima vez pressionado o botao, aguarda 1,5 segundos para finalizar e retornar o comando.
      byte c = count;
      count = 0;
      m1 = 0;
      m2 = 0;
       
      return c;
    }
  }
   
  return 0;
}
 
 
 
void loop() {
  
  if( digitalRead(pinBt) == HIGH ){
    digitalWrite(pinL1, LOW);
    digitalWrite(pinL2,LOW);
    digitalWrite(pinL3,LOW);
    digitalWrite(pinL4,LOW);
  } else {
    digitalWrite(pinL1, lamp1);
    digitalWrite(pinL2,lamp2);
    digitalWrite(pinL3,lamp3);
    digitalWrite(pinL4, lamp4);
  }
   
  int command = getCommand();
 
  if (command == 1){
    lamp1 = !lamp1; 
  }
   
  if (command == 2){
    lamp2 = !lamp2; 
  }
   
  if (command == 3){
    lamp3 = !lamp3; 
  }
   
  if (command == 4){
    lamp4 = !lamp4; 
  }
  
  
   
  
  delay(10);  //apenas utilizado no simulador
}

3 comentários:

  1. Suas ideias são muito boas . É sempre um grande aprendizado . Abraço irmão

    ResponderExcluir
  2. Parabéns por um grande trabalho que você desenvolve, mostrando conhecimento aos amantes do ARDUINO.

    ResponderExcluir