Boa galera, peço uma ajuda de vocês pois não estou achando a saída... procuro sempre futucar por ai antes de incomodar os outros, mas parece que nem o mestre das respostar tem esse resposta pra me dar... fucei o Google e nada!

então vim pedir ajuda ao que realmente entendem do babado! rsrs...

o que se passa é o seguinte: esse projeto era pra ser um contador que ao atingir 30 dias parasse de funcionar, mas parece que ele para com 8 dias e pouco, e me retorna uma mensagem que não consigo ler toda pois a IDE trava, e não consigo nem movê-la do luga...

as únicas informações que tenho são as mesmas que vocês conseguem ver...

segue o código:

*********************************************************************************************************************

byte SEG = 0; //variavel dos segundos
byte MIN = 0; //variavel dos minutos
byte H = 0; //variavel das horas
byte D = 0; //variavel dos dias
const byte opto1 = 3; //constante para o pino da saida de 250Hz
const byte LED = 13 // constante para o pino do LED indicador de funcionamento

void setup()
{
pinMode(LED, OUTPUT); // define pino 13 como pino do led indicador de funcionamente (vai ser mudado quando for para o ATtiny45)
pinMode(opto1, OUTPUT); // define a saida do opto acoplador
Serial.begin (9600); // habilita a serial para debug
}

void loop()
{
tone (opto1, 250); //me da uma frequencia de 250Hz na saida PWM 3
digitalWrite (LED, HIGH); // nivel alto na porta do LED inidcador de funcionamento
delay(500); //delay de meio segundo
digitalWrite (LED, LOW); //nivel baixo na porta do LED indicador de funcionamento
delay(500); // delay de meio segundo
(SEG = SEG++); // incrementa a variável de segundo a cada segundo (mais ou menos ta dando um pouquinho mais so da pra ver no escope, mas não interfere diretamente no funcionamento)
if (SEG >=60) {SEG=0; MIN = MIN+1;}; //incrementa a variavel de minuto e zera a de segundo reiniciando o ciclo
if (MIN>=60) {MIN=0; H=H+1;}; //incrementa a variavel de hora e zera a de minuto reiniciando o ciclo
if (H>=24) {H=0; D=D+1;}; // incrementa a variave de dia e reinicia a de hora ao somar 24
if (D==30) {parado();} // condiçao para que o programa pare de funcionar, quando a variavel D atingir 30 o programa executa parado()

Serial.print(D); // imprime o valor de D
Serial.print(" - "); // imprime o caracter -
Serial.print(H); // imprime o valor de H
Serial.print(" : "); // imprime o caracter :
Serial.print(MIN); // imprime o valor de MIN
Serial.print(" ' "); // imprime o caracter '
Serial.println(SEG); // imprime o valor de SEG e desce uma linha
}

void parado ()
{
digitalWrite (LED, LOW); //desliga o LED de funcionamento
noTone (opto1); // desliga a saida PWM que continha 250Hz
while (D==30) {} //roda uma uma instruçao vazia enquanto o valor de D for = 30
}

*********************************************************************************************************************

e ai? o que pode estar acontecendo?!

Exibições: 716

Responder esta

Respostas a este tópico

tem outra forma de contar tempo, eu precise há algumas semanas atrás mas não sabia fazer com a função millis(); ai criei uma função própria, observe se o problema vai continuar, se continuar acho melhor vc criar uma função para reiniciar o sistema uma vez ao dia, exemplo:

Você faz uma função que quando chegar a hora 23 minuto 0 e segundo 0 salva essas variáveis na memória eeprom e em seguida usa o comando asm volatile ("  jmp 0");  para reiniciar o sistema, ai no void setup vc chama uma função para ler os valores da eeprom e atribuir esses valores as variáveis, assim mesmo reiniciando você sempre voltará de onde parou.

OBS: se você precisar de ajuda com isso eu posso ajudá-lo, enfrentei esse problema já, estou em um projeto em que não posso perder valores das variáveis e se a luz acabar e você não tiver salvo os valores na eeprom perde todo o trabalho.

 


for(byte i = 0; i<= 9; i++){
delay(100);
centezimal ++;
}

  //Se a variavel minuto for igual a 60 incrementa + 1 na variável hora e zera a variável minunto
  if (centezimal == 10){
    segundo ++;
    centezimal   = 0; 
  }

  //Se a variavel minuto for igual a 60 incrementa + 1 na variável hora e zera a variável minunto
  if (segundo == 60){
    minuto ++;
    segundo = 0; 
  }
  
  //Se a variavel minuto for igual a 60 incrementa + 1 na variável hora e zera a variável minunto
  if (minuto == 60){
    hora ++; 
    minuto = 0;   
  }  
  
  //Se a variavel hora for igual a 24 incrementa + 1 na variável dia e zera as variáveis hora e minunto
  if (hora == 24){
    dia ++;
    hora = 0;
  }  
  
  //Se a variavel dia for igual a 30 chama dunção parado()
  if (dia == 30){
    parado();
  }

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço