Ви не увійшли.
Сторінки 1
Добрый день.
Я только начинаю изучать возможности и способы программирования ардуино, поэтому вопрос соответствующего уровня.
Как написать скетч, чтобы после определенного количества нажатий тактовой кнопки запускалась определенная программа?
К примеру,
одно нажатие кнопки - горит один светодиод
две нажатия - два светодиода и т.д.
Могли бы Вы привести определенные примеры или объяснить сам принцип?
Спасибо.
С ув. Барт.
Неактивний
Поиском пользоваться не пробовали? http://forum.arduino.ua/viewtopic.php?id=456
Неактивний
Спасибо за ответы. Честно говоря, я как-то не подумал с начало о поиске.
По поводу вкл - вкл.
Думаю да, вот:
int ledPin = 10;
int inPin = 6;
int val = 0;
void setup()
{
pinMode(10, OUTPUT);
pinMode(6, INPUT);
}
void loop ()
{
if (val == 1) {
digitalWrite(10, HIGH);
}
{
if (val == 0) {
digitalWrite(10, LOW);
}
val = digitalRead(6);
digitalWrite(10, 0);
}
}
Спасибо за ссылку.
Посмотрел, много еще что не понятно, но буду сегодня разбираться.
Неактивний
сами проверьте
что то от меня, что то от Green
смысл простой, копку нажали через 100 мс будет принято решение о вызове задачи, при каждом нажатии будет врумя сдвинуто
если я задачу понял неправильно то второй вариант )
if (KeyExe())
{
key_counter++;
switch ( key_counter )
{
case 0: break;
case 1: func1 (); break;
case 2: func2 (); break;
case 3: func3 (); break;
case 4: func4 (); break;
default: key_counter = 0; break;
}
}
#define BIT(x) (1 << (x))
#define CHECKBIT(x,b) (x&(b))
#define SETBIT(x,b) x|=(b)
#define CLEARBIT(x,b) x&=~(b)
#define TOGGLEBIT(x,b) x^=(b)
#define count_element_array(x) sizeof(x)/sizeof(x[0])
char debug_str[100];
typedef enum {
TIMER_EXE = 0,
TIMER_DISABLED = 1,
TIMER_RUN = 2,
}TE_TIMER;
TE_TIMER programm_count_down_uint32 ( unsigned long *timer , unsigned long shift )
{
if (*timer > 0 )
{
if (*timer > shift )
{
*timer -= shift;
return TIMER_RUN;
}
else
{
*timer = 0;
return TIMER_EXE;
}
}
return TIMER_DISABLED;
}
bool KeyExe()
{
static bool key_pressed;
static uint8_t debounce_timer;
if (key_pressed != !digitalRead(KEY)) {
key_pressed = !key_pressed;
debounce_timer = DEBOUNCE_TIME;
}
else if (debounce_timer && !--debounce_timer && key_pressed)
return true;
return false;
}
void loop()
{
static unsigned long task_time;
static unsigned long key_time_start_press;
TE_TIMER status;
static unsigned long hw_old_system_timer = 0;
unsigned long hw_current_system_timer = 0;
unsigned long delta_task_timer;
hw_current_system_timer = millis();
delta_task_timer = hw_current_system_timer - hw_old_system_timer;
hw_old_system_timer = hw_current_system_timer;
if (KeyExe())
{
key_counter++;
key_time_start_press = 100; // ms
}
status = programm_count_down_uint32 ( &key_time_start_press, delta_task_timer );
switch ( status )
{
case TIMER_EXE:
switch ( key_counter )
{
case 0: break;
case 1: func1 (); break;
case 2: func2 (); break;
case 3: func3 (); break;
case 4: func4 (); break;
}
sprintf ( debug_str,"exe func: %d " ,key_counter );
key_counter = 0;
Serial.println ( debug_str );
break;
case TIMER_RUN:
break;
}
}
Неактивний
Сторінки 1