Меня таки не оставляет желает сделай свой алгоритм радиоуправления на tinny13
Я такие допускаю что я придумал какую то фигню. А может ее уже придумали до меня. Ну не важно.
Я решил подать на вход тиньки импульсны сигнал и попытаться его распознать.
Подал сигнал с периодом 20мс. Делаю это все в Протеусе.
И написал такой алгоритм распознавания.
Суть его проста.
Пин сконфигурирован как вход (типа кнопка на PB4)
На нем как известно HIGH, если кнопка не нажата и LOW если пришел низкий уровень.
В алгоритме я проверяю если пришел низкий уровень, то жду 25мс и проверяю опять ли низкий, если низкий, то жду 20мс и опять должен быть низкий. В итоге на 3-4 проверке можно сделать вывод что это именно мой сигнал и включить лампочку.
Потом я еще делаю задержку 3сек, что бы отделить команды.
Потом можно сделать проверку по High
Код: Выделить всё
ISR(PCINT0_vect)
//|| (PINB & (1<<BUTTON2)) == 0
{
if ( (PINB & (1<<BUTTON2)) == 0 ) // если LOW
{
_delay_ms(25); //Ждем мсек
if ( (PINB & (1<<BUTTON2)) == 0 ) // если LOW
{
_delay_ms(25);
if ( (PINB & (1<<BUTTON2)) == 0 ) // если LOW
{
_delay_ms(25);
if ( (PINB & (1<<BUTTON2)) == 0 ) // если LOW
{
_delay_ms(25);
if ( (PINB & (1<<BUTTON2)) == 0 ) // если LOW
{
PORTB ^= (1<<LED); //переключаем состояние светодиода (вкл./выкл.)
_delay_ms(3000);
}
}
}
}
}
}
Но как вы уже поняли, раз я сюда пишу значит что-то не срастается.
На мой розум первая проверка должны быть после 25мс - я попадаю по центру, а остальные после 20мс
Но лампочка исправно зажигается только есил ставлю 25мс на всех проверка.
Короче, даже если это все бред, расскажите почему не работает так как я это себе представляю. Спасибо.