Вопрос: Как реализовать двухрежимную работу микроконтроллера, с возможностью мгновенного переключения.
Пояснение: Нужно, чтобы микроконтроллер мог работать в двух режимах. Переключение между режимами осуществляется кнопкой без фиксации (нажал - есть сигнал, отпусти - пропал).
Проблема: Задача режима 1 - с задержкой в 1,5 часа, подавать на ножку в течении 3 сек ток. Но проблема, если первый режим включился - 1,5 часа - нельзя будет его переключить. Мне же нужно, чтобы я в любой момент, мог перейти с режима 1 на режим 2.
Задача режима 2 - с задержкой в (случайное число в диапазоне между 1,0 и 2,0 часами), подавать на ножку в течении 3 сек ток. Но проблема, такая же, как и в первом случае.
Я попробовал написать код
Спойлер
Код: Выделить всё
#include <avr/io.h>
#include <avr/delay.h>
#include <stdlib.h>
int main(void)
{
DDRA |=(1<<3)|(1<<4); /* Устанавливаю Порты PA3 и PA4 - на вывод */
DDRB &=~(1<<4); /* Устанавливаю Порт PB4 на ввод */
PORTB |=(1<<4); /* Включаю внутренний резистор Порта PB4 */
int ONOFF; /* Регулятор двух режимов */
int RTIME = 3600000 + rand() % 7200000; /* Устанавливаю переменную - случайным числом в диапозоне между часом и двумя часами */
while (void)
{
if (PINB & (1<<4)) /* Если нажали кнопку - включается второй режим, если не нажата, остается изначальный.*/
{
int ONOFF = 1;
}
else
{
int ONOFF = 0;
}
if (PINB & (1<<4) & int ONOFF==1) /* Если нажали кнопку - ,а второй режим уже включен - включается первый режим, если не нажата, остается изначальный. */
{
int ONOFF = 0;
}
if (ONOFF==1)
{
PORTA |=(1<<4); /* Подаю ток на ножку PA4 */
_delay_ms(3000); /* время подачи тока на ножку PA4 - 3 сек */
PORTA &=~(1<<4); /* выключаю ножку PA4 */
_delay_ms(5400000); /* полтора часа - режим ожидания */
}
else
{
PORTA |=(1<<4); /* Подаю ток на ножку PA4 */
_delay_ms(3000); /* время подачи тока на ножку PA4 - 3 сек */
PORTA &=~(1<<4); /* выключаю ножку PA4 */
_delay_ms(RTIME); /* Случайное время между часом и двумя часами - режим ожидания */
}
}
}Прошу: Помочь разобраться с кодом, возможно есть и более изящное решение.
P.S. при компиляции этого кода выдает такие ошибки.
Спойлер
Severity Code Description Project File LineWarning #warning "This file has been moved to <util/delay.h>.
Warning #warning "F_CPU not defined for <util/delay.h>"
Error recipe for target 'main.o' failed
Error expected expression before 'void'
Warning unused variable 'ONOFF'
Warning unused variable 'ONOFF'
Error expected expression before 'int'
Warning unused variable 'ONOFF'


