Здравствуйте, подключил 3 датчика DHT22 и 2 DS18B20 к меге. Все данные считываются верно, потом пишутся в массив, далее когда пытаюсь разобрать массив оказывается что некоторые показания неверно записаны, пример кода: Код (C++): #include <avr/wdt.h> #include <OneWire.h> #include <Adafruit_Sensor.h> #include <DHT.h> #include <DHT_U.h> #include <DS18B20.h> #define DHT_COUNT 3 #define dht0 2 #define dht1 3 #define dht2 4 #define ds0 6 #define ds1 5 DS18B20 ds(ds0); DS18B20 dsk(ds1); DHT_Unified dht[DHT_COUNT] = { DHT_Unified(dht0, DHT22), DHT_Unified(dht1, DHT22), DHT_Unified(dht2, DHT22), }; float temperature[4]; float humidity[2]; float heatIndex[2]; float requiredTemp[1]; unsigned long tempMillis; void initSensor() { for (byte i = 0; i < DHT_COUNT; i++) { dht[i].begin(); } } void setup() { Serial.begin(115200); initSensor(); wdt_disable(); wdt_enable (WDTO_4S); requiredTemp[0] = 24; requiredTemp[1] = 27.5; temp(); } void loop() { if (millis() - tempMillis >= UPTIME_TEMP) { climateControl(); tempMillis = millis(); } wdt_reset(); } void updateTemp() { sensors_event_t event; for (byte i = 0; i < DHT_COUNT; i++) { // INIT DHT SENSORS delay(10); bool t_error = false; bool h_error = false; dht[i].temperature().getEvent(&event); if (isnan(event.temperature)) { Serial.print("Error reading temperature, id:"); Serial.println(i); t_error = !t_error; } else { temperature[i] = event.temperature; Serial.print("id: "); Serial.print(i); Serial.print(" - Temperature: "); Serial.print(temperature[i]); Serial.print(" *C, "); } dht[i].humidity().getEvent(&event); if (isnan(event.relative_humidity)) { Serial.print("Error reading humidity!, id:"); Serial.println(i); h_error = !h_error; } else { humidity[i] = event.relative_humidity; Serial.print(" Humidity: "); Serial.print(humidity[i]); Serial.print("%, "); } if (t_error || h_error) { //Serial.println("Error"); } else { heatIndex[i] = computeHeatIndex(temperature[i], humidity[i], false); Serial.print(" HeatIndex: "); Serial.print(heatIndex[i]); Serial.println(" *C"); } } temperature[3] = ds0.getTempC(); temperature[4] = ds1.getTempC(); } void temp() { updateTemp(); for (int i = 0; i < 3; i++) { Serial.println("id: " + String(i) + " - temp: " + String(temperature[i]) + ", humidity: " + String(humidity[i]) + ", heatIndex: " + String(heatIndex[i])); } В итоге в мониторе из первой ф-и updateTemp получаю: id: 0 - Temperature: 25.00 *C, Humidity: 37.80%, HeatIndex: 24.54 *C id: 1 - Temperature: 24.10 *C, Humidity: 16.60%, HeatIndex: 23.00 *C id: 2 - Temperature: 25.40 *C, Humidity: 48.00%, HeatIndex: 25.25 *C а потом в другой когда печатаю содержимое массива: id: 0 - temp: 12.14, humidity: 37.80, heatIndex: 10.88 id: 1 - temp: 24.10, humidity: 16.60, heatIndex: 23.00 id: 2 - temp: 25.40, humidity: 48.00, heatIndex: 25.25 В чем может быть проблема?
float temperature[4]; в него и пишу с 5 датчиков, верный же размер, или что то не так? читаю: Код (C++): for (int i = 0; i < 3; i++) { // get temp Serial.println("id: " + String(i) + " - temp: " + String(temperature[i]) + ", humidity: " + String(humidity[i]) + ", heatIndex: " + String(heatIndex[i])); } for (int i = 3; i < 5; i++) { // get temp Serial.println("id: " + String(i) + " - temp: " + String(temperature[i])); } и не сходиться только первое значение в массиве.