Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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);
- }
Advertisement
Add Comment
Please, Sign In to add comment