Обработка Длинных Нажатий

22-10-2013, 00:24 От: admin Посмотрели: 598
Добрый вечер. Реализую устройство, интерфейс в котором один сенсорный датчик. Алгоритм таков: если нагрузки нет и мы держим "кнопку", то спустя ~секунду включается нагрузка, если нагрузка включена и мы держим больше 1 секунды, то нагрузка отключается. Вот набросал код

#include <avr/io.h>
#include <avr/interrupt.h>
#define LOAD PD0
#define PORT_LOAD PORTD
#define SENSOR PC4
#define SENSOR_PIN (PINC&0x10)
#define SENSOR_DDR DDRC
unsigned char count, SensorL, SensorH, flag = 0;// 0 - выключенно, 1 - включенно
volatile unsigned char time; // Переменная подсчета времени касания
const unsigned char long_time = 93, short_time = 31; // Константы хранящие время срабатывания (3c, 1c)

unsigned char Check() // Проверка сенсоров
{
count = 0;
SENSOR_DDR &= ~(1<<SENSOR);
while(SENSOR_PIN==0)
count++;
SENSOR_DDR |= 1<<SENSOR;
if (count > SensorH) return 1;
else if (count < SensorL) return 0;
}
void Calibrate() // Настройка сенсоров
{
count = 0;
SENSOR_DDR &= ~(1<<SENSOR);
while(SENSOR_PIN==0)
count++;
SENSOR_DDR |= 1<<SENSOR;
SensorL = count + 10;
SensorH = count + 35;
}
void Load(unsigned char on_off)
{
if(on_off) PORT_LOAD |= 1<<LOAD;
else PORT_LOAD &= ~(1<<LOAD);
}
void func()
{
time = 0;
if(Check())
{
if (!(flag))
{
while(Check())
if(time >= short_time)
{
Load(1);
flag = 1;
time = 0;
}
}
else
{
while(Check());
if (time < long_time && time > short_time)
{
Load(0);
time = 0;
flag = 0;
}
}
}
}
void Init() // Инициализация, переферии, таймеров и тд
{
SENSOR_DDR = 1<<SENSOR;
TCCR0 |= (1<<CS02) | (0<<CS01) | (1<<CS00); // педделитель таймера 0 на 1024
sei();
}
ISR(TIMER0_OVF_vect) // Прерывание, по которому происходит опрос клавиатуры
{
Check();
time++;
}
int main(void)
{
Init();
Calibrate();
while(1)
{
func();
}
}
, нажатия определяет, а вот длинные нажатия вообще нет. В чем может быть проблема? уже час смотрю и не понимаю(
Раздел: AVR

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться, либо войти на сайт под своим именем.

Обсудить на форуме


На момент добавления Обработка Длинных Нажатий все ссылки были рабочие.
Все публикации статей, книг и журналов, представлены на этом сайте, исключительно для ознакомления,
авторские права на эти публикации принадлежат авторам статей, книг и издательствам журналов!
Подробно тут | Жалоба
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.


Опрос

Ваши предпочтения в TRX


Одинарное преобразование
Двойное преобразование
Прямое преобразование
SDR
Другое
Мне всё равно

Популярные новости
Календарь новостей
«    Май 2024    »
ПнВтСрЧтПтСбВс
 12345
6789101112
13141516171819
20212223242526
2728293031