2 programas de irrigação e o arduino nao esta realizando mais o processo. Para que nao fosse necessário usar delays eu estou calculando o tempo de ligar e desligar os setores e a bomba e deixando uma quantidade bem grande de if's para conferir as condições. Acho que pode ser nisso o problema:
O codigo esta muito grande, vou deixar ele em anexo mas vou citar o trecho que acredito ser o problema
void Bomba()//Tempo que a bomba ficará ligada{ delay(1000); while(tBomba >=1) { lcd.clear();lcd.setCursor(0,0);lcd.print("Tempo ");lcd.print(tBomba);lcd.print(" minutos"); lcd.setCursor(0,1);lcd.print("Enter");lcd.setCursor(7,1);lcd.print("(-)");lcd.setCursor(12,1);lcd.print("(+)"); delay(120); if(tBomba>60){tBomba=1;} if(digitalRead(bUp)==LOW){delay(70);tBomba++;} if(digitalRead(bDown)==LOW){delay(70);tBomba--;} if(digitalRead(bEnter)==LOW){delay(70);tB=tBomba;menu=0;tBomba=0;} if(digitalRead(bMode)==LOW){menu=0;tBomba=0;} //Vetores recebem horas e minutos e converte para minutos //Calculo Programa 1//Depois acrescenta o valor do tempo de bomba(tB)//Operação desliga bomba e valvula 4 //Retorna os valores para os vetores com o horario de desligar//Exemplo: Programa 1 - 6:30 com tempo de bomba 10min//Em minutos (6*60)+30+10=400minutos//Tranformando para desligar hora=400/60=6 e minuto=400%60=40
if(h[2]!=0 && h[1]!=0 && h[30]==0 && tB!=0){ h[34]=h[2];h[33]=h[1]; h[34]=h[34]*60;h[34]=h[34]+h[33]+(4*tB);h[33]=h[34]%60;h[34]=h[34]/60; h[8]=h[2];h[7]=h[1]; h[8]=h[8]*60;h[8]=h[8]+h[7]+tB;h[7]=h[8]%60;h[8]=h[8]/60;//1 tempo(desliga 1 e liga 2) h[10]=h[2];h[9]=h[1]; h[10]=h[10]*60;h[10]=h[10]+h[9]+(2*tB);h[9]=h[10]%60;h[10]=h[10]/60;//2 tempo(desliga 2 e liga 3) h[12]=h[2];h[11]=h[1]; h[12]=h[12]*60;h[12]=h[12]+h[11]+(3*tB);h[11]=h[12]%60;h[12]=h[12]/60;//3 tempo(desliga 3 e liga 4) //Calculo Programa 2 if(h[4]!=0 && h[3]!=0 && h[31]==0){ h[14]=h[4];h[15]=h[3]; h[14]=h[14]*60;h[14]=h[14]+h[15]+(4*tB);h[15]=h[14]%60;h[14]=h[14]/60;//Operação Desliga bomba e valvula 4 h[16]=h[4];h[17]=h[3]; h[16]=h[16]*60;h[16]=h[16]+h[17]+tB;h[17]=h[16]%60;h[16]=h[16]/60;//1 tempo(desliga 1 e liga 2) h[18]=h[4];h[19]=h[3]; h[18]=h[18]*60;h[18]=h[18]+h[19]+(2*tB);h[19]=h[18]%60;h[18]=h[18]/60;//2 tempo(desliga 2 e liga 3) h[20]=h[4];h[21]=h[3]; h[20]=h[20]*60;h[20]=h[20]+h[21]+(3*tB);h[21]=h[20]%60;h[20]=h[20]/60;//3 tempo(desliga 3 e liga 4) h[31]=1; //Calculo Programa 3 if(h[6]!=0 && h[5]!=0 && h[32]==0){ h[22]=h[6];h[23]=h[5]; h[22]=h[22]*60;h[22]=h[22]+h[23]+(4*tB);h[23]=h[22]%60;h[22]=h[22]/60;//Operação Desliga bomba e valvula 4 h[24]=h[6];h[25]=h[5]; h[24]=h[24]*60;h[24]=h[24]+h[25]+tB;h[25]=h[24]%60;h[24]=h[24]/60;//1 tempo(desliga 1 e liga 2) h[26]=h[6];h[27]=h[5]; h[26]=h[26]*60;h[26]=h[26]+h[27]+(2*tB);h[27]=h[26]%60;h[26]=h[26]/60;//2 tempo(desliga 2 e liga 3) h[28]=h[6];h[29]=h[5]; h[28]=h[28]*60;h[28]=h[28]+h[29]+(3*tB);h[29]=h[28]%60;h[28]=h[28]/60;//3 tempo(desliga 3 e liga 4) h[32]=1; } }//Fim if Programa 2 h[30]=1;tempo=1; }//Fim if Programa 1 }//Fim While}
if(d[0]=1){//Se apção todos os dias for selecionada //Horarios Para Programa 1 if(h[2]==RTCValues[4] && h[1]==RTCValues[5] && RTCValues[6]==0){digitalWrite(bomba,HIGH);digitalWrite(vs1,LOW);delay(70);}//Liga bomba e valvula 1 if(h[8]==RTCValues[4] && h[7]==RTCValues[5] && RTCValues[6]==0){digitalWrite(vs1,HIGH);digitalWrite(vs2,LOW);delay(70);}//Desliga Valvula 1 e liga Valvula 2 if(h[10]==RTCValues[4] && h[9]==RTCValues[5] && RTCValues[6]==0){digitalWrite(vs2,HIGH);digitalWrite(vs3,LOW);delay(70);}//Desliga Valvula 2 e liga Valvula 3 if(h[12]==RTCValues[4] && h[11]==RTCValues[5] && RTCValues[6]==0){digitalWrite(vs3,HIGH);digitalWrite(vs4,LOW);delay(70);}//Desliga Valvula 3 e liga Valvula 4 if(h[34]==RTCValues[4] && h[33]==RTCValues[5] && RTCValues[6]==0){digitalWrite(bomba,LOW);digitalWrite(vs4,HIGH);delay(70);}//Desliga bomba e desliga Valvula 4 //Horarios Para Programa 2 if(h[4]==RTCValues[4] && h[3]==RTCValues[5] && RTCValues[6]==0){digitalWrite(bomba, HIGH);digitalWrite(vs1,LOW);}//Liga bomba e valvula 1 if(h[16]==RTCValues[4] && h[17]==RTCValues[5] && RTCValues[6]==0){digitalWrite(vs1,HIGH);digitalWrite(vs2,LOW);}//Desliga Valvula 1 e liga Valvula 2 if(h[18]==RTCValues[4] && h[19]==RTCValues[5] && RTCValues[6]==0){digitalWrite(vs2,HIGH);digitalWrite(vs3,LOW);}//Desliga Valvula 2 e liga Valvula 3 if(h[20]==RTCValues[4] && h[21]==RTCValues[5] && RTCValues[6]==0){digitalWrite(vs3,HIGH);digitalWrite(vs4,LOW);}//Desliga Valvula 3 e liga Valvula 4 if(h[14]==RTCValues[4] && h[15]==RTCValues[5] && RTCValues[6]==0){digitalWrite(bomba,LOW);digitalWrite(vs4,HIGH);}//Desliga bomba e desliga Valvula 4 //Horarios Para Programa 3 if(h[6]==RTCValues[4] && h[5]==RTCValues[5] && RTCValues[6]==0){digitalWrite(bomba, HIGH);digitalWrite(vs1,LOW);}//Liga bomba e valvula 1 if(h[24]==RTCValues[4] && h[25]==RTCValues[5] && RTCValues[6]==0){digitalWrite(vs1,HIGH);digitalWrite(vs2,LOW);}//Desliga Valvula 1 e liga Valvula 2 if(h[26]==RTCValues[4] && h[27]==RTCValues[5] && RTCValues[6]==0){digitalWrite(vs2,HIGH);digitalWrite(vs3,LOW);}//Desliga Valvula 2 e liga Valvula 3 if(h[28]==RTCValues[4] && h[29]==RTCValues[5] && RTCValues[6]==0){digitalWrite(vs3,HIGH);digitalWrite(vs4,LOW);}//Desliga Valvula 3 e liga Valvula 4 if(h[22]==RTCValues[4] && h[23]==RTCValues[5] && RTCValues[6]==0){digitalWrite(bomba,LOW);digitalWrite(vs4,HIGH);}//Desliga bomba e desliga Valvula 4 }
As variaveis h[1]...h[6] Recebem os horarios de irrigação. Impares minutos e Pares horas…
um dese, mais ele contem 3 propaganda então ele gira e para por 3 ou 5 segundos e depois gira novamente pra outra propaganda e fica 3 a 5 segundos na ultima propaganda o sistema eletronico tem que entender que é ultima tela e volta fazendo sentido inverso da mesma forma subindo como faço isso com a placa arduino, tenho que usar sensor ? e qual sensor.
Obrigado
…
ed[1].setLED(6, 5000); // LED 2 no pino 3 com tempo total de 5 segundos led[2].setLED(7, 10000); // LED 3 no pino 4 com tempo total de 10 segundos
button[0].setButton(2); // Botão 1 no pino 5 button[1].setButton(3); // Botão 2 no pino 6 button[2].setButton(4); // Botão 3 no pino 7}
Além disso, no meu teste usei INPUT_PULLUP para facilitar a montagem no protoboard, sem precisar dos push buttons. Com isso basta levar os pinos 2, 3 ou 4 para GND que aciona o botão.
Mas precisa inverter a lógica do teste de digitalRead() no void DebouncedButton::scanButton()
e alterar para iniciar o pino em pull up em void DebouncedButton::setButton(int pin)
…
controlled by Timer2
On the Arduino Mega we have 6 timers and 15 PWM outputs:
Pins 4 and 13: controlled by Timer0
Pins 11 and 12: controlled by Timer1
Pins 9 and10: controlled by Timer2
Pin 2, 3 and 5: controlled by timer 3
Pin 6, 7 and 8: controlled by timer 4
Pin 46, 45 and 44:: controlled by timer 5
Fonte: http://blog.oscarliang.net/arduino-timer-and-interrupt-tutorial/
Rui…
Adicionado por mineirin RV ao 18:50 em 28 março 2016
, Mini 3, 5, 6, 9, 10, 11 490 Hz (pins 5 and 6: 980 Hz).
3. Vc está usando o valor 255 para o analogWrite(0, este valor é nível continuo, não havendo pulsos.
A frequência de ports PWM do UNO são diferentes nos ports 5 e 6.
RV
…
Adicionado por mineirin RV ao 21:35 em 11 julho 2019
ão mínima.
-2- Aperto o botão + continuamente, e o motor acelera a sua rotação, ate que eu pare de pressionar o botão.
- 3 – Caso eu queira diminuir a rotação, aperto o botão com o símbolo de – e diminui a velocidade. Se continuar pressionando, o led pisca rápido 3 vezes e desliga o motor.
-4- o motor chega a uma determinada posição, aperto o botão, continuamente por 3 segundos, e ele para e memoriza essa posição, um led pisca por 3 segundos e para de piscar, ficando acesso.
-5- aciono o botão, e ele começa a girar novamente ate a próxima posição, aperto o botão, continuamente por 3 segundos, e ele para e memoriza essa posição, um led pisca por 3 segundos e para de piscar, ficando acesso.
- 6 - E estando parado, eu aperto o botão por 5 segundos, o led pisca 5 vezes e para na cor verde, e ai ele passa a girar do inicio, da posição 1 ate a posição 2
-7 - Ele só vai girar nesse limite, ate que eu delete essa memoria, apertando continuamente o botão por 5 segundo e ai o led pisca 5 vezes e apaga-se e ele volta a girar o seu ciclo normal, total, por exemplo os 180 graus.
obrigado e um abraço…
;5)){} // Se X for maior que 3 E Y for menor que 5.
|| é função responsável por "OU" ou "OR"
Exemplo: if ((X>3) || (Y<5)){}// Se X for maior que 3 OOOUUUU Y for menor que 5
= é responsável por ATRIBUIR um valor.
Exemplo: botao = 5; // a variável "botao" agora possui o valor igual a 5
== é responsável por COMPARAR um valor.
Exemplo: if (X == 5){} // se X for IGUAL a 5.
Sabendo disso, agora vamos retornar ao seu código. Ok? no void loop(){} // linha 75
if ((digitalRead(BotaoQrt_Pin) == HIGH) and (anterior = HIGH)) { digitalWrite(LuzQuarto1_Pin,LOW); anterior == LOW; controle == true; ini == 0; } while (digitalRead(BotaoQrt_Pin) == HIGH);}
Observe que na condição existem vários erros de escrita. Você compara valores quando quer atribuir, e você atribui quando quer comparar.
Observe este pequeno trecho do seu código, e veja se identifica estas questões. Caso não consiga, terei maior prazer em lhe apontar, mas acho que vale a pena você tentar um pouco, pois irá facilitar seu desenvolvimento em outras questões..…
Adicionado por tiago merces ao 17:01 em 9 setembro 2020
ora: 24-hour format, from 0 to 23 //Minuto: from 0 to 59 //Second: from 0 to 59{ wdt_disable(); // DESABILITA A FUNÇÃO WDT NESTA PARTE DO PROGRAMA. delay(1000); while( i> 0 && i<8) { lcd.setCursor(0,0); LerTecla(); if(i==1){lcd.print(" Entre com Ano ");} if(i==2){lcd.print(" Entre com Mes ");} if(i==3){lcd.print(" Entre com Dia ");} if(i==4){lcd.print(" Entre cm Semana");} if(i==5){lcd.print(" Entre com Hora ");} if(i==6){lcd.print(" Entre com Minut");} if(i==7){lcd.print(" Entre com Segun");} if(UP){acertahora[i]++;estouro = 0;UP = 0;} //alteração custela if (DOWN && acertahora[i] >= 0){acertahora[i]--;estouro = 0; DOWN = 0;} //alteração custela if (SELECT){i ++;estouro = 0; SELECT = 0; delay(200);} //alteração custela if(acertahora[1] < 1 ){acertahora[1] = 13;} if(acertahora[2] > 12){acertahora[2] = 1;} if(acertahora[2] == 0){acertahora[2] = 12;} if(acertahora[3] > 31){acertahora[3] = 1;} if(acertahora[3] == 0){acertahora[3] = 31;} // 1 domigo 2 segunda 3 terca 4 quarta 5 quinta 6 sexta 7 sabado if(acertahora[4] > 7){acertahora[4] = 1;} if(acertahora[4] == 0){acertahora[4] = 7;} if(acertahora[5] > 23){acertahora[5] = 0;} if(acertahora[5] == -1){acertahora[5] = 23;} if(acertahora[6] > 59){acertahora[6] = 0;} if(acertahora[6] == -1){acertahora[6] = 59;} if(acertahora[7] > 59){acertahora[7] = 0;} if(acertahora[7] == -1){acertahora[7] = 59;} lcd.setCursor(9, 1); lcd.print(acertahora[i], DEC);lcd.print(" "); if(estouro == 90){ i = 0 ; estouro = 0;} lcd.clear(); }
DS1307.setDate(acertahora[1], acertahora[2], acertahora[3], acertahora[4], acertahora[5], acertahora[6], acertahora[7]); // AQUI ENVIAMOS OS DADOS DEFINIDOS PARA O REAL TIME CLOK lcd.clear(); }Quero incluir essse case para quando eu selecionar o acertahora[4] mostre switch(acertahora[4]) { case 1:lcd.print("Dom"); break; case 2:lcd.print("Seg"); break; case 3:lcd.print("Ter"); break; case 4:lcd.print("Quar"); break; case 5:lcd.print("Qui"); break; case 6:lcd.print("Sex"); break; case 7:lcd.print("Sab"); }…
ressionar o push button de um lado, ele ficará em HIGH pelo tempo de delay depois fica em LOW, o mesmo acontece do outro lado, mas enquanto o delay de um ainda estiver ativo o outro não funciona, como resolvo isso?
void setup() {pinMode(2, INPUT);pinMode(4, INPUT);pinMode(3, OUTPUT);pinMode(5, OUTPUT);
}
void loop() {if (digitalRead(2) == HIGH){digitalWrite(3, HIGH);delay(1000);digitalWrite(3, LOW);}if (digitalRead(4) == HIGH){digitalWrite(5, HIGH);delay(1000);digitalWrite(5, LOW);}}…