Показано с 1 по 4 из 4
  1. #1
    Новичок
    Регистрация
    28.11.2011
    Возраст
    51
    Сообщений
    9
    Вес репутации
    155

    По умолчанию Iteaduino Tiny (ATtiny 85)

    Вот здесь прикупил http://devicter.ru/goods/Iteaduino-Tiny. Написал скетч для чтения рулевых кнопок. Iteaduino Tiny (ATtiny 85) прикидывается в системе УСБ клавиатурой и шлет нажатия кнопок. Все работает пока не перезагрузишь комп. После перезагрузки в системе "Неизвестное устройство". Выдернешь из разъема и снова воткнешь, появляется клавиатура и все снова хорошо. Как бы это победить?

    вот скетч, за основу взял уже присутствующий в сети.

    #include "DigiKeyboard.h"
    // Для рулевых кнопок
    // Задержки между нажатиями конкретных кнопок, миллисекунды
    #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 (558)
    #define KEY_CH_PLUS (640) //net takoi
    #define KEY_VOL_MINUS (58)
    #define KEY_VOL_PLUS (295)
    #define KEY_MODE (782)

    // Погрешность при чтении кнопок
    #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() {
    // don’t need to set anything up to use DigiKeyboard
    pinMode(1, INPUT); // Make sure IR pin is set as input
    //pinMode(1, OUTPUT);

    }

    void loop() {
    DigiKeyboard.update();
    ReadSteering();
    delay(50);


    } // loop end



    // digitalWrite(1, HIGH);
    // delay(1000); // wait for a second
    // turn the LED off by making the voltage LOW
    // digitalWrite(1, LOW);
    // delay(1000);




    // Читает рулевые кнопки и пишет в порт код нажатой кнопки
    void ReadSteering()
    {
    unsigned long TimeKeyPressed;
    int KeyPressed = NONE;
    int dt1 = analogRead(1);
    delay(50);
    int dt2 = analogRead(1);

    // DigiKeyboard.print(dt2);

    if (abs(dt1-dt2)<=5 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;
    DigiKeyboard.sendKeyStroke(KEY_F8);
    }
    }
    //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;
    DigiKeyboard.sendKeyStroke(KEY_C);
    }
    }
    //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;
    DigiKeyboard.sendKeyStroke(KEY_F6);
    }
    }
    //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;
    DigiKeyboard.sendKeyStroke(KEY_F5);
    }
    }
    //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;
    DigiKeyboard.sendKeyStroke(KEY_F7);
    }
    }

    // if (KeyPressed != NONE)
    // {
    // Serial.print(char(255));
    // Serial.print(KeyPressed,DEC);
    // DigiKeyboard.sendKeyStroke(KEY_E);

    // }

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

  2. #2
    Новичок
    Регистрация
    28.11.2011
    Возраст
    51
    Сообщений
    9
    Вес репутации
    155

    По умолчанию Re: Iteaduino Tiny (ATtiny 85)

    Победил. Все работает надо было поглубже в библиотеки залезть.

  3. #3
    Новичок
    Регистрация
    14.06.2014
    Сообщений
    1
    Вес репутации
    0

    По умолчанию Re: Iteaduino Tiny (ATtiny 85)

    Доброе время суток.
    Как победили сей бок? Есть небольшое устройство но симптомы те же.
    http://blog.zakkemble.co.uk/cpu-usage-leds/
    Буду признателен за помощь.

  4. #4
    Новичок
    Регистрация
    28.11.2011
    Возраст
    51
    Сообщений
    9
    Вес репутации
    155

    По умолчанию Re: Iteaduino Tiny (ATtiny 85)

    Сначала полез в библиотеки поставил значения, соответствующие моему устройству. А основное это временнЫе параметры в скетче. На разных компах по разному себя ведет устройство. Подобрал значения для компа в котором мне надо чтобы работало.

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

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

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

Ваши права

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