const int PIN_R = 9, PIN_G = 10, PIN_B = 11; // пиновете за различните цветове (важно е да са ШИМ/PWM) const int A_LDR = A0, A_TEMP = A1; // аналогови пинове, които слушат фоторезистора (LDR) и температурния сензор, който е тип TMP36 // максимални гранични стойности за осветление и температура const int LIGHT_LOW_ADC = 350; // тъмно при по-ниски стойности const float TEMP_HIGH_C = 28.0; // задаване на цвят void setColor(int r, int g, int b) { analogWrite(PIN_R, r); analogWrite(PIN_G, g); analogWrite(PIN_B, b); } // update-ване на цвят, спрямо стойностите на темпертаурния сензор и фоторезистора // светването на червено поради висока стойност на температурния сензор е с приоритет // пред светването на синьо поради ниска осветеност void updateColor(float tempC, int ldr) { if (tempC >= TEMP_HIGH_C) { setColor(255, 0, 0); // червено = горещо } else if (ldr <= LIGHT_LOW_ADC) { setColor(0, 0, 255); // синьо = тъмно } else { setColor(0, 255, 0); // зелено = нормално } } void setup() { pinMode(PIN_R, OUTPUT); pinMode(PIN_G, OUTPUT); pinMode(PIN_B, OUTPUT); Serial.begin(9600); } void loop() { // прочитане на температура спрямо формула за температурния сензор float temperature = map(((analogRead(A_TEMP) - 20) * 3.04), 0, 1023, -40, 125); // прочитане на ниво за осветеност int lightLevel = analogRead(A_LDR); // използване на горе написаната функция за update-ване на цвят updateColor(temperature, lightLevel); // print на стойностите, прочетени от сензорите Serial.print("Temp = "); Serial.print(temperature); Serial.print("degC | Light ADC = "); Serial.println(lightLevel); delay(300); }