[RESOLVIDO]alarme com 4 ldrs,display 16x2, buzzer e arduino uno

ola galera!! estou com algumas duvidas na minha programaçao e gostaria de ajuda. o meu "projeto" é um alarme com ldr,buzzer e arduino. porem resolvi da uma melhorada e estou com alguns problemas. primeiro o display tinha que aparecer uma mensagem quando o alarme disparar, porem depois que o alarme dispara, a mensagem nao sai da tela do display ( o display nao limpa as letras que aparecem nele) ; o outro problema é que queria colocar mais 3 sensores ldr para fazer a mesma função e nomear cada um com um nome diferente, para quando cada um mandasse o sinal para o arduino ligar u buzzer, aparecer uma mensagem diferente no display. 

aqui vai a programação ja feita:

#include <LiquidCrystal.h> //Inclui a biblioteca do LCD
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Configura os pinos do Arduino para se comunicar com o LCDint LDR; //declara variavel

int ledPin=10;//escrevi led, mas e o buzzer
int LDR;
int VLDR;
int temp; //Inicia uma variável inteira(temp), para escrever no LCD a contagem do tempofloat VLDR;

void setup()
{
lcd.begin(16, 2); //Inicia o LCD com dimensões 16x2(Colunas x Linhas)
// lcd.setCursor(0, 0); //Posiciona o cursor na primeira coluna(0) e na primeira linha(0) do LCD
// lcd.print("LDR 1"); //Escreve no LCD
// lcd.setCursor(0, 1); //Posiciona o cursor na primeira coluna(0) e na segunda linha(1) do LCD
// lcd.print("cozinha"); //Escreve no LCD
Serial.begin(9600);
pinMode(A0, INPUT);// entrada A0
pinMode(10,OUTPUT); // define o pino 10 como saida
}

void loop()
{

lcd.setCursor(13, 1); //Posiciona o cursor na décima quarta coluna(13) e na segunda linha(1) do LCD
//lcd.print(temp); //Escreve o valor atual da variável de contagem no LCD
delay(1000); //Aguarda 1 segundo
temp++; //Incrementa variável de contagem
if(temp == 60) //Se a variável temp chegar em 600(10 Minutos),...
{
temp = 0; //...zera a variável de contagem
}
LDR = analogRead(A0);
VLDR=LDR*5.00000/1024;
Serial.print(LDR);
Serial.print(" ");
Serial.print(VLDR);
Serial.println ( "\t");
delay(100);
if (LDR > 1000)
{
lcd.setCursor(0, 0); //Posiciona o cursor na primeira coluna(0) e na primeira linha(0) do LCD
lcd.print("LDR 1"); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na primeira coluna(0) e na segunda linha(1) do LCD
lcd.print("cozinha"); //Escreve no LCD
Serial.println("LDR 1");
tone(10,200);
delay(50);
tone(10,100);
delay(5000);
}
else
{
noTone(10);
}
;
}

Exibições: 716

Responder esta

Respostas a este tópico

TS, veja este código.

Ele faz o que voce precisa, mas não é a melhor forma de faze-lo.

Tente refaze-lo com o uso de "threads".

Assim voce aprenderá algo novo e interresante.

Rui

// Thiago Silva

#include <LiquidCrystal.h> //Inclui a biblioteca do LCD
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Configura os pinos do Arduino para se comunicar com o LCDint LDR; //declara variavel

int ledPin1=10;//escrevi led, mas e o buzzer
int ledPin2=6;//escrevi led, mas e o buzzer
int ledPin3=7;//escrevi led, mas e o buzzer
int LDR1;
int LDR2;
int LDR3;
int VLDR1;
int VLDR2;
int VLDR3;
int temp1; //Inicia uma variável inteira(temp), para escrever no LCD a contagem do tempofloat VLDR;
int temp2; //Inicia uma variável inteira(temp), para escrever no LCD a contagem do tempofloat VLDR;
int temp3; //Inicia uma variável inteira(temp), para escrever no LCD a contagem do tempofloat VLDR;
//-------------------------------------------
void setup()
{
lcd.begin(16, 2); //Inicia o LCD com dimensões 16x2(Colunas x Linhas)
Serial.begin(9600);
pinMode(A0, INPUT);// entrada A0
pinMode(10,OUTPUT); // define o pino 10 como saida
}
//-------------------------------------------
void Rotina1()
{
lcd.setCursor(13, 1); //Posiciona o cursor na décima quarta coluna(13) e na segunda linha(1) do LCD
lcd.print(temp1); //Escreve o valor atual da variável de contagem no LCD
delay(1000); //Aguarda 1 segundo
temp1++; //Incrementa variável de contagem
if(temp1 == 600) //Se a variável temp chegar em 600(10 Minutos),...
{
lcd.print(" "); // Limpa display
temp1 = 0; //...zera a variável de contagem
}
LDR1 = analogRead(A0);
VLDR1=LDR1*5.00000/1024;
Serial.println(LDR1);
delay(100);
if (LDR1 > 1000)
{
lcd.setCursor(0, 0); //Posiciona o cursor na primeira coluna(0) e na primeira linha(0) do LCD
lcd.print("LDR 1"); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na primeira coluna(0) e na segunda linha(1) do LCD
lcd.print("cozinha"); //Escreve no LCD
tone(10,200);
delay(50);
tone(10,100);
delay(50);
}
else
{
lcd.setCursor(0, 0); //Posiciona o cursor na primeira coluna(0) e na primeira linha(0) do LCD
lcd.print(" "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na primeira coluna(0) e na segunda linha(1) do LCD
lcd.print(" "); //Escreve no LCD
noTone(10);
}
}
//-------------------------------------------
void Rotina2()
{
lcd.setCursor(13, 1); //Posiciona o cursor na décima quarta coluna(13) e na segunda linha(1) do LCD
lcd.print(temp2); //Escreve o valor atual da variável de contagem no LCD
delay(1000); //Aguarda 1 segundo
temp2++; //Incrementa variável de contagem
if(temp2 == 600) //Se a variável temp chegar em 600(10 Minutos),...
{
lcd.print(" "); // Limpa display
temp2 = 0; //...zera a variável de contagem
}
LDR2 = analogRead(A1);
VLDR2=LDR2*5.00000/1024;
Serial.println(LDR2);
delay(100);
if (LDR2 > 1000)
{
lcd.setCursor(0, 0); //Posiciona o cursor na primeira coluna(0) e na primeira linha(0) do LCD
lcd.print("LDR 2"); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na primeira coluna(0) e na segunda linha(1) do LCD
lcd.print("Sala"); //Escreve no LCD
tone(10,200);
delay(50);
tone(10,100);
delay(50);
}
else
{
lcd.setCursor(0, 0); //Posiciona o cursor na primeira coluna(0) e na primeira linha(0) do LCD
lcd.print(" "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na primeira coluna(0) e na segunda linha(1) do LCD
lcd.print(" "); //Escreve no LCD
noTone(10);
}
}
//-------------------------------------------
void Rotina3()
{
lcd.setCursor(13, 1); //Posiciona o cursor na décima quarta coluna(13) e na segunda linha(1) do LCD
lcd.print(temp3); //Escreve o valor atual da variável de contagem no LCD
delay(1000); //Aguarda 1 segundo
temp3++; //Incrementa variável de contagem
if(temp3 == 600) //Se a variável temp chegar em 600(10 Minutos),...
{
lcd.print(" "); // Limpa display
temp3 = 0; //...zera a variável de contagem
}
LDR3 = analogRead(A2);
VLDR3=LDR3*5.00000/1024;
Serial.println(LDR3);
delay(100);
if (LDR3 > 1000)
{
lcd.setCursor(0, 0); //Posiciona o cursor na primeira coluna(0) e na primeira linha(0) do LCD
lcd.print("LDR 3"); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na primeira coluna(0) e na segunda linha(1) do LCD
lcd.print("Quarto"); //Escreve no LCD
tone(10,200);
delay(50);
tone(10,100);
delay(50);
}
else
{
lcd.setCursor(0, 0); //Posiciona o cursor na primeira coluna(0) e na primeira linha(0) do LCD
lcd.print(" "); //Escreve no LCD
lcd.setCursor(0, 1); //Posiciona o cursor na primeira coluna(0) e na segunda linha(1) do LCD
lcd.print(" "); //Escreve no LCD
noTone(10);
}
}
//------------------------------------
void loop()
{
Rotina1();
Rotina2();
Rotina3();
}

RUI, muito obrigado!!!

era exatamente o que eu queria, porem vou seguir sua dica e tentar faze-lo usando "threads".

mesmo assim ja esta bom para um trabalho de primeiro período kkkkkkk

muito obrigado mesmo!!!!

TS, bom dia.

Se estiver resolvido, sugiro colocara a palavra "Resolvido" no inicio do título do post.

Rui

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço