Помогите проверить правильность кода

alobx

✩✩✩✩✩✩✩
28 Ноя 2022
2
0
В общем я только начинаю программирование на ардуино, прошу проверить правильность кода, можно ли его как то сократить? Жду советов, критики тоже.

Основной код:
#include <DHT.h>      // подключаем библиотеку для датчика
DHT dht(2, DHT11);  // сообщаем на каком порту будет датчик
int LDRpin = 0;
int analogValue =0;

void setup() {
   dht.begin();                // запускаем датчик DHT11
   Serial.begin(9600);   // подключаем монитор порта
}

void loop() {
   int val = analogRead(A0);
   // считываем температуру (t) и влажность (h)
   float h = dht.readHumidity();
   float t = dht.readTemperature();

   // выводим температуру (t) и влажность (h) на монитор порта
   Serial.print("Temperature: ");
   Serial.println(t);
   Serial.print(" ");
   Serial.print("Humidity: ");
   Serial.println(h);
   analogValue = analogRead(LDRpin); //считывание данных с фоторезистора
  Serial.print("Light: "); //вывожу данные на порт
  Serial.println(analogValue);
    if (t <= 20) {    //если температура меньше 20 гр по цельсию то загорается желтый светодиод на пине 11
    digitalWrite(11, HIGH);
    digitalWrite(10, LOW);
    digitalWrite(9, LOW);
  } else if (t < 28 && t > 21) {   //если температура датчика от 21 до 28 то включаю зеленый светодиод на пине 10
    digitalWrite(11, LOW);
    digitalWrite(10, HIGH);
    digitalWrite(9, LOW);
  } else if (t > 29) {    //если выше 29 то включаю красный светодиод на пине 9
    digitalWrite(11, LOW);
    digitalWrite(10, LOW);
    digitalWrite(9, HIGH);
  }
    if (val < 600) {    //если значение света больше 600 то включаю красный светодиод (порт 3)
    digitalWrite(3, LOW);
  } else {
    digitalWrite(3, HIGH);
  }
  delay(450); //задержка 450млс
}
Серийный порт(выход):
Temperature: 23.00
 Humidity: 52.00
Light: 782
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,975
634
45
Ну, например все "else if" можно сократить и поставить блок "switch case".
Хотя не, в С так скорее всего не получится.

Можно так сократить:
C++:
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
if (t <= 20) {    //если температура меньше 20 гр по цельсию то загорается желтый светодиод на пине 11
    digitalWrite(11, HIGH);
  } else if (t < 28 && t > 21) {   //если температура датчика от 21 до 28 то включаю зеленый светодиод на пине 10
    digitalWrite(10, HIGH);
  } else if (t > 29) {    //если выше 29 то включаю красный светодиод на пине 9
    digitalWrite(9, HIGH);
  }
 
  • Лойс +1
Реакции: alobx

poty

★★★★★★✩
19 Фев 2020
3,264
949
Сократить что? Занимаемую память? Объём программного кода в символах? Время выполнения?
Самый очевидный вариант: убрать повторы в else if (а из последнего совсем убрать условие).
 
Изменено:

poty

★★★★★★✩
19 Фев 2020
3,264
949
@alobx, ответ-то Ваш на заданный вопрос какой? Или вопрос задан с целью постебаться?
Сообщение, на которое Вы ссылаетесь, не убирает ошибки (например, что произойдёт при температуре 21 градус, а при 28, 29? ) и "экономит" 3 строчки кода. Самый маленький текст является целью?