LCD Weather Station - Функция «Нажмите, чтобы начать»

Я пытался создать метеорологическую станцию ​​с использованием ЖК-дисплея I2C и DHT11, я знаю, что DHT11 является немного низким разрешением и все такое, но оно поставляется с набором, который я заказал, так что все в порядке.

Тем не менее, я пытаюсь показать его как экран «title», и после задержки в 2 секунды он должен продолжить «Добро пожаловать!». и «Нажмите, чтобы начать», и ждите там до тех пор, пока не будет нажата кнопка, и после нажатия кнопки она должна перейти к отображению температуры и влажности.

Однако, похоже, что ни одна из функций не добавлена, если я не установил оператор «if» в начале цикла на «LOW», то по какой-то причине программа останавливается на «Welcome!». и «нажмите, чтобы начать». Если я изменил условие оператора «if» на «HIGH», он просто перейдет к температуре и влажности.

#include <DHT.h>
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

//CONSTANTS
#define DHTPIN 3
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

LiquidCrystal_I2C lcd(0x27, 16, 2);

//Variables
int chk;
float hum;  //Stores humidity value
float temp; //Stores temperature value

const int buttonPin = 6;

int buttonState = 1;

void setup()
{
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
  pinMode(buttonPin, INPUT);
  Serial.begin(9600);
  dht.begin();
  lcd.begin();
  lcd.clear();
  delay(1000);
  lcd.setCursor(0, 0);
  lcd.print("WeatherMate");
  lcd.setCursor(0, 1);
  delay(250);
  lcd.print("Press 'Start'");
  delay(1000);;
  if (buttonState = 0)
  {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Welcome!");
    lcd.setCursor(0, 1);
    lcd.print("Press Start");
  }
}

void loop() {
  buttonState = digitalRead(buttonPin);
  if (buttonState = 1) {
  delay(500);

  hum = dht.readHumidity();
  temp = dht.readTemperature();
  if (temp <= 25) {
    digitalWrite(13, LOW);
    digitalWrite(12, HIGH);
  }
  if (temp >= 25) {
    digitalWrite(13, HIGH);
    digitalWrite(12, LOW);
  }
  Serial.print("Humidity: ");
  Serial.print(hum);
  Serial.print(" %, Temp: ");
  Serial.print(temp);
  Serial.println(" Celsius");

  lcd.setCursor(0,0);
  lcd.print("Temp: ");
  lcd.print(temp);
  lcd.print(" ");
  lcd.print("C");
  lcd.setCursor(0,1);
  lcd.print("Hum:  ");
  lcd.print(hum);
  lcd.print(" %");

  delay(500); //Delay 2 sec.

}
}

Кто-нибудь? Я застрял на этом.

1 голос | спросил Eirik Medlie 27 MaramTue, 27 Mar 2018 11:17:09 +03002018-03-27T11:17:09+03:0011 2018, 11:17:09

1 ответ


1

Как отмечает Маженко в своем комментарии, пара ваших операторов if имеет оператор присваивания (т.е. =), тогда как вы на самом деле после оператор сравнения (т.е. ==).

if (buttonState = 0)

должен быть:

if (buttonState == 0)

и

if (buttonState = 1) {

должен быть:

if (buttonState == 1) {

Когда используется назначение, оператор if будет выполняться, если назначаемое значение является ненулевым. Для получения дополнительной информации см. Использование назначения как выражение условия? над переполнением стека.

ответил sa_leinad 27 MaramTue, 27 Mar 2018 11:52:19 +03002018-03-27T11:52:19+03:0011 2018, 11:52:19

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132