Go Down

Topic: Meu projeto nao esta dando certo, é simples (Read 1 time) previous topic - next topic

Boa noite, vou mandar o codigo do meu projeto, nao esta funcionando, a ideia é, primeiro verificar se presica de mais luz e avisar caso precise (no led), além de um buzzer tocar, após isso, exibir um menu no lcd, e calculando o tempo que eu fiquei apertando o botao, eu devo ou nao acender um outro led nao usado ainda

Quote
#include<LiquidCrystal.h>
const int BUTTON=1;
const int LEDL=8;
const int LEDH=13;
const int SENSOR=0;
const int BUZZER=7;
int statelight,statebutton=0,option,cont=0,untilhere,time;
LiquidCrystal lcd(12,11,5,4,3,2);
void turnBuzzer()
{
  digitalWrite(BUZZER,HIGH);
  delay(800);
  digitalWrite(BUZZER,LOW);
}
void showMenu()
{
  lcd.setCursor(0,0);
  lcd.print("1s para acender");
  lcd.setCursor(0,1);
  lcd.print("5s para apagar");
}
void modifyLights()
{
  statelight=analogRead(SENSOR);
  if(statelight<=250)
  {
    turnBuzzer();
    digitalWrite(LEDH,HIGH);
    lcd.setCursor(0,0);
    lcd.print("Luz de emergencia ativado");
    lcd.setCursor(0,1);
    lcd.print("Problema de luz resolvido");
    delay(2000);
    showMenu();
  }
  else{
    digitalWrite(LEDH,LOW);}
}
int readButton()
{
  while(statebutton!=HIGH)
  {
  modifyLights();
  statebutton=digitalRead(BUTTON);
  if(statebutton==HIGH)
  {
    untilhere=millis();
    while(statebutton==HIGH)
    {
       statebutton=digitalRead(BUTTON);
    }
    time=millis()-untilhere;
  }
  }
  if(time>=800 && time <=1200)
  {
    return 1;}
  else if(time>=4000 && time<=6000){
    return 2;}
  else if(time>8000){
    return 3;}
}
void setup ()
{
  lcd.begin(16,2);
  lcd.setCursor(0,0);
  lcd.print("INICIO PROJETO VENTO DE CORES ");
  delay(5000);
  pinMode(BUTTON,INPUT);
  pinMode(LEDL,OUTPUT);
  pinMode(LEDH,OUTPUT);
  pinMode(BUZZER,OUTPUT);

void loop()
{
  showMenu();
  option=readButton();
  if(option==1)
  {
     turnBuzzer();
     lcd.setCursor(0,0);
     lcd.print("Led aceso");
     digitalWrite(LEDL,HIGH);
  }
  else if(option==2)
  {
     turnBuzzer();
     lcd.setCursor(0,0);
     lcd.print("Led apagado");
     digitalWrite(LEDL,LOW);
  }
  else if(option==3)
  {
     turnBuzzer();
     lcd.setCursor(0,0);
     lcd.print("xxx"); // aqui é só uma brincadeira que eu fiz, ignorem a opção 3
  }
}

Sem dizeres exactamente o que não está a funcionar é difícil de conseguir resolver o teu problema... não achas?

Explica bem o que não está a acontecer, ou está a acontecer erradamente para podermos ajudar melhor.
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Então... o led não acende quando eu apago a luz...( e a função que acende ou nao o led esta em um loop até o botao ser pressionado) e o buzzer também nao toca... e quando mostra o menu no lcd e eu pressiono o botão, nada acontece

Acho que tens de rever a função readButton...

Enquanto o stateButton for igual a zero, tu chamas a função modifyLights... essa função tem um delay lá dentro que vai deitar por terra toda a lógica que pretendes implementar com a temporização. Tu carregas no botão, mas o chip ainda está a processar o delay, deixando o sistema muito pouco funcional ou só funcionando de quando em vez quando tiveres a sorte de carregar no botão no momento certo. :\

Também estás a prender o programa em muitos sítios... o que nem sempre é bom, mas não me parece que esteja a ser o problema aqui.

Já pensaste em resolver isto com uma máquina de estados?

A tua variável time está definida como um int. O millis retorna unsigned long. Eu compreendo que não tencionas usar 66 segundos no programa... mas se alguém o decidir fazer estoura com o sistema. Muda a variável time para unsigned long para evitar também problemas com isso.

Coloca uns serial print para teres uma ideia do valor que sai do sensor de luz... talvez isso também não esteja a sair como pretendes.

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Pois é, voce tinha razão quanto a readbutton... ja corrigi ja, FUNCIONOU!
Problema resolvido, brigadao

Go Up