Мигающий светодиод без delay, с потенциометром, почему-то не работает
- Войдите на сайт для отправки комментариев
Пнд, 18/06/2018 - 10:49
Написал в эмуляторе https://www.tinkercad.com/ такой скретч:
const int min=0; const int max=1023; int periodMin=10; int periodMax=3000; // ============================================== int ledPin = 13; int regPin = A0; void setup() { pinMode(ledPin, OUTPUT); pinMode(regPin, INPUT); } unsigned long currentMillis=0; unsigned long prevMillis=0; int period=0; int ledState=LOW; void loop() { /* Serial.begin(9600); Serial.println(analogRead(regPin)); delay(100); */ period=map(analogRead(regPin),min,max,periodMin,periodMax); currentMillis=millis(); if (currentMillis - prevMillis > period) { prevMillis = currentMillis; if (ledState==LOW) ledState=HIGH; else ledState==LOW; digitalWrite(ledPin,ledState); } }
Цель - светодиод должен моргать без delay, при этом потенциометром должна быть возможность изменять частоту включения/выключения светодиода.
На эмуляторе светодиод включается по прошествии периода, но почему-то не выключается.
Подскажите, где я напутал?
Или может это эмулятор косячит а на плате всё заработает?...
А с чего ему вдруг выключаться, если Вы его нигде и никогда не выключаете? Посмотрите внимательно на строку №39. Вас ничто не смущает?
Ну, и заодно уж, сравнение в строке 34 проихсодит между знаковыми и беззнаковыми переменными. Это всегда плохая идея.
А чтобы не блукать в дебрях else-if :
digitalWrite(ledPin, !digitalRead(ledPin));
А с чего ему вдруг выключаться, если Вы его нигде и никогда не выключаете? Посмотрите внимательно на строку №39. Вас ничто не смущает?
Вот чуствую что да, тут у меня какой-то косяк, но никак не могу понять какой именно. Если выключено - включить - иначе (если включено) - выключить. Что тут не так?
А чтобы не блукать в дебрях else-if :
digitalWrite(ledPin, !digitalRead(ledPin));
вот это да, работает! спасибо.
Здесь написано не это.
Здесь
39
ledState==LOW;
написано, проверить равно ли ledState LOW, результат отбросить, ибо пофиг, идём дальше.
Вот чуствую что да, тут у меня какой-то косяк, но никак не могу понять какой именно. Если выключено - включить - иначе (если включено) - выключить. Что тут не так?
Вы сравните посимвольно свои строки "включить" и "выключить" - там синтаксическая ошибка
Нашёл я свою ошибку.
Знак равенства нужно было ставить одинарный! Ошибся.
Спасибо! Всё понятно.