Секундомер со светофором
- Войдите на сайт для отправки комментариев
Ср, 07/10/2015 - 05:09
Привет, собрал секундомер с двумя кнопками - Старт и стоп. Хочу добавить что-то типа светофора, нажали старт - красный светодиод мигнул три раза, загорелся зелёный, пошел отсчет. Нажали стоп - всё потухло, результат вывелся в терминал. Не могу разобраться как добавить мигание красным светодиодом. Подскажите в какую сторону копать?
int ms; int time; volatile unsigned long start = 0; volatile unsigned long stop = 0; volatile int once = 0; void setup() { attachInterrupt(14, begin, FALLING); attachInterrupt(12, end, FALLING); Serial.begin(115200); } void loop() { } void begin() { if (once == 0) { //проверяем, нажималась ли уже кнопка старт start = millis(); //получаем текущее значение millis once = 1; //ставим метку "старт был нажат" Serial.println("Start"); stop = 0; //обнуляем предыдущий замер, а можно и не обнулять :) } } void end() { if (once == 1) { //проверяем, нажималась ли кнопка старт stop = millis() - start; //вычисляем промежуток Serial.println("Finish"); timer (); once = 0; //убираем метку } } int timer() { time = stop/1000; ms = stop; if (time/60%60<10) { Serial.print ("0"); } Serial.print ((time/60)%60); Serial.print (":"); if (time%60<10) { Serial.print ("0"); } Serial.print (time%60); Serial.print (":"); if (ms%1000<10) { Serial.print ("00"); } else if (ms%1000>10 && ms%1000<100) {Serial.print ("0");} Serial.println (ms%1000)/100; }
>Не могу разобраться как добавить мигание красным светодиодом.
посмотрите пример Blink, разберитесь с ним, задайте вопрсы по нему.
С примерами как мигать светодиодом с delay и c millis, я уже разобрался, они все основаны на цикличности функции loop(), я её не хочу захламлять.
Вопрос конкретно по миганию, можно ли мигание сделать отдельной функцией, в которой мигание повторяется несколько раз через временные интервалы, а не циклично? Можно ли будет потом вызвать эту функцию по внешнему прерыванию? Или вообще не лезть в прерывания, всё запихивать в loop()?
J0K3R_88, можно прицепить к таймеру.
Интересное решение, спасибо:)
Мне еще интересно, почему это просто отдельной функцией не реализуется, через оператор for например?:) И если можно, то как? У меня что-то никак не получается
J0K3R_88,
for от loop сильно отличаются?
loop захламлять не хотите, а for чем виноват?
поищите в гугле "100 способов мигать светодиодом".
loop крутиться в бесконечном цикле со времени старта модуля, а мне нужно вызывать цикл и управлять его повторениями.
Решилось кстати всё вот так:
Теперь из любого места программы можно вызывать эту функцию и мигать:)