Подскажите, в чём дело. Сделал "ночник" на простом принципе: на фоторезистор падает свет- светодиод не горит, не падает свет- светодиод горит. Вот урезанная версия. Код (Text): int ledPin= 9; int switcher=0 ; void setup () { pinMode(ledPin, OUTPUT); // Serial.begin(9600); } void loop() { int data= analogRead(switcher); data= constrain (data, 400, 950 ); int ledLevel= map(data,400, 950, 255,0); analogWrite(ledPin, ledLevel); } Но когда показания с резистора почти максимальны, светодиод начинает мигать(яркость меняется очень быстро), пока показания не станут равны >=950. В чём дело?
Из-за ШИМ. Это вам не непрерывный аналоговый сигнал. Попробуй так int ledLevel= map(data,400, 950, 255,100); if (ledLevel <= 100) ledLevel=100; analogWrite(ledPin, ledLevel); Или ставьте преобразователь ШИМ в напряжение. С аналоговыми входами советуют работать через #define. Оно и памяти в контроллере не занимает #define swither A0 и с дискреткой, кстати, тоже.
Спасибо больше, теперь работает стабильно. Скажите, а в чём разница между объявлением "int swither= A0", и "#define swither A0", только что, вроде, памяти стало меньше есть, тогда куда эта переменная сохраняется?
Во первых, int swither= A0 сделать не удастся. A0 не является целочисленным значением #define - это директива препроцессора C Вот именно, что для хранения значения не создается переменная. Компилятор подставляет значение макроопределения Учите. https://ru.wikipedia.org/wiki/Препроцессор_Си