LED
- Войдите на сайт для отправки комментариев
Пт, 31/08/2018 - 01:55
Привет всем.
Вот уже 2 года не могу решить по моему мненю простую задачу.Раскажу на примере.
Есть светодиод 1 и светодиод 2. Хочу, чтобы одновременно моргали но с разными частотами.Скажем 1-ый моргал в каждую 100мс, второй моргал в каждую 110мс. Они должны моргать в независимости от друг друга, но одновременно.
Спасибо...
#6 #9
Посмотрел.Честно говоря, не понял.
На моем примере можете обьяснить?
Посмотрел.Честно говоря, не понял.
На моем примере можете обьяснить?
1-ый моргал в каждую 100мс, второй моргал в каждую 110мс. Они должны моргать в независимости от друг друга, но одновременно.
напоминает кусок из знаменитого:
" .... Нам нужно нарисовать семь красных линий. Все они должны быть строго перпендикулярны, и кроме того, некоторые нужно нарисовать зеленым цветом, а еще некоторые — прозрачным. ..."
#include "TTimerList.h" #define LED1PIN 13 // один светлодиод на 13-м пине #define LED2PIN 12 // второй - на 12-м #define LED1PERIOD 100 // первый мигает с периодом 100 ms #define LED2PERIOD 110 // второй - 110 ms extern TTimerList TimerList; THandle hTimer1Led, hTimer2Led; void tmr1Led() { static bool state = true; digitalWrite(LED1PIN, state); state = !state; } void tmr2Led() { static bool state = true; digitalWrite(LED2PIN, state); state = !state; } void setup() { pinMode(LED1PIN, OUTPUT); pinMode(LED2PIN, OUTPUT); hTimer1Led = TimerList.Add(tmr1Led, LED1PERIOD); hTimer2Led = TimerList.Add(tmr2Led, LED2PERIOD); } void loop() { }Мигают по-разному, но одновременна. Если интересно, спроси меня где взять TTimerList.h
Они должны моргать в независимости от друг друга, но одновременно.
За два года такую задачу никто не сможет решить! Моргать ОДНОВРЕМЕННО, но в РАЗНЫЕ моменты времени!
:-(
Находишь минимальное общее кратное, по нему отсчитываешь количество тактов и производишь определенные события в зависимости от количества тактов.
Да,простите и где можно найти TTimerList.h?
Я искал,кое что нашел,но не работает
https://github.com/DetSimen/Arduino-
Спасибо работает, но только на ATmega328
На ATmega168 не работает
Ошибка (MAXTIMERCOUNT was not declared in the scope). Посмотрел ТТimerlist.h , ничего странного.
Дефайны надо поправить
в .h файл вставить
а в .cpp
куданить в середину обьявления TTimerList.Init
#elif defined(__AVR_ATmega168P__) void TTimerList::Init() { byte oldSREG = SREG; cli(); TCCR0A = TCCR0A & 0b11111100; OCR0A = TIMER0_ONE_MS; TIMSK0 |= 0x3; TIFR0 = TIFR0 | 0x2; SREG = oldSREG; }У мня просто 168-х не осталось, я с ними не тестировал. На 8, 328 и 2560 работают, как надо.
Спасибо, проверю
Я на github-е поправил уже, залил. можно оттуда скачать опять, проверить.