Ви не увійшли.
мне интересно что за device он делает )
навскидку задержка детонации )
Не, ну сами ж обратили внимание на "волшебную фразу", а тут бац. Словно обухом по голове! Ну нельзя же так. Охоту отобъёте в самом начале.)) Хотя... плавать тоже по разному учат.))
тс тут вряд ли что поймёт)))
сами проверьте
что то от меня, что то от 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;
}
}
Спасибо за ответы. Честно говоря, я как-то не подумал с начало о поиске.
По поводу вкл - вкл.
Думаю да, вот:
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, вы не заметили волшебную фразу )
"Я только начинаю изучать возможности и способы программирования ардуино"
Поиском пользоваться не пробовали? http://forum.arduino.ua/viewtopic.php?id=456
Добрый день.
Я только начинаю изучать возможности и способы программирования ардуино, поэтому вопрос соответствующего уровня.
Как написать скетч, чтобы после определенного количества нажатий тактовой кнопки запускалась определенная программа?
К примеру,
одно нажатие кнопки - горит один светодиод
две нажатия - два светодиода и т.д.
Могли бы Вы привести определенные примеры или объяснить сам принцип?
Спасибо.
С ув. Барт.