Страница 8 из 57 ПерваяПервая ... 23456789101112131418 ... ПоследняяПоследняя
Показано с 71 по 80 из 561
  1. #71
    Новичок
    Регистрация
    12.03.2010
    Возраст
    53
    Сообщений
    5
    Вес репутации
    175

    По умолчанию Re: Управление рулевыми кнопками при помощи Carduino.

    Да еще блок кнопок представляет из себя отдельный электронный миханизм ч микросхемами конденсаторами и тд. которое без 12 воль никак не риагирует на нажатие кнопок

  2. #72
    Пользователь
    Регистрация
    20.02.2009
    Возраст
    50
    Сообщений
    44
    Вес репутации
    197

    По умолчанию Re: Управление рулевыми кнопками при помощи Carduino.

    Цитата Сообщение от Vallu Посмотреть сообщение
    +12 можно подключить и на прямую с предохранителей суть вопроса в том как при помощи данной программы, блока кнопок и arduino управлять компом. Здесь описано что к подключаешь землю и сигнал и програмируешь кнопки а у меня постоянно с кнопок идут импульсы проще говоря если все подключить как описано выше то постоянно будут менятся песни например.
    В данной ветке описано подключение резистивных кнопок к ардуине. У тебя же походу блок кнопок выдает что-то на однопроводный интерфейс, а-ля I2C. Ардуину этому интерфейсу научить естесственно можно, но, нужно знать что там передается и как Короче, снифферить шину надо или гууглить на эту тему.

  3. #73
    Новичок
    Регистрация
    12.03.2010
    Возраст
    53
    Сообщений
    5
    Вес репутации
    175

    По умолчанию Re: Управление рулевыми кнопками при помощи Carduino.

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

  4. #74
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,379
    Вес репутации
    10

    По умолчанию Re: Управление рулевыми кнопками при помощи Carduino.

    Протестируйте новый код, теперь моментальная реакция на нажатие, реализовал функцию удержание, минимальное время удержания 0.5сек , можно увеличить или уменьшить в коде.
    PHP код:
    //http://compcar.ru    
    byte bytes[2] = { 70}; 
    unsigned int res_dt1old_dt1idx;
    unsigned long math_time,old_time,real_time;

    void setup()      
    {     
    Serial.begin(115200); // настроить скорость com порта      
    }      
    void loop()      
    {   
      
    res_dt1 analogRead(5); // прочитать данные АЦП  
      
    delay(30);                      //проверка дребезга  
        
    if(res_dt1 == analogRead(5) )  //если нет дребезга && res_dt1 < 1023
          
    {  
             
    old_time real_time;
             
    math_time 0;
             while(
    math_time 500 && res_dt1 == analogRead(5))
              {
                 
    real_time millis();             //получить реальное время 
                 
    math_time real_time old_time//считаем длительность паузы
              
    }
            if(
    math_time 498 && res_dt1 1023res_dt1 |= 1024;
            
    bytes[0] = res_dt1 255;        // преобразовать в 2-байта  
            
    bytes[1] = (res_dt1 1792) >> 8;
            
    Serial.writebytes,2);         // отправить прочитаное значение компьютеру  
          
    }   


  5. #75
    Пользователь
    Регистрация
    19.12.2009
    Возраст
    52
    Сообщений
    99
    Вес репутации
    196

    По умолчанию Re: Управление рулевыми кнопками при помощи Carduino.

    функция удержание - это значит что короткое одна комбинация кнопок, длительное другая

  6. #76
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,379
    Вес репутации
    10

    По умолчанию Re: Управление рулевыми кнопками при помощи Carduino.

    Все верно

  7. #77
    Пользователь
    Регистрация
    19.12.2009
    Возраст
    52
    Сообщений
    99
    Вес репутации
    196

    По умолчанию Re: Управление рулевыми кнопками при помощи Carduino.

    А как в HotKey настроить с новым кодом( короткое или длительное) , что-то не догоняю
    Последний раз редактировалось FOLV; 13.03.2010 в 17:32.

  8. #78
    Пользователь
    Регистрация
    19.12.2009
    Возраст
    52
    Сообщений
    99
    Вес репутации
    196

    По умолчанию Re: Управление рулевыми кнопками при помощи Carduino.

    Как понял - для начала надо значение времени поставить в math_time = (0,5 - дальше);
    При коротком значение в HotKey например -35 при длительном увеличится на еденицу -36 и руками в инфе править

  9. #79
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,379
    Вес репутации
    10

    По умолчанию Re: Управление рулевыми кнопками при помощи Carduino.

    Позже проверю, а то вчера в торопях выложил и даже не проверил
    Попробуй в конфиге прибавить к твоему значению кнопки 1024
    Последний раз редактировалось Chip; 13.03.2010 в 18:36.

  10. #80
    Пользователь
    Регистрация
    20.02.2009
    Возраст
    50
    Сообщений
    44
    Вес репутации
    197

    По умолчанию Re: Управление рулевыми кнопками при помощи Carduino.

    Цитата Сообщение от Hmelik Посмотреть сообщение
    я в итоге решил переделать на кнопки с резисторных на матричные.
    Не удалось достичь успеха. Пробовал менять время в прошивке.
    Добился что получаю двойное нажатие, с стандартным параметром тоже устойчивость не радует, или нажмёт 1 раз и быстро, или не нажмёт ваще, или выдаст двойное нажатие(т.к. если не сработало продолжаю держать)
    Добавлю свои 5 копеек. Такие же проблемы были, сколько не изгалялся с подбором времени задержки "дребезга" - не удалось добиться полность 100% реакции, как в штатной магнитоле.
    В итоге перенес логику определения какая кнопка нажата полностью в ардуину, т.е. на выходе она выдает в компорт код нажатой кнопки, а не значение из АЦП. Получилось громоздко, зато теперь никаких двойных нажатий или проглатывания нажатой кнопки нет.


    PHP код:

    // Для рулевых кнопок
    // Задержки между нажатиями конкретных кнопок, миллисекунды
    #define KEY_CH_MINUS_DELAY    (200)
    #define KEY_CH_PLUS_DELAY     (200)
    #define KEY_VOL_MINUS_DELAY   (150)
    #define KEY_VOL_PLUS_DELAY    (150)
    #define KEY_MODE_DELAY        (300)

    // Значения кнопок
    #define KEY_CH_MINUS    (445)
    #define KEY_CH_PLUS     (640)
    #define KEY_VOL_MINUS   (90)
    #define KEY_VOL_PLUS    (270)
    #define KEY_MODE        (805)

    // Погрешность при чтении кнопок
    #define KEY_DELTA       (30)

    // Коды кнопок, что отсылаем в порт внешней проге
    #define CH_MINUS    (1)
    #define CH_PLUS     (2)
    #define VOL_MINUS   (3)
    #define VOL_PLUS    (4)
    #define MODE        (5)
    #define NONE        (0)


    unsigned long LastTimeKeyPressed millis();
    int LastKeyPressed NONE;

    void setup()      
    {     
    Serial.begin(57600);
    }      

    void loop()      
    {   
      
    ReadSteering();
      
    delay(50);


    // Читает рулевые кнопки и пишет в порт код нажатой кнопки
    void ReadSteering()      
    {   
      
    unsigned long TimeKeyPressed;
      
    int KeyPressed NONE;
      
    int dt1 analogRead(0);
      
    delay(50); 
      
    int dt2 analogRead(0);
      if (
    abs(dt1-dt2)<=and dt1<900 //если нет дребезга и что-то есть
      

        
    // Регистрируем время нажатия кнопки
        
    TimeKeyPressed millis();

        
    //CH_MINUS    
        
    if ( (dt1-KEY_DELTA <= KEY_CH_MINUS) and (dt1+KEY_DELTA >= KEY_CH_MINUS) )
        {
          if ( (
    LastKeyPressed != CH_MINUS) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_MINUS_DELAY) )
          {
            
    LastKeyPressed CH_MINUS;
            
    KeyPressed CH_MINUS;
            
    LastTimeKeyPressed TimeKeyPressed;
          }  
        }
        
    //CH_PLUS
        
    else if ( (dt1-KEY_DELTA <= KEY_CH_PLUS) and (dt1+KEY_DELTA >=KEY_CH_PLUS) )
        {
          if ( (
    LastKeyPressed != CH_PLUS) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_CH_PLUS_DELAY) )
          {
            
    LastKeyPressed CH_PLUS;
            
    KeyPressed CH_PLUS;
            
    LastTimeKeyPressed TimeKeyPressed;
          }  
        }
        
    //VOL_MINUS
        
    else if ( (dt1-KEY_DELTA <= KEY_VOL_MINUS) and (dt1+KEY_DELTA >=KEY_VOL_MINUS) )
        {
          if ( (
    LastKeyPressed != VOL_MINUS) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_VOL_MINUS_DELAY) )
          {
            
    LastKeyPressed VOL_MINUS;
            
    KeyPressed VOL_MINUS;
            
    LastTimeKeyPressed TimeKeyPressed;
          }  
        }
        
    //VOL_PLUS
        
    else if ( (dt1-KEY_DELTA <= KEY_VOL_PLUS) and (dt1+KEY_DELTA >=KEY_VOL_PLUS) )
        {
          if ( (
    LastKeyPressed != VOL_PLUS) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_VOL_PLUS_DELAY) )
          {
            
    LastKeyPressed VOL_PLUS;
            
    KeyPressed VOL_PLUS;
            
    LastTimeKeyPressed TimeKeyPressed;
          }
        }
        
    //MODE
        
    else if ( (dt1-KEY_DELTA <= KEY_MODE) and (dt1+KEY_DELTA >=KEY_MODE) )
        {
          if ( (
    LastKeyPressed != MODE) or (abs(TimeKeyPressed-LastTimeKeyPressed) >= KEY_MODE_DELAY) )
          {
            
    LastKeyPressed MODE;
            
    KeyPressed MODE;
            
    LastTimeKeyPressed TimeKeyPressed;
          }  
        }
        
        if (
    KeyPressed != NONE)
        {
          
    Serial.print(char(255));
          
    Serial.print(KeyPressed,DEC);
        }  

        
    //Serial.print(dt1,DEC);
        //Serial.print("   ");
        //Serial.println(dt2,DEC);
      
    }   

    Последний раз редактировалось Hamster; 15.03.2010 в 01:33.

Страница 8 из 57 ПерваяПервая ... 23456789101112131418 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •