Помогите запрограммировать Arduino Nano 3.0 with ATMEGA328 под резестивные кнопки на руле под планшет
- Войдите на сайт для отправки комментариев
Пт, 03/10/2014 - 11:35
Имеется штатные кнопки на руле на китайском авто. Хочу установить планшет и связать его с кнопками на руле через Arduino Nano 3.0 with ATMEGA328. считываю сопротивления каждой кнопки, забиваю в скетч и прошиваю. Ничего не происходит. Планшет его не видит,а ноут видит как обычный не прошитый ком порт. Лазал по разным форумам находил похожее, но ничего не помогло. прошу вас помоч мне с этой проблемой. буду очень благодарен..
Имеется штатные кнопки на руле на китайском авто. Хочу установить планшет и связать его с кнопками на руле через Arduino Nano 3.0 with ATMEGA328. считываю сопротивления каждой кнопки, забиваю в скетч и прошиваю. Ничего не происходит. Планшет его не видит,а ноут видит как обычный не прошитый ком порт. Лазал по разным форумам находил похожее, но ничего не помогло. прошу вас помоч мне с этой проблемой. буду очень благодарен..
изучаем слова
USB-OTG
HID-keyboard
выкидываем
планшет
arduino nano
благодарность $$$ вон в ту коробочку
эх кто-бы мне помог
Я вас не понимаю. Я написал что то лишнее?
Я вас не понимаю. Я написал что то лишнее?
вы ничего не написали
не вижу ни схемы ни ссылок
не вижу что вы поиском пользуетесь
http://arduino.ru/forum/proekty/arduino-hid-vedroidkomplektkotik44-shutk...
но вижу что вы основы не знаете
изучаем слова
USB-OTG
HID-keyboard
arduino micro или леонардо тебе нужна))
arduino micro или леонардо тебе нужна))
а может его ведрод просто не USB-OTG
просто тупо не распаяна микруха внутри
да кстати. планшет usb флешки видит?
меня интересует последовательность програмирования. что такое USB-OTG я вкурсе и HID-keyboard тоже. схема тоже у меня есть, только я не понимаю как её сюда выложить.
Посмотрите вот на эту штучку: http://devicter.ru/goods/Iteaduino-Tiny (не реклама)
под винду она может быть запрограмирована как HID клавиатура или мышь, (как делать - есть в стандартных примерах). Работает вроде как без дополнительных драйверов, используется "стандартное HID устройство ввода", так что на планшете должно работать (если планшет USB клавиатуру поддерживает)
+ у нее есть аналоговый вход для чтения резистивных кнопок...
планшеит видит много usb устройст. и в том числе обычную клаву. только вот ардуино он не видит. я думаю что просто не правильно его прошиваю. меня интересует поэтапно и важные пункты прошивки.
Посмотрите вот на эту штучку: http://devicter.ru/goods/Iteaduino-Tiny (не реклама)
под винду она может быть запрограмирована как HID клавиатура или мышь, (как делать - есть в стандартных примерах). Работает вроде как без дополнительных драйверов, используется "стандартное HID устройство ввода", так что на планшете должно работать (если планшет USB клавиатуру поддерживает)
+ у нее есть аналоговый вход для чтения резистивных кнопок...
arduino micro имеет хардварный usb и тоже это все может, даже больше
подключал по такой схеме . скетч закидывал такой
// Для рулевых кнопок // Задержки между нажатиями конкретных кнопок, миллисекунды #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(3); delay(50); int dt2 = analogRead(3); 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; } } //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); } }после прошивки тоже самое. вытаскиваю, вставляю в пк ардуино. всё тоже самое. ЧТО НЕ ТАК ДЕЛАЮ?
http://www.pccar.ru/showthread.php?s=bec0ba5838b7b08b6d42eb30536bbf99&t=...
Копайте в эту сторону. Вам просто надо распознать резистивные кнопки и эмулировать usb клаву которая будет выдавать коды соответств ующие вашим кнопкам.
Посмотрите soft USB.
Удачи.
Во первых вам нужна Aduino micro на чипе ATmega32u4, на atmega328 вы этого не сможете сделать там нет апаратной потдержки HID.
В вторых нужно заменить файлы как сдесь http://pccar.ru/showpost.php?p=277286&postcount=182
эта версия arduino может пркидываться HID устройством (т.е. устройством ввода как клава) когда обьявляешь Keyboard.begin(); в void setup()
вот сдесь видео как это работает на моем устройстве http://www.youtube.com/watch?v=KhQyYie-BcA&list=UUx7dvowsncOHIufjVfnKfHg
Вот мой скетч.
#include <EEPROM.h> long previousMillis = 0; int nexus = 12; //на экранчкик пионер int pioneer = 10; //на экранчкик нексус int bluettoch = 11; //на экранчкик блютус int nexpioner = 6; //пионер слежующая int predpioner = 7; //пионер предидущая int mytetepioner = 5; //пионер приглушение звука int voluppioner = 8; //пионер звук + int voldownpioner = 9; //пионер звук - int nexbluetooch = 2; //блютус следующий int predbluetooch = 3; //блютус предедиудущий int mutebluetooch = 4; //блютус муте int val=0; int analogPin=0; int rulevieknopki; int regim = 1; int muteTap=0; long previousMillisTap=0; long startMillisTap=0; int muteType=0; long ledTime=100; long ledStart=0; boolean ledON=false; unsigned long flag = 0; unsigned long eventTime = 0; unsigned long pauseMillis = 0; void setup() { Keyboard.begin(); Serial.begin(9600); pinMode(12, OUTPUT); pinMode(11, OUTPUT); pinMode(10, OUTPUT); pinMode(9, OUTPUT); pinMode(8, OUTPUT); pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(14, INPUT); // резестивная копка кнопка } void loop() { rulevieknopki=analogRead(analogPin); //Serial.println(EEPROM.read(2)); //Serial.println(EEPROM.read(1)); //Serial.println(rulevieknopki); if(rulevieknopki>350&&rulevieknopki<400)//если кнопка нажата ... { if (millis() - previousMillis >1200) { previousMillis = millis(); val++; } } else { val=0; } if(val>=5) { val=0; regim++; if(regim>3) regim=1; if(regim==1) //пионер { EEPROM.write(2,0); EEPROM.write(1,0); EEPROM.write(0,1); } if(regim==2) //нексу { EEPROM.write(2,0); EEPROM.write(1,1); EEPROM.write(0,0); } if(regim==3) //блютус { EEPROM.write(2,1); EEPROM.write(1,0); EEPROM.write(0,0); } } else if (EEPROM.read(1)==1) analogWrite(pioneer,1000); else { analogWrite(pioneer,0); } if (EEPROM.read(0)==1) analogWrite(nexus,1000); else analogWrite(nexus,0); if (EEPROM.read(2)==1) analogWrite(bluettoch,1000); else analogWrite(bluettoch,0); if (rulevieknopki>330&&rulevieknopki<450) { if (muteTap==0) startMillisTap=millis(); muteTap=1; if (EEPROM.read(0)==1) muteType=1; if (EEPROM.read(1)==1) muteType=2; if (EEPROM.read(2)==1) muteType=3; if ((millis() - previousMillisTap>1200) ) { previousMillisTap = millis(); muteTap++; } } else { if (((muteTap>0)&&((millis()-startMillisTap)<5000))||(ledON)) { switch (muteType) { case 1: if (ledStart==0) { digitalWrite(mytetepioner, HIGH); ledON=true; ledStart=millis(); } else if (millis()-ledStart>ledTime) { ledStart=0; digitalWrite(mytetepioner, LOW); ledON=false; muteTap=0; } break; case 2: if (ledStart==0) { Remote.play_pause(); ledON=true; ledStart=millis(); } else if (millis()-ledStart>ledTime) { ledStart=0; Remote.clear(); ledON=false; muteTap=0; } break; /* case 3: if (ledStart==0) { digitalWrite(mutebluetooch, HIGH); ledON=true; ledStart=millis(); } else if (millis()-ledStart>ledTime) { ledStart=0; digitalWrite(mutebluetooch, LOW); ledON=false; muteTap=0; } break;*/ } } muteTap=0; } ////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////УПРАВЛЕНЕ ПИОНЕР/////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////// if ((rulevieknopki>100&&rulevieknopki<200)&&(EEPROM.read(0)==1)) digitalWrite(nexpioner, HIGH); else digitalWrite (nexpioner, LOW); if ((rulevieknopki>480&&rulevieknopki<580)&&(EEPROM.read(0)==1)) digitalWrite(predpioner, HIGH); else digitalWrite (predpioner, LOW); if (rulevieknopki>700&&rulevieknopki<850)digitalWrite(voluppioner, HIGH); else digitalWrite(voluppioner, LOW); if (rulevieknopki>900)digitalWrite(voldownpioner, HIGH); else digitalWrite (voldownpioner, LOW); ///////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////УПРАВЛЕНИЕ NEXUS/////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////// if(rulevieknopki<=50 && flag == 0) // все кнопки отпущены { eventTime=millis(); } if(millis()-eventTime>10 && millis()-eventTime<499 && rulevieknopki>100&&rulevieknopki<200&&(EEPROM.read(1)==1)) // короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499) { flag = 2; } if(rulevieknopki<=50 && flag == 2) // действие после короткого нажатия кнопки, следующая песня { Remote.next(); flag = 0; delay(10); Remote.clear(); } if(millis()-eventTime>500 && rulevieknopki>100&&rulevieknopki<200 && flag == 2 || rulevieknopki>100&&rulevieknopki<200 && flag == 3&&(EEPROM.read(1)==1)) // удержание кнопки от 500 до ? миллисекунд (изменяется здесь millis()-eventTime>500) { Remote.increase(); // действие после удержание кнопки, увеличение громкости flag = 3; Remote.clear(); delay(100); } if(millis()-eventTime>10 && millis()-eventTime<499 && rulevieknopki>480&&rulevieknopki<580&&(EEPROM.read(1)==1)) // короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499) { flag = 2; } if(rulevieknopki<=50 && flag == 2) // действие после короткого нажатия кнопки, предидущая песня { Remote.previous(); flag = 0; delay(10); Remote.clear(); } if(millis()-eventTime>500 && rulevieknopki>480&&rulevieknopki<580 && flag == 2 || rulevieknopki>480&&rulevieknopki<580 && flag == 3&&(EEPROM.read(1)==1)) // удержание кнопки от 500 до ? миллисекунд (изменяется здесь millis()-eventTime>500) { Remote.decrease(); // действие после удержание кнопки, уменьшение громкости flag = 3; Remote.clear(); delay(100); } if(rulevieknopki<=50 && flag == 3 || rulevieknopki<=50 && flag == 5 || rulevieknopki<=50 && flag == 6) // действие после отпускания кнопки { flag = 0; } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////УПРАВЛЕНИЕ БЛЮТУС/////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// if ((rulevieknopki>330&&rulevieknopki<450)&&(EEPROM.read(2)==1)) digitalWrite(mutebluetooch, HIGH); else digitalWrite (mutebluetooch, LOW); if ((rulevieknopki>100&&rulevieknopki<200)&&(EEPROM.read(2)==1)) digitalWrite(nexbluetooch, HIGH); else digitalWrite (nexbluetooch, LOW); if ((rulevieknopki>480&&rulevieknopki<580)&&(EEPROM.read(2)==1)) digitalWrite(predbluetooch, HIGH); else digitalWrite (predbluetooch, LOW); }Спасибо! А через чего управление включение планшета активировал?
Приобрёл новую плату Leonardo. измерил показание кнопок:
Громкость + 393
громкость - 296
трек + 121
трек - 166
плей.пауза 32
моде 86
помогите написать скетч. если есть такая возможность, чтоб работала экранная клавиатура.