Здравствуйте, мои дорогие! Есть Arduino Uno, датчик освещённости (Troyka-модуль), AMP-B090 Силовой ключ (Troyka-модуль), настенные часы со светодиодной лентой и power bank(на фото первый образец с работой от сети). Задача: написать скетч, в исполнение которого входило бы включение светодиодной ленты при обнаружении датчиком освещённости сумерок и выключение ленты спустя через час времени после включения. Спасибо!
Код (C++): /* включение светодиодной ленты при обнаружении датчиком освещённости сумерок и выключение ленты спустя через час времени после включения */ #define LED_PIN 6 // пин для подсветки http://www.pighixxx.com/test/portfolio-items/connect-a-mosfet/ #define LDR_PIN A0 // пин для фоторезистора http://www.pighixxx.com/test/portfolio-items/connect-a-photoresistor/ #define LDR_VALUE 48 // граница срабатывания (уровень освещенности), 0...255 #define LED_TIMEOUT 60 // время до отключения подсветки, мин #define BRIGHTNESS_MAX 255 // максимальная яркость, 50...255 #define BRIGHTNESS_SPEED 5 // скорость изменения яркости: 10...1 void setup() { pinMode(LED_PIN, OUTPUT); pinMode(LDR_PIN, INPUT); } void fade(const boolean state) // HIGH - увеличение яркости, LOW - уменьшение яркости { byte brightness = BRIGHTNESS_MAX * !state; while (brightness != BRIGHTNESS_MAX * state) { analogWrite(LED_PIN, brightness); brightness += (2 * state - 1); // изменяем яркость на 1 пункт delay(BRIGHTNESS_SPEED * 10); } digitalWrite(LED_PIN, state); } // конец fade void loop() { static unsigned long timestamp = 0; static boolean runOnce = false; // флаг включения подсветки if (analogRead(LDR_PIN) < LDR_VALUE) // наступили сумерки { if (runOnce) { timestamp = millis(); // запоминаем время срабатывания fade(HIGH); // плавно включаем runOnce = false; } } else runOnce = true; if (digitalRead(LED_PIN) && millis() - timestamp > 60UL * 1000 * LED_TIMEOUT) // время вышло { fade(LOW); // плавно гасим runOnce = false; } } // конец loop Подкиньте копеечку на красную икру, а то батон есть, маслице есть, а на остальное жаба душит
Ну я и в три строки могу, только через полгода не смогу объяснить как оно работает Код (C++): void setup(){pinMode(6,OUTPUT);} void(*r)()=0; void loop(){(analogRead(A0)<48&&millis()<3600000)?digitalWrite(6,1):r();}
Кстати, если к этой панели на заднюю сторону приклеить модуль TTP223B без конденсатора, то при простом приближении к картине до 30-50 см, подсветка будет включаться автоматически
Должно ждать пока не наступит analogRead(A0)<48 а уже потом несмотря ни на что ждать 3600000мс после чего опять ждать с начала.
Думаю будет справедливо разделить между вами половину прибыли с первого заказа таких часов! Пишите номера телефонов господа.
неужели такое кто-то заказывает? Автору - добавьте что ли коррекцию времени из инета или через GPS - чтобы эти часы были хоть чем-то лучше китайского аналога с вещевого рынка