Помогите с кодом
- Войдите на сайт для отправки комментариев
Втр, 24/07/2018 - 21:07
Ниже приложенный код (ардуино UNO) должен при загрузке на плату и при нажатии кнопки "заставлять" RGB-светодиод загараться разными цветами (всего 7) -это работает правильно. Но далее, согласно коду, при повторном нажатии на кнопку RGB-светодиод должен загараться теми же цветами, но при этом мигать каждым -этого не происходит (я нажимаю кнопку второй раз, но светодиод продолжает загараться разными цветами без мигания).
Подскажи пож., что не так?
Вот код:
const int GLED = 10; const int RLED = 11; const int BLED = 9; const int BUTTON = 2; int RLEDState = LOW; int BLEDState = LOW; int GLEDState = LOW; long previousMillis = 0; long interval = 1000; boolean lastButton = LOW; boolean currentButton = LOW; int ledMode = 0; void setup() { pinMode (BLED, OUTPUT); pinMode (GLED, OUTPUT); pinMode (RLED, OUTPUT); pinMode (BUTTON, INPUT); } boolean debounce(boolean last) { boolean current = digitalRead(BUTTON); if (last != current) { delay(5); current = digitalRead (BUTTON); return current; } } void setMode(int mode) { if ( mode == 1) { //КРАСНЫЙ digitalWrite(RLED, HIGH); digitalWrite(GLED, LOW ); digitalWrite(BLED, LOW); delay(1000); // зеленый digitalWrite(RLED, LOW); digitalWrite(GLED, HIGH ); digitalWrite(BLED, LOW); delay(1000); // синий digitalWrite(RLED, LOW); digitalWrite(GLED, LOW); digitalWrite(BLED, HIGH); delay(1000); //ПУРПУРНЫЙ КР+С analogWrite(RLED, 127); analogWrite(GLED, 0); analogWrite(BLED, 127); delay(1000); //бирюзовый с+зел analogWrite(RLED, 0); analogWrite(GLED, 200); analogWrite(BLED, 90); delay(1000); //ОРАНЖЕВЫЙ ЗЕЛ+КР analogWrite(RLED, 224); analogWrite(GLED, 20); analogWrite(BLED, 0); delay(1000); // БЕЛЫЙ ЗЕЛ+КР+С analogWrite(RLED, 127); analogWrite(GLED, 127); analogWrite(BLED, 127); delay(1000); analogWrite(RLED, LOW); analogWrite(GLED, LOW); analogWrite(BLED, LOW); delay(1000); } else if ( mode == 2) { // КРАСНЫЙ unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; if (RLEDState == LOW) RLEDState = HIGH; else RLEDState = LOW; digitalWrite(RLED, RLEDState); } delay(5000); // зеленый unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; if (GLEDState == LOW) GLEDState = HIGH; else GLEDState = LOW; digitalWrite(GLED, GLEDState); } delay(5000); // синий unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; if (BLEDState == LOW) BLEDState = HIGH; else BLEDState = LOW; digitalWrite(BLED, BLEDState); } delay(5000); //ПУРПУРНЫЙ КР+С unsigned long currentMillis = millis(); if (currentMillis4 - previousMillis >= interval) { previousMillis = currentMillis; if (BLEDState == 0) BLEDState = 127; else BLEDState = 0; analogWrite(BLED, BLEDState); if (RLEDState == 0) RLEDState = 150; else RLEDState = 0; analogWrite(RLED, RLEDState); } delay(5000); //бирюзовый с+зел unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; if (GLEDState == 0) GLEDState = 200; else GLEDState = 0; analogWrite(GLED, GLEDState); if (BLEDState == 0) BLEDState = 90; else BLEDState = 0; analogWrite(BLED, BLEDState); } delay(1000); //ОРАНЖЕВЫЙ ЗЕЛ+КР unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; if (RLEDState == 0) RLEDState = 224; else RLEDState = 0; analogWrite(RLED, RLEDState); if (GLEDState == 0) GLEDState = 18; else GLEDState = 0; analogWrite(GLED, GLEDState); } delay(5000); // БЕЛЫЙ ЗЕЛ+КР+С unsigned long currentMillis = millis(); if (currentMillis1 - previousMillis >= interval) { previousMillis = currentMillis; if (BLEDState == 0) BLEDState = 127; else BLEDState = 0; analogWrite(BLED, BLEDState); if (RLEDState == 0) RLEDState = 140; else RLEDState = 0; analogWrite(RLED, RLEDState); if (GLEDState == 0) GLEDState = 127; else GLEDState = 0; analogWrite(GLED, GLEDState); } delay(5000); } } void loop() { currentButton = debounce(lastButton); if (lastButton == LOW && currentButton == HIGH) { ledMode++; } lastButton = currentButton; if (ledMode == 3) ledMode = 0; setMode(ledMode); }
Neznayka_V_shlape. Разумеется. Я бы дальше сказал, что вам надо укреплять свои программисткие мускулы, потому что с этими вы никуда не прийдете https://www.youtube.com/watch?v=P-5-HZi6OW4
ПС:#7
Спасибо, любитель мультиков)
Пробуйте
спасибо, попробую!