system
March 23, 2013, 5:18pm
1
amigos, ja consegui colocar a mostrar 2 temperaturas no LCD 16x2, e caso suba dos 23º ou baixe dos 20º "toca" o alarme.
gostava da vossa ajuda, a ver se o codigo esta direito assim, ou se podia ser melhorado por favor.
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int tempAlarmPin = 22; //Buzzer ligado no PIN 22
#define ONE_WIRE_BUS 28 //Sensores ligados no PIN 28
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
//Endereços sensores
DeviceAddress insideThermometer = { 0x28, 0x0C, 0x0D, 0xB0, 0x04, 0x00, 0x00, 0x80 };
DeviceAddress outsideThermometer = { 0x28, 0x49, 0x04, 0xB1, 0x04, 0x00, 0x00, 0x62 };
void setup(void)
{
// Start up the library
sensors.begin();
// set the resolution to 10 bit (good enough?)
sensors.setResolution(insideThermometer, 10);
sensors.setResolution(outsideThermometer, 10);
pinMode(tempAlarmPin, OUTPUT); //Buzzer
lcd.begin(16,2); // columns, rows. use 16,2 for a 16x2 LCD, etc.
lcd.clear(); // start with a blank screen
}
void printTemperature(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
if (tempC == -127.00) {
lcd.print("Error");
} else {
lcd.print(tempC);
lcd.print("C");
}
if ( (tempC) >= 23) //Temp superior a 23 Graus
{
digitalWrite(tempAlarmPin, HIGH);
delay(500);
digitalWrite(tempAlarmPin, LOW);
}
else if ( (tempC) <= 20) //Temp inferior a 20 graus
{
digitalWrite(tempAlarmPin, HIGH);
delay(500);
digitalWrite(tempAlarmPin, LOW);
}
}
void loop(void)
{
delay(2000);
sensors.requestTemperatures();
lcd.setCursor(0,0);
lcd.print("AGUA: ");
printTemperature(insideThermometer);
lcd.setCursor(0,1);
lcd.print("FORA: ");
printTemperature(outsideThermometer);
}
system
March 30, 2013, 4:01pm
2
Boas novamente,
com este codigo tudo funciona perfeitamente.
Agora queria a vossa ajuda no seguinte:
O alarme apenas necessita de tocar caso a temperatura da agua esteja acima ou abaixo do definido, neste momento toca em relaçao as duas temperaturas.
como faço para que seja apenas de uma?
cumprimentos
system
March 30, 2013, 4:25pm
3
Podes dentro da condição if substituir a variável que verifica a temperatura dos dois sensores por:
float tempA = sensors.getTempC(insideThermometer);
if ( (tempA) >= 23){
...
}
system
March 30, 2013, 5:40pm
4
Boas amigo,
ao fazer dessa maneira, da-me as duas temperaturas iguais.
cumprimentos
tretas
March 30, 2013, 6:00pm
5
Boas
Ja li e tornei a ler o teu post e fiquei sem perceber o que querias ... podias trocar isso por miúdos ...
Ja agora para ti a temperatura definida é 23 ou 20 graus ?
tucandroid:
O alarme apenas necessita de tocar caso a temperatura da agua esteja acima ou abaixo do definido, neste momento toca em relaçao as duas temperaturas.
como faço para que seja apenas de uma?
system
March 30, 2013, 6:12pm
6
boas tretas,
para começar, este topico foi a pedir ajuda a ver se o codigo estava bem assim, mesmo a funcionar, pudia ser necessario trocar algo que eu nao saiba, hoje aproveitei o mesmo topico para pedir ajuda no seguinte,
quero que o alarme toque apenas quando a temperatura sobe dos 23º ou baixa dos 20º, neste momento consigo fazer isso, mas em relaçao as duas temperaturas, no entanto apenas me interessa a interior, queria que o alarme so toca-se quando a temperatura interior subi-se dos 23º ou baixa-se dos 20º
percebes amigo?
system
March 30, 2013, 6:13pm
7
Fiz algumas alterações de modo a tocares o alarme independentemente da escrita no lcd, penso que resultará
senão peço que me corrijam.
void printTemperature(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
if (tempC == -127.00) {
lcd.print("Error");
} else {
lcd.print(tempC);
lcd.print("C");
}
}
void alarm(DeviceAddress deviceAddress){
float tempA = sensors.getTempC(deviceAddress);
if ( (tempA) >= 23) //Temp superior a 23 Graus
{
digitalWrite(tempAlarmPin, HIGH);
delay(500);
digitalWrite(tempAlarmPin, LOW);
}
else if ( (tempA) <= 20) //Temp inferior a 20 graus
{
digitalWrite(tempAlarmPin, HIGH);
delay(500);
digitalWrite(tempAlarmPin, LOW);
}
}
void loop(void)
{
delay(2000);
sensors.requestTemperatures();
lcd.setCursor(0,0);
lcd.print("AGUA: ");
printTemperature(insideThermometer);
alarm(insideThermometer);
lcd.setCursor(0,1);
lcd.print("FORA: ");
printTemperature(outsideThermometer);
}
system
March 31, 2013, 11:37am
8
obrigado ineto, realmente assim apenas toca o alarme em caso da temperatura interior sair dos parametros.