Skip to content

Instantly share code, notes, and snippets.

@gioufop
Created June 30, 2015 02:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gioufop/975126451db35c1e3134 to your computer and use it in GitHub Desktop.
Save gioufop/975126451db35c1e3134 to your computer and use it in GitHub Desktop.
#include <OneWire.h> // inclusão da biblioteca
#include "LiquidCrystal.h"
int TempInput = 8; // entrada de temperatura
int releAque = 9; // sinal rele de aquecimento
int releRes = 10; // sinal rele de resfriamento
String valor;
int v =0 ;
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);// inicializa os pinos Display
float temperature; // armazena a temperatura
OneWire SensorTemp(TempInput); // cria um objeto que representa o sensor ligado ao pino TempInput
void setup(void) {
lcd.begin(16,2);// define 16 colunas e 2 linhas Display
Serial.begin(9600); // inicia a comunicação serial com velocidade de 9600 bits/s (baud)
pinMode(releAque, OUTPUT); //Define o pino como saída
pinMode(releRes, OUTPUT); //Define o pino como saída
}
void inicializa (void){
digitalWrite(releAque,LOW);
digitalWrite(releRes,LOW);
}
void loop(void) {
if(Serial.available()>=2)
{
while(Serial.available()){ //enquanto estiver recebendo bytes executa o while
//recebe dados da serial e armazena em uma string
char c = Serial.read();
valor += c; //concatena caracteres em uma string
}
v = valor.toInt();
lcd.clear();
lcd.print("V = ");
lcd.print(valor);
lcd.print(" * ");
lcd.print(v);
lcd.print(" *");
delay(1000);
}
temperature = getTemp(); // obtem a temperatura como um numero real
delay(250)
Serial.println("l");
Serial.println (temperature); // envia o valor pela porta serial
display1(temperature);
//*
if ((int)temperature > v){
digitalWrite(releAque,LOW);
digitalWrite(releRes,HIGH);
Serial.println ("a0");
Serial.println ("b1");
}
else if ((int)temperature < v){
digitalWrite(releAque,HIGH);
digitalWrite(releRes,LOW);
Serial.println ("a1");
Serial.println ("b0");
}
else {
digitalWrite(releAque,LOW);
digitalWrite(releRes,LOW);
Serial.println ("a0");
Serial.println ("b0");
}
//*/
delay(1000);
valor = "";
}
float getTemp(){ // se comunica com o sensor DS, obtem os bytes dele, processa-os e com isso calcula a temperatura em graus C
byte data[12]; // conjunto de variáveis
byte addr[8]; // conjunto de variáveis
if (!SensorTemp.search(addr)) { // não há mais sensores pendurados no pino 2 (dos DS)
SensorTemp.reset_search();
return -500; // se a programação der erro, esse será o valor que ira aparecer
}
if (OneWire::crc8(addr, 7) != addr[7]) {
Serial.println("Erro de leitura – CRC invalido!"); // se der erro na leitura, é mostrado "Erro de leitura – CRC invalido!"
return -501; // é mostrado um valor impossível para representar o erro
}
if (addr[0] != 0x10 && addr[0] != 0x28) {
Serial.print("Sensor nao reconhecido :("); // sensor não encontrado
return -502; // é mostrado um valor impossivel para representar o erro
}
SensorTemp.reset();
SensorTemp.select(addr);
SensorTemp.write(0x44,1); // inicia conversão
byte present = SensorTemp.reset();
SensorTemp.select(addr);
SensorTemp.write(0xBE);
for (int i = 0; i < 9; i++) { // sao 9 bytes lidos
data[i] = SensorTemp.read();
}
SensorTemp.reset_search();
byte MSB = data[1];
byte LSB = data[0];
float tempRead = ((MSB << 8) | LSB);
float TemperatureSum = tempRead / 16;
return TemperatureSum;
}
void display1(float t){
if (t==-500){
lcd.clear();
lcd.setCursor(0,0 );
lcd.print("Sensor nao");
lcd.setCursor(4,1);
lcd.print(" detectado!!");
}
else if (t==-501){
lcd.clear();
lcd.setCursor(0,0 );
lcd.print("Erro de leitura –");
lcd.setCursor(0,1);
lcd.print("CRC invalido!");
}
else if(t==-502){
lcd.clear();
lcd.setCursor(0,0 );
lcd.print("Sensor nao reconhecido :(");
lcd.setCursor(0,1);
lcd.print("reconhecido :(");
}
else{
lcd.clear();
lcd.setCursor(0,0 );
lcd.print("Temperatura = ");
lcd.setCursor(0,1);
lcd.print(t);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment