Счетчик импульсов
- Войдите на сайт для отправки комментариев
Втр, 08/11/2016 - 10:40
Доброе время суток,проект простейшей программы поставил меня в ступор,надеусь на вашу отзывчивость !
И так имеем кнопку и один выход с подвязоным светодиодом для визуализации , Задача при нажатии на кнопку получаем импульс Hi 100 MC lou 300 MC в количестве 50 раз и ждем нажатии нажатия кнопки если нажатия раньше окончания цикла то пауза и сброс счетчика. Задания благодарен.
В пределах разумного)) htpicc@gmail.com
p.masyukov скайп
импульс Hi 100 MC lou 300 MC
Это Мегасекунды ? :)
Извиняюсь за свои грамотические ошибки:-)мили секунды ,этот по сути не очень важно в процессе доработки будет мжно изменить интервалы
Смотрите, тут есть такие блюстители этих приставок, которые прям сейчас набегут и начнут кидаться какашками.
Сколько готовы заплатить за простенький скетч ?
Видимо я не совсем разобрался с правилами данного форума,и хотел обойтись советами или пдсказками
"ищу исполнителя" != "ищу подсказчика"
Понятно,а сколько бы стоил такой скейч?
Это простенький скетч. Попробуйте спросить про него в другой теме. Тут тема "ищу исполнителя (за деньги)".
Ок,спасибо
пусть ребенок радуется, жалко, ШтолЕ?
#define LED_pin 13 #define BUTTON_pin 10 #define DBNC 30 //интервал антидребезга в мс #define ON_time 100 //время включения в мс #define OFF_time 300 //...выключения #define N_rep 50 //к-во повторов void setup() { pinMode(LED_pin, OUTPUT); //настраиваем пин светодиода digitalWrite(LED_pin,LOW); //изначально выключен pinMode(BUTTON_pin, INPUT); //натраиваем пин кнопки digitalWrite(BUTTON_pin,HIGH); //поддтяжка к питанию //Serial.begin(19200);while(!Serial); } void loop() { static uint8_t cyc=0; //счетчик количества циклов мигания static uint32_t last_ch=0; //время последнего переключения светодиода static uint32_t debonce=0; //время, в течении которого не менялось состояние кнопки static boolean bp=false; //последнее состояние кнопки (истина - нажата, "button pressed") static boolean isfirst = false; //первый ли раз мы видим это нажатие кнопки, чтобы два разе не отреагировать static boolean activ=false; //состояние работаем или ждем uint32_t cm=millis(); //текущее время boolean b=(digitalRead(BUTTON_pin) == LOW); //читаем пин кнопки if (b != bp) {debonce = cm; bp=b; isfirst=true;} //если старое состояние кнопки и новое не равны, то начинаем отсчет антидребезга if((cm-debonce > DBNC) && bp && isfirst) // если кнопка нажата и нажатие не обработано и прошел интервал антидребезга, то обрабатываем нажатие { if (activ) { cyc = 0; //сбрасываем счетчик activ = false; //переходим в ожидание digitalWrite (LED_pin,LOW); //Serial.println("off"); } else // если раньше ждали, то ;) - дождались! { activ = true; digitalWrite(LED_pin,HIGH); last_ch = cm; //Serial.println("on"); } isfirst = false; } if (activ) //если состояние работы, то мигаем { if (cyc < N_rep) { //если прошло нужное время меняем состояние диода и увеличиваем счетчик if ((digitalRead(LED_pin)==HIGH) && (cm-last_ch > ON_time)) {last_ch = cm; digitalWrite(LED_pin, LOW);cyc++;} if ((digitalRead(LED_pin)== LOW) && (cm-last_ch > OFF_time)) {last_ch = cm; digitalWrite(LED_pin,HIGH);} } else { cyc = 0; //сбрасываем счетчик activ = false; //переходим в ожидание digitalWrite (LED_pin,LOW); } } }Спасибо тебе добрый человек,читаю твой скейч и понимаю сам бы точно не дошел бы ,буду тренироваться чтоб не беспокоить по пустякам.