#1 2016-10-04 06:41:10

Bart
Учасник
Зареєстрований: 2016-10-02
Повідомлень: 2

Тактовая кнопка.

Добрый день.

Я только начинаю изучать возможности и способы программирования ардуино, поэтому вопрос соответствующего уровня.

Как написать скетч, чтобы после определенного количества нажатий тактовой кнопки запускалась определенная программа?

К примеру,
одно нажатие кнопки - горит один светодиод
две нажатия - два светодиода и т.д.

Могли бы Вы привести определенные примеры или объяснить сам принцип?

Спасибо.
С ув. Барт.

Неактивний

#2 2016-10-04 07:36:15

Green
Учасник
Зареєстрований: 2015-11-08
Повідомлень: 593

Re: Тактовая кнопка.

Поиском пользоваться не пробовали? http://forum.arduino.ua/viewtopic.php?id=456

Неактивний

#3 2016-10-04 10:32:23

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Тактовая кнопка.

Green, вы не заметили волшебную фразу )
"Я только начинаю изучать возможности и способы программирования ардуино"

Неактивний

#4 2016-10-04 11:05:49

vvr
Учасник
Зареєстрований: 2015-04-12
Повідомлень: 876

Re: Тактовая кнопка.

Вы научились одной кнопкой вкл и выкл светик?
Покажите код

Неактивний

#5 2016-10-04 18:45:13

Bart
Учасник
Зареєстрований: 2016-10-02
Повідомлень: 2

Re: Тактовая кнопка.

Спасибо за ответы. Честно говоря, я как-то не подумал с начало о поиске.

По поводу вкл - вкл.
Думаю да, вот:

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);
}
}

Спасибо за ссылку.
Посмотрел, много еще что не понятно, но буду сегодня разбираться.

Неактивний

#6 2016-10-04 20:36:57

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Тактовая кнопка.

сами проверьте

что то  от меня, что то от 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;   
 }
 }

Неактивний

#7 2016-10-04 21:26:54

vvr
Учасник
Зареєстрований: 2015-04-12
Повідомлень: 876

Re: Тактовая кнопка.

тс тут вряд ли что поймёт)))

Неактивний

#8 2016-10-04 22:14:08

Green
Учасник
Зареєстрований: 2015-11-08
Повідомлень: 593

Re: Тактовая кнопка.

Не, ну сами ж обратили внимание на "волшебную фразу", а тут бац. Словно обухом по голове! Ну нельзя же так. Охоту отобъёте в самом начале.)) Хотя... плавать тоже по разному учат.))

Неактивний

#9 2016-10-04 22:19:48

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Тактовая кнопка.

мне интересно что за device он делает )
навскидку задержка детонации )

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму