*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
}
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).
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
#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;
}
}