Arduino e bluetooth ajuda!

*estou tentando usar o modo bluetooth pra lig led por ums 5 seg e deligar sozinho (led e 5 seg so pra teste ) mais todos os temporizadores que testei nao funciona corretamente com bluetooth e wifi e foram varios com millis e SoftTimers e outros se alguém tiver um que funciona seria de muita ajuda .esse código e o padrão que tava usando o bluetooth em se funciona mais o temporizador so quando nao tem código bluetooth junto e ignorar loopled nao vou usar *



#include <SoftwareSerial.h> //INCLUSÃO DE BIBLIOTECA

const int pinoRX = 2; //PINO DIGITAL 2 (RX)

const int pinoTX = 3; //PINO DIGITAL 3 (TX)

const int pinoLed = 12; //PINO DIGITAL UTILIZADO PELO LED

int dadoBluetooth = 0; //VARIÁVEL QUE ARMAZENA O VALOR ENVIADO PELO BLUETOOTH


SoftwareSerial bluetooth(pinoRX, pinoTX); //PINOS QUE EMULAM A SERIAL, ONDE

//O PINO 2 É O RX E O PINO 3 É O TX

void setup(){

  Serial.begin(9600); //INICIALIZA A SERIAL

  bluetooth.begin(9600); //INICIALIZA A SERIAL DO BLUETOOTH

  bluetooth.print("$"); //IMPRIME O CARACTERE

  bluetooth.print("$"); //IMPRIME O CARACTERE

  bluetooth.print("$"); //IMPRIME O CARACTERE

  

  pinMode(pinoLed, OUTPUT); //DEFINE O PINO COMO SAÍDA

}

void loop(){

  if(bluetooth.available()){ //SE O BLUETOOTH ESTIVER HABILITADO, FAZ

       dadoBluetooth = bluetooth.read(); //VARIÁVEL RECEBE O VALOR ENVIADO PELO BLUETOOTH

    if(dadoBluetooth == '1'){ //SE O VALOR RECEBIDO FOR IGUAL A 1, FAZ

      Serial.println("LED LIGADO"); //IMPRIME O TEXTO NA SERIAL

      digitalWrite(pinoLed, HIGH); //LIGA O LED

    }

    if(dadoBluetooth == '0'){ //SE O VALOR RECEBIDO FOR IGUAL A 0, FAZ

      Serial.println("LED DESLIGADO"); //IMPRIME O TEXTO NA SERIAL

      digitalWrite(pinoLed, LOW); //DESLIGA O LED

    }

    if(dadoBluetooth == 'b'){ //SE O VALOR RECEBIDO FOR IGUAL A b, FAZ

      Serial.println("LOOP DO LED ATIVADO"); //IMPRIME O TEXTO NA SERIAL

      loopLED = true; //VARIÁVEL RECEBE verdadeiro

    }else{ //SENÃO, FAZ

      loopLED = false; //VARIÁVEL RECEBE falso

    }

  }

 

  //MÉTODO RESPONSÁVEL PELO LOOP (LIGA / DESLIGA) DO LED

  

}


Olá! Bem vindo ao Fórum.

Qual aparelho envia os dados para o Arduino? Qual Arduino você está usando? O Arduino está recebendo corretamente o '1' e o '0'?

Ok, mas você não mostrou nenhuma dessas tentativas. No código que colocou aqui não há nenhum tipo de temporizador.

Se você não vai usar o "loopled", o temporizador seria para fazer o quê?

O jeito mais fácil de piscar um LED pelo tempo que você quiser é usando o delay. Você chegou a tentar? Tudo bem que isso bloqueia a recepção de outros comandos enquanto o LED estiver piscando, mas pode já ser suficiente para o que você quer fazer.

Dê uma olhada nos exemplos de programação que vêm na própria IDE do Arduino: o "blink" e o "blink without delay" (que usa a função Millis). :wink:

  • então no caso quero um temporizador que liga mais de um led pro tempos diferentes e apaga e que funciona em código bluetooth e também tem que ser multitarefas pra os tempos diferentes .E eu tenho vários códigos de temporizador e to fazendo outro pra testar mais os que ja tenho nao funciona direito com bluetooth fora que usar delay trava o codigo . No codigo acima tinha perguntado se alguém tinha um que funcionasse com o codigo acima por isso nao fiz alterações e nao postei o temporizador . Respondendo sua perguntas acima o celular mada o comando '1' pra dispara o temporizador e o arduino fica mandando o tempo restante
    Pra o celular .no caso de várias coisa au mesmo tempo e quando o tempo acabar desliga o led. (O codigo e pra irrigação de várias planta. led e so pra testar mesmo seria no caso varios ralé) o codigo bluetooth ta funcionando e as porta ta d por que tava usando esp8266 d1d2 mais testei em arduino nano e mudei as porta e so o temporizador nao funciona *
/*
 * Exemplo de código usando millis()
 */
// Inicia variáveis de tempo
unsigned long millisTarefa1 = millis();
unsigned long millisTarefa2 = millis();
 int liga_ou_desligar1 = 1;
 int liga_ou_desligar2 = 1;
 long tempo1 = 5000;
 long tempo2 = 10000;
 unsigned long millisSegundo1 ;
 unsigned long millisSegundo2;
// Iniciação
void setup(){
  // Inicia comunicação na porta serial
  Serial.begin(115200);
  // Define pinos dos leds como saída
  pinMode(D4, OUTPUT);
  pinMode(D3, OUTPUT);
  
}
// Laço perpétuo
void loop(){
  // Executa tarefa 1
  tarefa1();
  tarefa2();
  
}
 
void tarefa1(){
  // Verifica se já passou 200 milisegundos

   if(liga_ou_desligar1 == 1){

         if((millis() - millisTarefa1) < tempo1){
            // Acende o led do pino 7
         digitalWrite(D4, HIGH);
           millisSegundo1 = ( tempo1 - (millis() - millisTarefa1 ));
             Serial.println(millisSegundo1 /1000);
         }else{
          // Apaga o led do pino 7
           digitalWrite(D4, LOW);
         }
           }else if(liga_ou_desligar1==0){
           digitalWrite(D4, LOW);


           }

}

void tarefa2(){
  // Verifica se já passou 200 milisegundos

   if(liga_ou_desligar2 == 1){

         if((millis() - millisTarefa2) < tempo2){
            // Acende o led do pino 7
         digitalWrite(D3, HIGH);
           millisSegundo2 = ( tempo2 - (millis() - millisTarefa2));
             Serial.println(millisSegundo2 /1000);
         }else{
          // Apaga o led do pino 7
           digitalWrite(D3, LOW);
         }
           }else if(liga_ou_desligar2==0){
           digitalWrite(D3, LOW);


           }

}

No celular vai ter um botão que liga todos os LEDs ao mesmo tempo e outro botão que desliga todos eles ao mesmo tempo. Enquanto eles estiverem ligados, eles vão ficar acendendo e apagando sozinhos conforme o tempo de cada um, é isso?

nao e pra irrigação cada um led no caso e um relé pra molhar por tempos diferentes quando um acabar o outro continua ate acabar o tempo dele também. tipo um led nao trava o tempo do outro

Experimenta essa versão aqui:

#include <SoftwareSerial.h> //INCLUSÃO DE BIBLIOTECA

const int pinoRX = 2; //PINO DIGITAL 2 (RX)
const int pinoTX = 3; //PINO DIGITAL 3 (TX)

const int pinoLed1 = 10; //PINO DIGITAL UTILIZADO PELO LED 1
const int pinoLed2 = 11; //PINO DIGITAL UTILIZADO PELO LED 2

int estadodosistema = 0; //inicia o sistema desligado

unsigned long temporizador1 = millis();
unsigned long temporizador2 = millis();

int dadoBluetooth = 0; //VARIÁVEL QUE ARMAZENA O VALOR ENVIADO PELO BLUETOOTH

SoftwareSerial bluetooth(pinoRX, pinoTX); //PINOS QUE EMULAM A SERIAL, ONDE
//O PINO 2 É O RX E O PINO 3 É O TX

void setup(){
  Serial.begin(9600); //INICIALIZA A SERIAL
  bluetooth.begin(9600); //INICIALIZA A SERIAL DO BLUETOOTH
  pinMode(pinoLed1, OUTPUT); //DEFINE O PINO COMO SAÍDA
  pinMode(pinoLed2, OUTPUT); //DEFINE O PINO COMO SAÍDA
}

void loop(){

  if(Serial.available()){ //SE O BLUETOOTH ESTIVER HABILITADO, FAZ
    dadoBluetooth = bluetooth.read(); //VARIÁVEL RECEBE O VALOR ENVIADO PELO BLUETOOTH

    if(dadoBluetooth == '1'){ //SE O VALOR RECEBIDO FOR IGUAL A 1, FAZ
      Serial.println("Sistema LIGADO");
      estadodosistema = 1;
    }
    
    if(dadoBluetooth == '0'){ //SE O VALOR RECEBIDO FOR IGUAL A 0, FAZ
	    Serial.println("Sistema DESLIGADO"); //IMPRIME O TEXTO NA SERIAL
	    digitalWrite(pinoLed1, LOW); //DESLIGA O LED 1
	    digitalWrite(pinoLed2, LOW); //DESLIGA O LED 2
      estadodosistema = 0;
    }
  }
  if (estadodosistema == 1) {
    piscaoLED1();
    piscaoLED2();
  }
}

void piscaoLED1() {
  const int tempoLED1 = 3000; //tempo de pisca do LED1 em ms
  static int estadoLED1 = 1;
  if((millis() - temporizador1) > tempoLED1){
          digitalWrite(pinoLed1, estadoLED1);
          temporizador1 = millis();
          estadoLED1 = !estadoLED1;
  }
}

void piscaoLED2() {
  const int tempoLED2 = 6000; //tempo de pisca do LED 2 em ms
  static int estadoLED2 = 1;
  if((millis() - temporizador2) > tempoLED2){
          digitalWrite(pinoLed2, estadoLED2);
          temporizador2 = millis();
          estadoLED2 = !estadoLED2;
  }
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.