как правильно работать с цифровыми выводами - PullRequest
0 голосов
/ 17 января 2019

этот код работает должным образом, за исключением того, что он не изменяется, что приводит к его включению в зависимости от цвета. всегда включается средний оранжевый светодиод. какая-либо подсказка, почему?

#include <LiquidCrystal.h>
#include <DHT.h>

#include "DHT.h"

#define DHTPIN A0     // what pin we're connected to

#define DHTTYPE DHT11   // DHT 11


LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

DHT dht(DHTPIN, DHTTYPE);

void setup()
{
  Serial.begin(9600);
  for (int DigitalPin = 7; DigitalPin <= 9; DigitalPin++) 
 {
  pinMode(DigitalPin, OUTPUT);
 }
  lcd.begin(16,2); //16 by 2 character display

dht.begin();
}

void loop()
{
  delay(1000);
  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();

  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Temp: ");
  lcd.print(t);
  lcd.print("'C");

  lcd.setCursor(0,1);
  lcd.print("Humid: ");
  lcd.print(h);
  lcd.print("%");

  if (t<=30)
  {
  digitalWrite(7, HIGH);
  digitalWrite(8, LOW);
  digitalWrite(8, LOW);
  }
  else if (t>35)
  {
  digitalWrite(8, HIGH);
  digitalWrite(7, LOW);
  digitalWrite(9, LOW);
  }
  else if (t>=45)
  {
  digitalWrite(9, HIGH);
  digitalWrite(7, LOW);
  digitalWrite(8, LOW);
  } 

}

Из того, что я читал и смотрел, кажется, что это должно работать, но это не так. Любая помощь по этому вопросу будет принята с благодарностью. Я поместил датчик температуры в мой чехол Raspberry Pi, чтобы он не слишком нагревался.

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Попробуйте свои условия if-else, как это:

  if (t<=30)
  {
    digitalWrite(7, HIGH);
    digitalWrite(8, LOW);
    digitalWrite(9, LOW);
  }
  else if (t>=45)
  {
    digitalWrite(9, HIGH);
    digitalWrite(7, LOW);
    digitalWrite(8, LOW);
  }
  else
  {
    digitalWrite(8, HIGH);
    digitalWrite(7, LOW);
    digitalWrite(9, LOW);
  }

Надеюсь, это поможет!

0 голосов
/ 17 января 2019

я думаю, что ваша ошибка на втором тесте

else if (t>35)

Вы должны изменить на

else if (t>35 && t < 45)

без этого исправления, температура 50, лампа будет оранжевой, а не красной

но, следуя логике внутри вашей программы, вы забыли тест от 30 до 35, или у вас возникла ошибка, и измените 30 на 35 или от 35 до 30

...