Купил матрёшку, разбираюсь. Делаю не как по инструкции, а дополнительно усложняя себе задачи. На этом этапе: http://wiki.amperka.ru/конспект-arduino:ночной-светильник столкнулся с небольшим недопониманием. Делаю вот это дополнительное задание: 2)Добавьте в схему еще один светодиод. Дополните программу так, чтобы при падении освещенности ниже порогового значения включался один светодиод, а при падении освещенности ниже половины от порогового значения включались оба светодиода. Проблема в том, что если я подключаю оба диода через цифровой выход, то второй горит в полсилы. Если сделать второй аналоговым, то всё впорядке, но тогда яркость диода нарастает при падении освещения. (оно и логично). У всех так? Это особенность Ардуино или кривой код? Получается, что 2 налаговых выхода не будут работать в полную силу?
#define LED_PIN 12 #define LDR_PIN A0 #define POT_PIN A1 #define LED2_PIN 9 void setup() { pinMode(LED_PIN, OUTPUT); } void loop() { int lightness = analogRead(LDR_PIN); int threshold = analogRead(POT_PIN); boolean tooDark = (lightness < threshold); if (tooDark) { // ...включаем освещение digitalWrite(LED_PIN, HIGH);} else { digitalWrite(LED_PIN, LOW); } if (lightness < threshold/2) { analogWrite(LED2_PIN, 255);}else{ analogWrite(LED2_PIN, 0);} } Сейчас код имеет такой вид
Спасибо огромное!!! Странно, что вообще хоть как то работало) Вообще много у меня пробелов по электронике, доучившись до второго курса на специальности телекоммуникаций если бы не купил набор, так бы и не увидел резистор, транзистор... Удивляет, что когда убираешь минус иногда продолжает работать, но не стабильно, удивляет, что диод светится, если с одной стороны минус, а с другой.... палец Спасибо за набор, уважаемые разработчики
Столкнулся с такой проблемой: не горит второй диод, если совсем темно (закрываю пальцем фоторезистор). Если вывод сделать сразу на оба диода, то они горят, т.е. схема собрана верна, явно проблема в коде. #define LED_PIN 12 #define LED_PIN2 4 #define LDR_PIN A0 #define POT_PIN A1 void setup() { pinMode(LED_PIN, OUTPUT); pinMode(LED_PIN2, OUTPUT); } void loop() { int lightness = analogRead(LDR_PIN); int threshold = analogRead(POT_PIN); if (lightness < threshold) { digitalWrite(LED_PIN, HIGH); } else { digitalWrite(LED_PIN, LOW); } if (lightness < threshold / 2) { digitalWrite(LED_PIN2, HIGH); } else { digitalWrite(LED_PIN2, LOW); } } Хотел заменить циклы немного иначе, но для наглядности пусть будут хотя бы так.
Выведите в терминал значения переменных. Видимо, одно из условий не выполняется и при "нулевой" освещенности.
Да вы правы, не попадает. Поменял немного код, добавив выводы в консоль и при 0 освещенности во втором блоке ничего не выводится, но мне все равно не ясно почему. В чем ошибка? #define LED_PIN 12 #define LED_PIN2 4 #define LDR_PIN A0 #define POT_PIN A1 void setup() { pinMode(LED_PIN, OUTPUT); pinMode(LED_PIN2, OUTPUT); Serial.begin(9600); } void loop() { int lightness = analogRead(LDR_PIN); int threshold = analogRead(POT_PIN); if (lightness < threshold) { digitalWrite(LED_PIN, HIGH); Serial.print(threshold); } else { digitalWrite(LED_PIN, LOW); } if (lightness < threshold / 2) { digitalWrite(LED_PIN2, HIGH); Serial.print(threshold); } else { digitalWrite(LED_PIN2, LOW); } }
Чему равен threshold, и чему равна lightness при нулевой освещенности? Условие может не выполняться потому, что уровень на входе A0 в темноте оказывается выше половинного порога.
А как лучше выводить значения? В самой IDE у меня все выводится в горизонтальную линию, я знаю что вывод содержит 4 знака, но все же.
Serial.print("threshold=");Serial.println(threshold); Первый Serial.print выдаст поясняющую надпись ln во втором обеспечит перевод строки после выдачи значения параметра. Будет удобнее смотреть в мониторе последовательного порта Arduino IDE.