Привет в сем ! вот надумал сделать подсветку столешницы в кухне взял китайский датчик (HC-SR04) и полевой транзистор ну и ко нечто ардуино уно замысел такой что когда подходишь к мойке светодиоды включаются как только мы отошли светодиоды светиться еще 20 секунд и гаснут проблема я никак не могу въехать как работает задержка без delay да и с ШИМ тоже проблема ПОДСКАЖИТЕ куда двигаться Код (C++): // Подсветка столешницы версия 1.0 // Начата 18.08.2016 //****************************************************************************************************** int ledPin = 13; // подключаем -12в блока питания int trigPin = 8; // тригер int echoPin = 7; // эхо int dist1 = 20; // дистанция срабатывания void setup() { Serial.begin (9600); // выводим на экран pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(13, OUTPUT); } void loop() { long duration; int cm; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); cm = duration / 82; if( cm<dist1 ){ digitalWrite(13, HIGH); } if( cm>dist1 ){ digitalWrite(13, LOW); } delay(150); Serial.print(cm); Serial.print("."); Serial.println(" cm"); delay(150); }
вот нашол пример работы ШИМ Код (C++): int value = 0; // переменная для хранения значения ШИМ int ledpin = 9; // светодиод подключён к выводу 9 void setup() { // ничего не устанавливаем } void loop() { for(value = 0 ; value <= 255; value+=5) // напряжение постепенно увеличивается (от 0V to 5V) { analogWrite(ledpin, value); delay(300); // ждём 30 миллисекунд, чтобы был виден эффект (светодиод постепенно загорается) } for(value = 255; value >=0; value-=5) // а здесь напряжение будет постепенно уменьшаться (от 5V to 0V) (светодиод постепенно гаснет) { analogWrite(ledpin, value); delay(300); } } как его интегрировать незнаю
Код (C++): const int sensor_pin = 2; // нога сенсора 1 нет ничего 0 есть вторжение const int lamp_pin = 13; // нога лампы 1 горит 0 нет int sensor; int lamp; uint8_t non_stop_program(uint16_t span) { static uint32_t future = 0; if (millis()<future) return 0; future += span; return 1; } void setup() { pinMode(sensor_pin, INPUT); pinMode(lamp_pin, OUTPUT); } void loop() { sensor = digitalRead(sensor_pin); if (non_stop_program(1000)){ // сработка раз в 1 сек static int a1,a2,a3,a4,a5,a6,a7,a8,a9,a10; if (!sensor) { lamp=a10=a9=a8=a7=a6=a5=a4=a2=a1=1;} else{ lamp=a10;a10=a9;a9=a8;a8=a7;a7=a6;a6=a5;a5=a4;a4=a3;a3=a2;a2=a1;a1=0; } } digitalWrite(lamp_pin, lamp); }
Шаг первый: Скопировать код в буфер обмена Шаг второй: Нажать вот эту кнопку Шаг третий: вставить код в появившееся окно Шаг четвертый: отправить сообщение Готово!
non_stop_program(1000) . Если эту команду регулярно опрашивать, то она вернет 1 , не раньше 1000 милисекунд и, от того момента когда возращала 1 прошлый раз. А иначе возвращает ноль. Можете считать это "программным прерыванием". В отличии от аппаратного , который сразу вызывает программу прерывания . Для этого прерывания надо спрашивать самому: было прерывание или нет.