Список таймеров v2.0

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

DetSimen пишет:

Вопщем, тебе понадобица: 

1 Встроенный светодиод на пине 13

2 Тактовая кнопка на пине A0 

3 Активный буззер на пине D4

при запуске, программа начинает мигать светодиодом на пине 13.  При нажатии на кнопку раздается короткий писк буззером и мигание останавливается, при следующем нажатиии опять писк и мигание продолжается. 

/*
 Name:		TimerTest.ino
 Created:	01.10.2019 8:40:17
 Author:	DtS
*/

#include <Arduino.h>
#include <TimerList.h>

static const uint8_t ACTIVE_BUZZER_PIN = 4;     // пин, для активного Buzzer


extern TTimerList TimerList;

THandle hBlink, hBuzzer;		// хэндлы для мигателя и бузера


void tmrBuzzer(void) {                      // выключить бузер и остановить таймер
	digitalWrite(ACTIVE_BUZZER_PIN, LOW);
	TimerList.Stop(hBuzzer);
}


void tmrBlink(void) {			// toggle светодиод на ноге 13 
	static bool state = false;
	digitalWrite(LED_BUILTIN, state);
	state = !state;
}


void Beep(void) {                         // включить бузер и взвести таймер его выключения
	digitalWrite(ACTIVE_BUZZER_PIN, HIGH);
	TimerList.Reset(hBuzzer);
}


// читает цифровую кнопку на пине APin
// отдает true - пока кнопка нажата.

bool KeyRead(const uint8_t APin) {
	static uint32_t lastread = 0;
	static bool laststate = false;

	uint32_t now = millis();
	if (now - lastread < 100) return laststate;

	lastread = now;

	uint8_t cnt = 0;

	for (uint8_t i = 0; i < 8; i++) {
		if (!digitalRead(APin)) cnt++;
		delay(1);
	}

	laststate = (cnt > 4);

	return laststate;
}


void setup() {
	Serial.begin(115200);
	delay(500);

	hBlink = TimerList.Add(500, tmrBlink);         // таймер мигания светодиодом на ноге 13
	hBuzzer = TimerList.AddStopped(150, tmrBuzzer);// таймер буззера, 150мс, создается остановленным

	pinMode(LED_BUILTIN, OUTPUT);   // настройка пинов на ввод и вывод
	pinMode(A0, INPUT_PULLUP);		// здесь кнопка
	pinMode(ACTIVE_BUZZER_PIN, OUTPUT);  // здесь бузер
}

void loop() {

	if (KeyRead(A0)) {  // читаем кнопку, если нажата
		
		Beep();         // запускаем писк на нажатие кнопки
		
		while (KeyRead(A0)) ;  // подождем пока кнопку атпустют
		
		if (TimerList.isActive(hBlink)) {   // если светодиод на 13 ноге мигает - 
		
			digitalWrite(LED_BUILTIN, LOW); // потушим его
			TimerList.Stop(hBlink);     // и остановим мигание

		}

		else  
			TimerList.Reset(hBlink);    // ну а если светодиод не мигает - запустим мигание снова
	}
  
}

 

чувствуется тлетворное влияние MS-DOS  (я о хэндлах) )))

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

ua6em пишет:

чувствуется тлетворное влияние MS-DOS  (я о хэндлах) )))

Дак оне и в виндовсе никуда не делись, тока обзываюца теперь по-умному "дескрипторы"

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

DetSimen пишет:

ua6em пишет:

чувствуется тлетворное влияние MS-DOS  (я о хэндлах) )))

Дак оне и в виндовсе никуда не делись, тока обзываюца теперь по-умному "дескрипторы"

княжиче? (де скрип-тор)

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

ua6em пишет:

княжиче? (де скрип-тор)

Не заставляй меня скрипеть межушным ганглием, в это хмурое дождливое утро.  Не задалась чота у нас со с котом жизнь в городе со вчерашнего вечера. 

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

DetSimen пишет:

ua6em пишет:

княжиче? (де скрип-тор)

Не заставляй меня скрипеть межушным ганглием, в это хмурое дождливое утро.  Не задалась чота у нас со с котом жизнь в городе со вчерашнего вечера. 

чота воздуху мне мало, копытом бью, туман бросаю?

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

Дед, я тут подумал, а не может тот сбой в таймере происходить из-за корректировки миллиса?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Нет

ПыСы Хотя, хренывознает. У мня за стокалет ни одного сбоя в таймерах не было, если прерывания были не запрещены.  

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

itehno пишет:

DetSimen пишет:

Спасибо. Буду экспериментировать.

Кста, получилось чонить?  

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

ua6em пишет:

Дед, я тут подумал, а не может тот сбой в таймере происходить из-за корректировки миллиса?

Я тут наливатор собираю, на 2 рюмки, но с разных ёмкостей, с валерянкой и с невалерянкой.  Тама 7 таймеров используются, если наливать будет исправно, значт, дело не в таймерах. 

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

DetSimen пишет:

Нет

ПыСы Хотя, хренывознает. У мня за стокалет ни одного сбоя в таймерах не было, если прерывания были не запрещены.  

так еще DIMAX писал, что если что-то может не заработать должным образом, оно у меня обязательно не заработает...
Тестировщик интересно никому не нужен за умеренные деньги )))

itehno
Offline
Зарегистрирован: 18.04.2015

DetSimen пишет:

Кста, получилось чонить?  

Доброго дня. Да, огромное спасибо. Сейчас пилю проект и думаю через пару недель попробую тут разместить.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Ну ок. Будут вопросы - отвечу. Тока, днем, када я трезвый. :-)