a funcionalidade por enquanto é simples esse é o começo de um projeto,

programa recebe por mqtt (ainda não implantado então o valor é definido no setup para teste) um tempo on e um tempo off ex fica ligado 10 minutos e apos isso fica 20 minutos desligado apos isso volta a ficar 10 minutos ligado o o ciclo se repete infinitamente podendo acontecer 3 coisas para interromper 

1º o valor ton foi alterado então a contagem é retesada ex antes era 10 agora virou 5 então retesa o timer a zero  independente do tempo anterior 

2º a mesma coisa do 1 so que para o valor toff

3º uma variável tipo uma clave liga e desliga se receber motor1 off desliga o ciclo de liga e desliga mantendo motor desligado, quando recebe motor1 on liga o motor na mesma rotina de tempo ligado e desligado ....

o problema que estou tendo atualmente é nas mudanças de if 1 para o 2 ao invés de ele parar o timer ele para programa pelo tempo do toff e depois roda o if 2 mesmo uma das condições não estando corretas

espero que tenha dado para entender +/-

Obrigado 

(obs: dentro do código tem bastante coisa que não estão fazendo nada por enquanto)

o código que estou escrevendo é esse:

 

#include <TimerOne.h>
#define saidamotor1 13
void verificaserial();
void contaTempo();
void motor1();
void zera();
char leitura;
boolean estadomotorum = 0;
boolean vez = 0;
boolean vezz = 0;
boolean vez1 = 0;
boolean vez2 = 0;
boolean trava1 = 0;
boolean trava2 = 1;
unsigned long tempoatual;
unsigned long ton = 0;
unsigned long toff = 0;


void setup() {
Serial.begin(9600);
//INICIO DO TIMER
Timer1.initialize(1000000);
Timer1.attachInterrupt(contaTempo);
ton = 5;
toff = 20;
pinMode(saidamotor1, OUTPUT);
digitalWrite(saidamotor1, LOW);


}

void loop() {
verificaserial();
motor1();
}
void verificaserial()
{
if (Serial.available()){
leitura = Serial.read();
switch (leitura) {
case '0':
vez = 0;
break;
case '1':
vez = 1;
break;
case 'r':

break;
}}}


void motor1()
{
if (vez == 0)
{
vez = 1;
tempoatual = 0;
}
if(tempoatual <=ton && trava1 == 0)
{
digitalWrite(saidamotor1, HIGH);
Serial.println("if 1 rodando");
trava2 = 1;
vez2 = 1;
}
else{
if (vez1 == 0)
{
Serial.println("else if 1 rodando");
trava1 = 1;
vez1 = 1;
trava2 = 0;// travando o 2
vez2 = 1;
tempoatual = 0;

}
}

if(toff <= tempoatual && trava2 == 0)
{
digitalWrite(saidamotor1, LOW);
Serial.println("if 2 rodando");
trava1 = 1;
vez1 = 1;
}
else{
if (vez2 == 0)
{
Serial.println("else if 2 rodando");
vez2 = 1;
tempoatual = 0;
trava2 = 0;
vez1 = 1;
trava1 = 0;
}

}
delay(100);
}


void contaTempo()
{
tempoatual++;
Serial.println(tempoatual);
}

void zera()
{
tempoatual = 0;
}

Exibições: 143

Responder esta

Respostas a este tópico

Bom dia GR,

minha sugestão:

remova o código postado na área de texto do seu código, daí

e em seguida anexe um arquivo com seu código.

Áh,

recomendo também comentar cada linha do código.

Facilita sua analise e nossa ajuda.

RV

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço