Falaí galera blz...
Eu tô com um probleminha e... se for possível... Gostaria da ajuda de vcs!É o seguinte: Eu estou tentando fazer um sketch para acionar um ar condicionado e mostrar a temperatura ambiente no display (I2c). Eu já cheguei no seguinte ponto:
Quando eu aperto um botão do controle remoto liga o ar condicionado (representado por um led) e liga também o lcd. Mas quando eu aperto o msm botão consigo desligar o led e tal mas o bendito do lcd fica ligado. Vcs podem me ajudar nessa questão? Segue o código:
#include <IRremote.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Inicializa a biblioteca com os números dos pinos de interface
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Cria um objeto lcd e atribui os pinos
byte maxC=0, minC=100, maxF=0, minF=212;
boolean scale = 1;
unsigned char buttonPin=8;
unsigned char RECV_PIN = 11;
float armazenavalor;
unsigned char pinoledvermelho = 5;
unsigned char pinoledverde = 7;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
lcd.begin(16, 2); // Define o display com 16 colunas e 2 linhas
analogReference(INTERNAL);
pinMode(buttonPin, INPUT);
lcd.clear();
lcd.backlight();//activas a backlight
pinMode(pinoledvermelho, OUTPUT);
pinMode(pinoledverde, OUTPUT);
Serial.begin(9600);
irrecv.enableIRIn(); // Inicializa o receptor IR
}
void loop()
{
if (irrecv.decode(&results))
{
Serial.print("Valor lido : ");
Serial.println(results.value, HEX);
armazenavalor = (results.value);
if (armazenavalor == 0xFDA857) //Verifica se a tecla 1 foi acionada
{
digitalWrite (pinoledvermelho,!digitalRead(pinoledvermelho));
}
if (digitalRead (pinoledvermelho),HIGH)
{
changeLCD();
}
else
{
lcd.noBacklight();
delay(10);
}
irrecv.resume(); //Le o próximo valor
}
}
int changeLCD() {
lcd.setCursor(0,0); // Define o cursor na posição de início
int sensor = analogRead(0); // Lê a temperatura do sensor
int buttonState = digitalRead(buttonPin); // Verifica se o botão foi pressionado
switch (buttonState) { // Altera o estado da escala, caso tenha sido pressionado
case HIGH:
scale=-scale; // Inverte a escala
lcd.clear();
}
delay(250);
switch (scale) { // Decide por escala em Celsius ou Fahrenheit
case 1:
celsius(sensor);
break;
case -1:
fahrenheit(sensor);
}
}
void celsius(int sensor) {
lcd.setCursor(0,0);
int temp = sensor * 0.0927734375; // Converte para Celsius
lcd.print(temp);
lcd.write(B11011111); // Símbolo de grau
lcd.print("C ");
if (temp>maxC) {maxC=temp;}
if (temp<minC) {minC=temp;}
lcd.setCursor(0,1);
lcd.print("H=");
lcd.print(maxC);
lcd.write(B11011111);
lcd.print("C L=");
lcd.print(minC);
lcd.write(B11011111);
lcd.print("C ");
}
void fahrenheit(int sensor) {
lcd.setCursor(0,0);
float temp = ((sensor * 0.09765625) * 1.8)+32; // Converte para Fahrenheit
lcd.print(int(temp));
lcd.write(B11011111); // Imprime o símbolo de grau
lcd.print("F ");
if (temp>maxF) {maxF=temp;}
if (temp<minF) {minF=temp;}
lcd.setCursor(0,1);
lcd.print("H=");
lcd.print(maxF);
lcd.write(B11011111);
lcd.print("F L=");
lcd.print(minF);
lcd.write(B11011111);
lcd.print("F ");
}
int offLCD()
{
lcd.setCursor(0,0);
lcd.clear();
lcd.setCursor(0,1);
lcd.clear();
lcd.setBacklight(LOW);
}
Abraço!!!!!!
Tags:
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por