LCD ясно, но потом не вернется - PullRequest
0 голосов
/ 21 января 2019
#include <IRremote.h>

#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
int TempPin = A0;
float realTemp = 0;
int FakeTemp = 0;
int target = 20;
int IRPin = 11;
IRrecv irrecv(IRPin);
decode_results results;

void setup() {
    // put your setup code here, to run once:
    lcd.begin(16, 2);
    Serial.begin(9600);
    while (! Serial);
    irrecv.enableIRIn(); //enables ir receiver
}

void loop() {
    FakeTemp = analogRead(TempPin);
    realTemp = (5.0 * FakeTemp * 1000.0) / (1024 * 10); // math for the temperature
    Serial.println(realTemp);
    lcd.print("Temperature");
    lcd.setCursor(0, 13);
    lcd.print(realTemp); //prints the temperature
    delay(3000);
    lcd.clear();

    if (irrecv.decode(16754775)) { //input from ir remote
        lcd.clear();
        lcd.print("Target=");
        lcd.print(target + 1);
        delay(3000);
        irrecv.resume();
        lcd.clear();
        target = target + 1;
        // adds to target
    }

    if (irrecv.decode(16769055)) { //this is were everything goes wrong
        lcd.clear();
        lcd.print("Target=");
        lcd.print(target - 1);
        delay(3000);
        irrecv.resume();
        lcd.clear();
        target = target - 1;
    }
}

Я занимаюсь этим уже довольно давно, и я не знаю, что не так, когда я добавляю этот оператор if, он будет отображать временную температуру на ЖК-дисплее один раз. Но потом он не будет делать это снова, я вижу на последовательном мониторе, что он все еще захватывает темп, но не печатает его на ЖК-дисплее.

1 Ответ

0 голосов
/ 21 января 2019
#include <IRremote.h>

#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
int TempPin = A0;
float realTemp = 0;
int FakeTemp = 0;
int target = 20;
int IRPin = 11;
IRrecv irrecv(IRPin);
decode_results results;

void setup() {
    // put your setup code here, to run once:
    lcd.begin(16, 2);
    Serial.begin(9600);
    while (! Serial);
    irrecv.enableIRIn(); //enables ir receiver
}

void loop() {
    FakeTemp = analogRead(TempPin);
    realTemp = (5.0 * FakeTemp * 1000.0) / (1024 * 10); // math for the temperature
    Serial.println(realTemp);
    lcd.print("Temperature");
    lcd.setCursor(0, 13);
    lcd.print(realTemp); //prints the temperature
    delay(3000);
    //lcd.clear();

    if (irrecv.decode(16754775)) { //input from ir remote
        lcd.clear();
        lcd.print("Target=");
        lcd.print(target + 1);
        delay(3000);
        irrecv.resume();
        //lcd.clear();
        target = target + 1;
        // adds to target
    }

    if (irrecv.decode(16769055)) { //this is were everything goes wrong
        lcd.clear();
        lcd.print("Target=");
        lcd.print(target - 1);
        delay(3000);
        irrecv.resume();
        //lcd.clear();
        target = target - 1;
    }
}

Можете ли вы попробовать этот код.Я не использовал ИК модуль.Но я думаю, только когда новые сообщения ir приходят в коды Arduino, которые могут выполняться внутри операторов if.Поэтому я думаю, что вторая команда lcd.clear в операторах if и главном цикле является основной причиной проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...