Мигающий светодиод без 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));
вот это да, работает! спасибо.
Здесь написано не это.
Здесь
39ledState==LOW;написано, проверить равно ли ledState LOW, результат отбросить, ибо пофиг, идём дальше.Вот чуствую что да, тут у меня какой-то косяк, но никак не могу понять какой именно. Если выключено - включить - иначе (если включено) - выключить. Что тут не так?
Вы сравните посимвольно свои строки "включить" и "выключить" - там синтаксическая ошибка
Нашёл я свою ошибку.
if (ledState==LOW) ledState=HIGH; else ledState=LOW; digitalWrite(ledPin,ledState);Знак равенства нужно было ставить одинарный! Ошибся.
Спасибо! Всё понятно.