избавиться от delay ()
- Войдите на сайт для отправки комментариев
Ср, 08/04/2015 - 00:31
Уважаемые специалисты програмисты АРДУИНЩИКИ.
Помогите пожалуйста новичку избавиться от функции Delay ().
3 дня потратил чтоб написать этот код как положено.
это всего лишь часть кода моего безумного проэкта. но решил не наваливать все в кучу, а решать проблемы по мере поступления.
/*
ИДЕОЛОГИЯ:
После нажатия кнопки включается реле, и запускаеться таймер.
после повторного нажатия реле выключаеться и останавливается таймер.
затем расчитываю продолжительность работы реле.
ОБНОВЛЕНИЕ :
Планирую
1) Избавиться от делай
2) Сохранить переменную "pausa" в EEPROM
*/
# define relePin 10 // выход управления реле (на 10 пине)
# define buttonPin 2 // вход для кнопки . кнопка подключена к пину 2
boolean flag = 0; // переменная для того чтоб видить запущено ли реле
long unsigned onTime =0; // первое нажатие "Старт"
long unsigned offTime=0; // второе нажатие "Стоп"
void setup() {
Serial.begin(9600); // запускаем сериал монитор на скорости 9600 bits per second:
pinMode(relePin, OUTPUT); // 10 пин как выход реле
pinMode(buttonPin, INPUT); // 2 пин как вход кнопки
}
void loop () {
if(digitalRead(2)==HIGH&&flag==0) // если кнопка нажата и flag =0 (и реле выключено)
{
digitalWrite(10,HIGH); // запустить реле
flag=1; // запомнить что реле вкдючено
onTime = millis()-onTime; // начать считать
delay(500); // защита от дребезга
}
if(digitalRead(2)==HIGH && flag==1) // если кнопка нажата и flag =1 (и реле работает)
{
digitalWrite(10,LOW); // выключить реле.
flag=0; // запомнить что реле выключено
offTime = millis()-offTime; // закончили считать
delay(500); // защита от дребезга
long unsigned pausa = offTime - onTime; // расчитываю продолжительность работы реле
Serial.print("onTime");
Serial.println (onTime);
Serial.print("offTime");
Serial.println (offTime);
Serial.print("pausa");
Serial.println (pausa);
offTime =0; // обнуляем
onTime =0; // счетчики
}
}
в чём вопрос-то ?
...голова не варит уже :(
это так - для начала, нужно доделывать
# define relePin 10 // выход управления реле # define buttonPin 2 // вход для кнопки, кнопка подключена к GND и пину 2 boolean statusRelay=0; // переменная для того чтоб видить запущено ли реле long unsigned onTimeRelay; // время нажатия вкл реле long unsigned offTimeRelay; // время нажатия выкл реле //================================================================ void setup() { Serial.begin(9600); pinMode(relePin, OUTPUT); digitalWrite(relePin,LOW); // выключить реле pinMode(buttonPin,INPUT); digitalWrite(buttonPin,HIGH); // включить резистор подтяжки пина к VCC } //================================================================ void loop () { // обработка кнопки if(digitalRead(buttonPin)==0) { delay(75); // защита от дребезга while(digitalRead(buttonPin)==0) { } // ждём отпускания кнопки if(!statusRelay) { statusRelay=!statusRelay; digitalWrite(relePin,statusRelay); offTimeRelay=millis(); } else { statusRelay=!statusRelay; digitalWrite(relePin,statusRelay); onTimeRelay=millis(); } } // вывод Serial.print("onTime = "); Serial.println (onTimeRelay); Serial.print("offTime = "); Serial.println (offTimeRelay); Serial.print("Pausa = "); Serial.println (offTimeRelay-onTimeRelay); } //================================================================вопос в том что есть защита от дребезга в виде delay ()
читал что она тормозит процес.
потому хочу от нее избавиться,
прошу сильно не пинать ногами по образованию повар, ардуину ток 3-ю неделю изучаю.
програмирование познаю с нуля потому могу делать ошибки.
забыл добавить , конпку подтягиваю к земле через резистор 10 кОм
кстати, по мере продвижения появляються вопросы
1)как реализовать аварийный стоп? (нажал кнопку и все остановилось не важно какой процесс выполняеться(в моем случае реле))
2) как пользоваться функцией stop?
пишу в редакторе слово stop оно подсвечиваеться красным, стало быть есть такая функция в arduino /
хотел почитать как ей пользоваться но гугл дает только англоязычные сайты.
всем спасибо за понимание и подсказки
Спасибо Буду разбираться