PCCar.ru - Ваш автомобильный компьютер

PCCar.ru - Ваш автомобильный компьютер (http://pccar.ru/index.php)
-   Дополнительные устройства (http://pccar.ru/forumdisplay.php?f=177)
-   -   Резистивные кнопки под андроид (http://pccar.ru/showthread.php?t=18478)

kostyamat 06.05.2017 05:44

Цитата:

Сообщение от blogsylar (Сообщение 387169)
Нужен цифровой потенциометр. А в общем - так

Цитата:

Сообщение от wanix (Сообщение 387175)
спасибо

Там же, в комментариях, были поданы две не плохие идеи.
1) цифровыми выводами ардуино подтягивать нужные резисторы к массе. Если кнопок не много, а ардуино хотя бы Нано, то вполне решаемо.
2) Сделать RC цепочку по аналоговому выходу и формировать нужный ток (а кнопка с резистором именно ток и формирует) с помощью ШИМ модуляции, меняя скважность импульсов. Такое даже на Attiny85 сделать можно, ее хватит. Если использовать выводы Arduino Due DAC0-DAC1, то даже RC цепочка не нужна.
Нужно только высчитать внутреннее сопротивление инфо.линии управления в магнитоле. Для этого нужно включить на этот вход любой известный заранее резистор, на 1кОм например, замерить напряжение на линии, а дальше закон Ома в помощь. Высчитать внутреннее сопротивление, можно сделать макетку и проиграться со скважностью ШИМ, для каждого из номиналов (напряжение для них на шине тоже можно посчитать по Ому).
Пс. RC цепочка это - резистор номиналом чуть меньше минимального, понятного вашей магнитоле, последовательно выходу ардуино + конденсатор 100нФ, за резистором на землю. И почитайте, что найдете про функцию analogWrite(), можно начать читать тут http://arduino.ru/Tutorial/PWM

sandr2010 06.05.2017 09:32

Цитата:

Сообщение от wanix (Сообщение 387160)
Народ, направьте в правильное русло. Есть кнопки на руле резистивные, есть sony MEX-DV1600U у него есть вход для пульта судя по всему такого : https://www.drive2.ru/l/288230376152759568/ так вот у меня возникло желание впендюрить ему родные кнопки руля чтобы он их кушал.
Я это понимаю как: берем ардуину по выше указанным методам читаем кнопки, понимаем кто есть кто, а потом как это скормить соньке ?

Может я что-то недопонял,но зачем вам ардуина если у вас магнитола и так понимает резистивные кнопки руля? Распаиваете кнопки руля как в джойстике на схеме (номиналы указаны,действия тоже). Ардуина нужна больше для андроида или для эмуляции ик пульта.

wanix 24.05.2017 07:16

Цитата:

Сообщение от sandr2010 (Сообщение 387282)
Может я что-то недопонял,но зачем вам ардуина если у вас магнитола и так понимает резистивные кнопки руля? Распаиваете кнопки руля как в джойстике на схеме (номиналы указаны,действия тоже). Ардуина нужна больше для андроида или для эмуляции ик пульта.

Сонька как усилок будет работать, на нее громкость пойдет, остальные на андроид.

sandr2010 24.05.2017 09:59

Возможно это подойдет вам больше : http://pccar.ru/showthread.php?t=24028 - можно пользовать и магнитолу и андроид.

xemulres 25.05.2017 20:50

Здравствуйте. Имеется китайский пульт на руль. Подключил его через Pro Micro. Но вот беда - работает только половина кнопок, меняю key1 и key2 местами - работает вторая половина кнопок. Как сделать чтобы работали все сразу?

blogsylar 26.05.2017 11:19

Цитата:

Сообщение от xemulres (Сообщение 388047)
Здравствуйте. Имеется китайский пульт на руль. Подключил его через Pro Micro. Но вот беда - работает только половина кнопок, меняю key1 и key2 местами - работает вторая половина кнопок. Как сделать чтобы работали все сразу?

Подключить вторую половину кнопок на другой пин, и немного дополнить скетч. Я так думаю.

kostyamat 27.05.2017 20:18

Цитата:

Сообщение от xemulres (Сообщение 388047)
Здравствуйте. Имеется китайский пульт на руль.

а что за пульт? Интересно. Можно на него ссылку?

xemulres 29.05.2017 09:33

Цитата:

Сообщение от kostyamat (Сообщение 388093)
а что за пульт? Интересно. Можно на него ссылку?

Вот такой
https://ru.aliexpress.com/item/Car-s...608.0.0.Zp5GX2

Las42kuz 05.06.2017 20:50

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

dEzZz 09.07.2017 20:17

Кому Joycon EXP нужен - пишите в личку - не пригодился)

Chois 27.07.2017 16:22

Вложений: 3
добрый день!
помогите написать скетч
хочется оставить управление магнитолой и дополнительно ТОЛЬКО переключать треки на планшете (т.е. только 2-е кнопки TR_NEXT, TR_PREW)
МСР 4131 нет в городе, купил МСР4231 (он 2-х канальный)

Nexus 7 12г. прошивка Тимура (зарядка+отг)
Arduino Leonardo
MCP4231 - 2-х канальный цифровой потенциометр (другой не нашел)

Sketch led - скетч который у меня работает
sketch potten - скетч не работает (наверно потому что там нет "byte addressRedLED = B00010000; " выбор канала наверно) https://mysku.ru/blog/ebay/35610.html
sketch nexus - работает (без подключенной магнитолы) уважаемого lti1
в программировании вообще не шарю, помогите пожалуйста!
схема подключения
https://prnt.sc/g0y2a9

Chois 29.07.2017 23:59

вот что у меня получилось (может и коряво, но главное работает)
Код:

#include
// библиотека SPI должна быть в стандартном софте, ну или её можно скачать.

const byte POT = B00010000; //выбор канала потенциометра

// Коды имеющихся на руле кнопок
const int next=6;
const int previous=54;
const int vol_up=140;

int csPin=10; // CS на цифровом потенциометре
int wheelPin=A5; // аналоговый пин, на котором мы считываем сопротивление нажатой на руле кнопки
int i=0;
int prevButton=0;

int r;  //keyboard
unsigned long flag = 0;  //keyboard

void setup() { 
 
  pinMode(csPin, OUTPUT); 
  delay(50);
  SPI.begin();
  delay(50);
 
  SPI.transfer(POT); // команда
  SPI.transfer(0); // значение
  pinMode(wheelPin, INPUT);

  delay(100);
  Keyboard.begin();  //keyboard
}

int getR() { // Эта функция читает сопротивление с кнопок на руле и возвращает код нажатой кнопки, либо 0

  // читаем сопротивление (на самом деле напряжение, конечно) на аналоговом пине
  int r=analogRead(wheelPin);
      //if(r>=release_button - button_release_range && r<=release_button + button_release_range && flag == 0) //keyboard

  if (r>=2 && r<=10) return(next);
  if (r>=50 && r<=60) return(previous);
  if (r>=120 && r<=156) return(vol_up);
}

// ОСНОВНОЙ ЦИКЛ
void loop() {
  int currButton=getR(); // заносим в переменную currButton код нажатой кнопки
  if (currButton!=prevButton) { // если значение поменялось с прошлого раза

    delay(10);
    currButton=getR(); // ждем 10ms и читаем еще раз, чтобы исключить "дребезг" кнопки

    if (currButton!=prevButton) { // если код кнопки точно поменялся с прошлого раза
      //Serial.println(currButton);
      prevButton=currButton;    // сохраняем новое значение в переменную prevButton

      // Выставляем сопротивление на потенциометре, тем самым посылаем команду на магнитолу.
      // Значения сопротивлений даны для Pioneer, для магнитол других марок числа будут другие.
      SPI.transfer(0);
      switch(currButton) {
      case next: digitalWrite(csPin, LOW);
                    SPI.transfer(POT);
                    SPI.transfer(21);
                    digitalWrite(csPin, HIGH);
               
                      Remote.next(); 
                      flag = 0; 
                      delay(10);
                      Remote.clear();
                      break;  // 16k
     
    case previous: digitalWrite(csPin, LOW);
                    SPI.transfer(POT);
                    SPI.transfer(50);
                    digitalWrite(csPin, HIGH);
                   
                      Remote.previous(); 
                      flag = 0; 
                      delay(10); 
                      Remote.clear(); 
                    break;  // 24k
                   
                   
      case vol_up: digitalWrite(csPin, LOW);
                    SPI.transfer(POT);
                    SPI.transfer(14);
                    digitalWrite(csPin, HIGH);
                    break;  // 11k
                   
      default:      digitalWrite(csPin, LOW);
                    SPI.transfer(POT);
                    SPI.transfer(0);
                    digitalWrite(csPin, HIGH);
                    break;
         
    }
  }
  }
    delay(5);
}


Rover 09.09.2017 01:25

Цитата:

Сообщение от lti1 (Сообщение 319975)
Соберу всю информацию по одному из решений в одном месте, у кого есть возможность закрепите ссылку в первом сообщении.
Работает только с Arduino Pro Micro и Arduino Leonardo на чипе ATmega32u4.
Для начала меняем в папке \arduino-1.0.5\hardware\arduino\cores\arduino для IDE 1.0.5 или \arduino-1.6.5-r5\hardware\arduino\avr\cores\arduino для IDE 1.6.5 меняете два файла USBAPI.h, HID.cpp на те, что во вложении этого сообщения, при этом версия ПО Arduino Software IDE должна быть 1.0.5, скачать setup exe, скачать zip ИЛИ 1.6.5, на других не проверял.
После заливаете этот скетч и считайте коды всех кнопок через "монитор порта" Arduino Software (IDE).
PHP код:

int analogPin=0//пин для подключения кнопок
int data;

void setup()
{
analogReference(DEFAULT); // подключение внутреннего напряжение AVCC к выводу AREF (опорное напряжение)
Serial.begin(9600);
}

void loop()
{
data=analogRead(analogPin); //читаем значение нажатой кнопки
Serial.println(data);
delay(1000);


Подключаете кнопки к Arduino по следующим схемам, с подтяжкой к - или к +. Номинал сопротивления ~20 кОм.
Вложение 38555
Потом заливаете этот скетч, только в начале скетча указываете свои значения, то есть вместо 111, 222, 333, 444, 555, 777 указываете значения своих кнопок, а также значение при отпущенных кнопках, в зависимости от схемы подключения будут либо ближе 0 либо ближе к 1023:
PHP код:

//****************** Здесь необходимо указать свои значения *************** 

int analogPin=0// пин для подключения кнопок, по умолчанию A0 

int release_button 1023// значение при отпущенных кнопках 
int button_release_range 50// диапазон значения + - при отпущенных кнопках 
int button_range 5// диапазон значения нажатых кнопок + - 
int time_holding 500// время для удержания кнопок в миллисекундах 
int time_tinkling 30// время исключающее дребезг контактов в миллисекундах 
int vol_up 111// значение кнопки увеличить громкость 
int vol_down 222// значение кнопки уменьшить громкость 
int alt_tab 333// значение кнопки которая будет работать как Alt + Tab 
int next 444// значение кнопки которая будет работать как Next при коротком нажатии и Fast Forward при удержании 
int previous 555// значение кнопки которая будет работать как Previous при коротком нажатии и Rewind при удержании 
int play_pause 777// значение кнопки которая будет работать как Play/Pause при коротком нажатии и Mute при удержании 

//************************************************************************** 

int data;  
unsigned long flag 0;  
unsigned long eventTime 0;  
unsigned long pauseMillis 0

void setup()  

analogReference(DEFAULT); // подключение внутреннего напряжение AVCC к выводу AREF (опорное напряжение) 
Keyboard.begin();  
}  

void loop()  
{  
data=analogRead(analogPin);  
if(
data>=release_button button_release_range && data<=release_button button_release_range && flag == 0)  
{  
eventTime=millis();  
}  

//********************** Громкость ************************************ 

if(millis()-eventTime<time_tinkling && millis()-eventTime<time_holding-&& data >= vol_up button_range && data <= vol_up button_range && flag == 0
{   
Remote.increase();  
flag 5;  
delay(10);  
Remote.clear();  
}  

if(
millis()-eventTime>time_holding && data >= vol_up button_range && data <= vol_up button_range && flag == || data >= vol_up button_range && data <= vol_up button_range && flag && flag == 3)  
{   
Remote.increase(); 
flag 3;  
Remote.clear();  
delay(100);  
}  

if(
millis()-eventTime<time_tinkling && millis()-eventTime<time_holding-&& data >= vol_down button_range && data <= vol_down button_range && flag == 0)  
{   
Remote.decrease();  
flag 6;  
delay(10);  
Remote.clear();  
}  

if(
millis()-eventTime>time_holding && data >= vol_down button_range && data <= vol_down button_range && flag == || data >= vol_down button_range && data <= vol_down button_range && flag == 3)  
{   
Remote.decrease();  
flag 3;  
Remote.clear();  
delay(100);  
}  

//********************** AltTab + Ещё что то ************************************   

if(millis()-eventTime<time_tinkling && millis()-eventTime<time_holding-&& data >= alt_tab button_range && data <= alt_tab button_range)  
{   
flag 1;  
}  

if(
data>=release_button button_release_range && data<=release_button button_release_range && flag == && pauseMillis == 0)  
{  
Keyboard.press(KEY_LEFT_ALT);  
Keyboard.press(KEY_TAB);  
Keyboard.release(KEY_TAB);  
Keyboard.press(KEY_TAB);  
Keyboard.release(KEY_TAB);  
flag 0;  
pauseMillis millis();  
}  

if(
data>=release_button button_release_range && data<=release_button button_release_range && flag == && pauseMillis != 0)  
{  
Keyboard.press(KEY_TAB);  
Keyboard.release(KEY_TAB);  
flag 0;  
pauseMillis millis();  
}  

if(
pauseMillis && millis()-pauseMillis >= 800 && data>=release_button button_release_range && data<=release_button button_release_range)  
{  
flag 0;  
pauseMillis 0;  
Keyboard.releaseAll();  
}  

if(
millis()-eventTime>time_holding && data >= alt_tab button_range && data <= alt_tab button_range && flag == 1)  
{   
flag 0;  
}  
//********************** Next и Fast Forward ************************************   

if(millis()-eventTime<time_tinkling && millis()-eventTime<time_holding-&& data >= next button_range && data <= next button_range)  
{   
flag 2;  
}  

if(
data>=release_button button_release_range && data<=release_button button_release_range && flag == 2)  
{  
Remote.next();  
flag 0;  
delay(10);  
Remote.clear();  
}  

if(
millis()-eventTime>time_holding && data >= next button_range && data <= next button_range && flag == || data >= next button_range && data <= next button_range && flag == 3)  
{   
Remote.forward();  
flag 3;  
Remote.clear();  
delay(100);  
}  
//********************** Previous и Rewind ************************************   

if(millis()-eventTime<time_tinkling && millis()-eventTime<time_holding-&& data >= previous button_range && data <= previous button_range)  
{   
flag 4;  
}  

if(
data>=release_button button_release_range && data<=release_button button_release_range && flag == 4)  
{  
Remote.previous();  
flag 0;  
delay(10);  
Remote.clear();  
}  

if(
millis()-eventTime>time_holding && data >= previous button_range && data <= previous button_range && flag == || data >= previous button_range && data <= previous button_range && flag == 3)  
{   
Remote.rewind(); 
flag 3;  
Remote.clear();  
delay(100);  
}  

//********************** Play/pause + Mute ************************************   

if(millis()-eventTime<time_tinkling && millis()-eventTime<time_holding-&& data >= play_pause button_range && data <= play_pause button_range)  
{   
flag 7;  
}  

if(
data>=release_button button_release_range && data<=release_button button_release_range && flag == 7)  
{  
Remote.play_pause();   
flag 0;  
delay(10);  
Remote.clear();  
}  

if(
millis()-eventTime>time_holding && data >= play_pause button_range && data <= play_pause button_range && flag == 7)  
{   
Remote.mute(); 
flag 0
delay(10); 
Remote.clear();  
}  

if(
data>=release_button button_release_range && data<=release_button button_release_range && flag == || data>=release_button button_release_range && data<=release_button button_release_range && flag == || data>=release_button button_release_range && data<=release_button button_release_range && flag == 6)  
{  
flag 0;  
}   


Алгоритм работы такой: короткое нажатие, более 10 (int time_tinkling = 10; можно менять в скетче) и менее 500 миллисекунд (int time_holding = 500; можно менять в скетче) - Play/pause; длинное, более 500 миллисекунд (int time_holding = 500; можно менять в скетче) - Mute.
Тоже самое с Next и Fast Forward, Previous и Rewind. При удержании увеличения и уменьшения громкости, увеличивает или уменьшает громкость на 10 делений в секунду, а при коротком нажатии, менее 500 миллисекунд - увеличивает или уменьшает громкость на 1 деление.
Alt + Tab, при первом нажатии эмулирует Alt и два раза Tab, то есть переходит предыдущему открытому приложении и в течении 0,8 секунды удерживает Alt, а повторные нажатия на кнопку в течении этого времени эмулируют только Tab. На удержание ни чего не назначен, можно добавить при необходимости.




У меня возникла проблемма, может кто сталкивался.
Скетч этот, ардуина про микро. Всё прекрасно шьётся и работает под Андроидом, Виндой, но вот под WIN 10 странный трабл - если ардуина сидит в USB порту (не важно, ХАБ или на матери), то после перезагрузки или включения компа она как ХИД устройство не реагирует на нажатие клавиш, надо переткнуть, тогда всё норм. Причём СОМ порт виден без всяких траблов. Повторю, это только под десяткой, под семёркой или андроидом всё норм.
Что это может быть?
Как бороться?- электрически перезагружать USB не очень кошерно.
Может быть внедрить функцию "reset" в данный скетч? Например при длительном нажатии AltTab сделать перзагрузку ардуины?
Как это прописать в скетче?

lti1 09.09.2017 11:07

Вложений: 1
Цитата:

Сообщение от Rover (Сообщение 392030)
У меня возникла проблемма, может кто сталкивался.
Скетч этот, ардуина про микро. Всё прекрасно шьётся и работает под Андроидом, Виндой, но вот под WIN 10 странный трабл - если ардуина сидит в USB порту (не важно, ХАБ или на матери), то после перезагрузки или включения компа она как ХИД устройство не реагирует на нажатие клавиш, надо переткнуть, тогда всё норм. Причём СОМ порт виден без всяких траблов. Повторю, это только под десяткой, под семёркой или андроидом всё норм.
Что это может быть?
Как бороться?- электрически перезагружать USB не очень кошерно.
Может быть внедрить функцию "reset" в данный скетч? Например при длительном нажатии AltTab сделать перзагрузку ардуины?
Как это прописать в скетче?

В таком случае правильнее задействовать вывод VBUS, то есть подавать на него логическую единицу после загрузки винды.
После выключения компа USB порт обесточивается? Можно попробовать добавить задержку после подачи питания на ардуино, в setup().
PHP код:

void setup()  
{
delay(30000); // задержка 30 секунд
analogReference(DEFAULT); // подключение внутреннего напряжение AVCC к выводу AREF (опорное напряжение) 
Keyboard.begin();  



Rover 09.09.2017 13:45

Цитата:

Сообщение от lti1 (Сообщение 392035)
В таком случае правильнее задействовать вывод VBUS, то есть подавать на него логическую единицу после загрузки винды.
После выключения компа USB порт обесточивается? Можно попробовать добавить задержку после подачи питания на ардуино, в setup().
PHP код:

void setup()  
{
delay(30000); // задержка 30 секунд
analogReference(DEFAULT); // подключение внутреннего напряжение AVCC к выводу AREF (опорное напряжение) 
Keyboard.begin();  



Увы, это не помогло:dntknw:
Загрузка с нуля - не реагирует на нажатие как ХИД. Передёрнул (в хорошем смысле :big:) через 30 секунд начинает реагировать.
На двух машинах так -на одной WIN10 64 на другой WIN10 32, совершенно разные аппараты, так что дело не в железе.

lti1 09.09.2017 20:08

Цитата:

Сообщение от Rover (Сообщение 392039)
Увы, это не помогло:dntknw:
Загрузка с нуля - не реагирует на нажатие как ХИД. Передёрнул (в хорошем смысле :big:) через 30 секунд начинает реагировать.
На двух машинах так -на одной WIN10 64 на другой WIN10 32, совершенно разные аппараты, так что дело не в железе.

До Vbus на китайской pro micro не добраться, под чипом разводка, я проверил.
Тогда пробуйте первый способ описанный здесь, второй, программный способ не заработал у меня на pro micro.

Rover 10.09.2017 17:50

Цитата:

Сообщение от lti1 (Сообщение 392048)
До Vbus на китайской pro micro не добраться, под чипом разводка, я проверил.
Тогда пробуйте первый способ описанный здесь, второй, программный способ не заработал у меня на pro micro.

И у меня не заработал:no2:

А как скетч поправить, чтобы при длительном нажатии кнопки, эмулирующем AltTab вызвать RESET ардуины?

oleg707 10.09.2017 18:40

Цитата:

Сообщение от Rover (Сообщение 392068)
И у меня не заработал:no2:

А как скетч поправить, чтобы при длительном нажатии кнопки, эмулирующем AltTab вызвать RESET ардуины?

а если ватчдогом попробовать воспользоваться? Выставить ватчдог на 250-500 мс, сообытие - делай(1000) - ресет. Только стандартный загрузчик не поддерживает его вроде.

Rover 10.09.2017 20:20

Цитата:

Сообщение от oleg707 (Сообщение 392069)
а если ватчдогом попробовать воспользоваться? Выставить ватчдог на 250-500 мс, сообытие - делай(1000) - ресет. Только стандартный загрузчик не поддерживает его вроде.

Вот какая ещё фигня - ватчдог не получит сигнал тревоги, ардуина определяется вполне корректно, единственное - не даёт компу коды HID устройства. Почему это происходит, я не понимаю.

Мониторинг СОМ порта тоже работает всегда и без проблем.
Поэтому на данный момент мне проще кнопкой на руле (длительное нажатие) перезагрузить ардуину.
В написании скетчей не силён, вот и стуканул о помощи.

oleg707 10.09.2017 20:32

Цитата:

Сообщение от Rover (Сообщение 392073)
Вот какая ещё фигня - ватчдог не получит сигнал тревоги, ардуина определяется вполне корректно, единственное - не даёт компу коды HID устройства. Почему это происходит, я не понимаю.

Мониторинг СОМ порта тоже работает всегда и без проблем.
Поэтому на данный момент мне проще кнопкой на руле (длительное нажатие) перезагрузить ардуину.
В написании скетчей не силён, вот и стуканул о помощи.

если ты сделаешь команду delay(10000); то ватчдог вроде должен сработать. Уже не помню свои опыты.
https://geektimes.ru/post/255800/

lti1 10.09.2017 20:41

Цитата:

Сообщение от Rover (Сообщение 392068)
А как скетч поправить, чтобы при длительном нажатии кнопки, эмулирующем AltTab вызвать RESET ардуины?

Вначале нужно впаять перемычке между входом RST и цифровым входом/выходом, например 3-им.
В самом начале setup добавляете digitalWrite(3, HIGH);, вот так:
PHP код:

void setup()

digitalWrite(3HIGH);
analogReference(DEFAULT); // подключение внутреннего напряжение AVCC к выводу AREF (опорное напряжение)  
Keyboard.begin();   


далее добавляем digitalWrite(3, LOW); на удержание Alt+Tab:
PHP код:

//********************** AltTab + Ещё что то ************************************   

if(millis()-eventTime<time_tinkling && millis()-eventTime<time_holding-&& data >= alt_tab button_range && data <= alt_tab button_range)  
{   
flag 1;  
}  

if(
data>=release_button button_release_range && data<=release_button button_release_range && flag == && pauseMillis == 0)  
{  
Keyboard.press(KEY_LEFT_ALT);  
Keyboard.press(KEY_TAB);  
Keyboard.release(KEY_TAB);  
Keyboard.press(KEY_TAB);  
Keyboard.release(KEY_TAB);  
flag 0;  
pauseMillis millis();  
}  

if(
data>=release_button button_release_range && data<=release_button button_release_range && flag == && pauseMillis != 0)  
{  
Keyboard.press(KEY_TAB);  
Keyboard.release(KEY_TAB);  
flag 0;  
pauseMillis millis();  
}  

if(
pauseMillis && millis()-pauseMillis >= 800 && data>=release_button button_release_range && data<=release_button button_release_range)  
{  
flag 0;  
pauseMillis 0;  
Keyboard.releaseAll();  
}  

if(
millis()-eventTime>time_holding && data >= alt_tab button_range && data <= alt_tab button_range && flag == 1)  
{  
digitalWrite(3LOW);
//flag = 0;  


Но всё это, какой-то кривой "костыль".
Цитата:

Сообщение от oleg707 (Сообщение 392075)
если ты сделаешь команду delay(10000); то ватчдог вроде должен сработать. Уже не помню свои опыты.
https://geektimes.ru/post/255800/

Ардуина не зависает, а просто не определяется 10-ой виндой.

Rover 12.09.2017 21:21

[QUOTE=lti1;392076]
Но всё это, какой-то кривой "костыль".

Кривой. Но эта поблема с ардуиной и вин 10 не только у меня:
http://arduino.ru/forum/apparatnye-v...comment-133389
Вот вроде бы решение:
https://github.com/arduino/Arduino/issues/3611

возможно ли его применить к нашему конкретному случаю?

Rover 13.09.2017 17:59

lti1, я пока временно прописал перезагрузку вместо Mute

//********************** Play/pause + Mute ************************************

if(millis()-time_tinkling && millis()-eventTime= play_pause - button_range && data <= play_pause + button_range)
{
flag = 7;
}

if(data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 7)
{
Remote.play_pause();
flag = 0;
delay(10);
Remote.clear();
}

if(millis()-eventTime>time_holding && data >= play_pause - button_range && data <= play_pause + button_range && flag == 7)
{
digitalWrite(3, HIGH);
}


if(data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 3 || data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 5 || data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 6)
{
flag = 0;
}





Работает :) А можно дополнить AltTab длинным нажатием , сохранив сам AltTab?
А то делаю, как прописали - ничего не выходит :( ,а мне этой кнопкой пользоваться удобнее

lti1 13.09.2017 22:28

Rover, забыл уже свой код, так много лет прошло :).
Подправил своё предыдущее сообщение.
Вот так должно быть:
PHP код:

if(millis()-eventTime>time_holding && data >= alt_tab button_range && data <= alt_tab button_range && flag == 1)   
{   
digitalWrite(3LOW); 
//flag = 0;   



pine 21.09.2017 21:04

Я тут немножко полностью перелопатил код для адаптера кнопок. Используется все та же библиотека Tablet, но структура кода больше похожа на классическую реализацию конечного автомата. Да, так длиннее, но как по мне - это более читабельно, чем непонятные числовые флаги :) Кучка switch-case в функциях состояний - для единообразия. Чуть позже перепишу в типовые функции onPress, onRelease, onHold.

Общий GitHub репозиторий тут

Конкретно исходник скетча тут

Алгоритм работы
- состояние кнопок опрашивается каждые 50 мс
- исходное состояние конечного автомата - NOBUTTON
- если нажали какую-то кнопку, то переходим в состояние соответствующее этой кнопке (см функцию noButton() )
- каждая функция типа noButton(), prev(), next() и т.п. - состояние, параметр buttonState - переход в новое состояние

Как работает с точки зрения пользователя
- если нажали и отпустили кнопки NEXT или PREV быстрее чем 250 мс - переключились между треками
- если держим PREV или NEXT - каждые 250 мс перематываем
- громкость увеличивается или уменьшается каждые 250 мс
- Play/Pause нажимается при отпускании кнопки Play/Pause (для устранения ложных срабатываний)

Alt-Tab и прочее не реализовано ввиду ненужности лично мне, но пулл-реквесты принимаются.

Antoxa 14.10.2017 17:42

Создал аналогичную тему, в данной тебе постараемся разобрать как подключить резистивную клавиатуру через Bluetooth. Сам пока не силен в данном вопросе, поэтому знатоков приглашаю дать мастер класс.
http://pccar.ru/showthread.php?p=393326#post393326

Antoxa 31.10.2017 01:36

Цитата:

Сообщение от Antoxa (Сообщение 393349)
Создал аналогичную тему, в данной тебе постараемся разобрать как подключить резистивную клавиатуру через Bluetooth. Сам пока не силен в данном вопросе, поэтому знатоков приглашаю дать мастер класс.
http://pccar.ru/showthread.php?p=393326#post393326

Ребят помогите пожалуйста, в ардуинках не силен, но сей девайс собрать очень хочется.

DizzJK 20.12.2017 22:18

кто нибудь windows 10 использует? побороли отвал кнопок после перезагрузки?

Nasrok 28.02.2018 19:04

Коллеги, подскажите, имею вот такую клавиатуру
https://3.downloader.disk.yandex.ru/...&size=1280x815
Подключается к планшету как клавиатура и значения клавиш соответствующие. При отключении NumLock, пререходит в режим стрелок.
Я правильно понял, после прочтения 50 страниц, что для того чтобы полностью раскрыть ее функционал (запуск приложений, альттаб, Home? громкость и т.д., мне нужно подключать ее к ардуино, и уже ардуино к планшету?

Или ещё читать? :)

lti1 28.02.2018 22:33

Цитата:

Сообщение от Nasrok (Сообщение 399772)
Коллеги, подскажите, имею вот такую клавиатуру

Подключается к планшету как клавиатура и значения клавиш соответствующие. При отключении NumLock, пререходит в режим стрелок.
Я правильно понял, после прочтения 50 страниц, что для того чтобы полностью раскрыть ее функционал (запуск приложений, альттаб, Home? громкость и т.д., мне нужно подключать ее к ардуино, и уже ардуино к планшету?

Или ещё читать? :)

Не правильно.
http://pccar.ru/showthread.php?p=319975#post319975

svoboda120 15.03.2018 20:38

Доброго времени суток. Нужна помощь-разъяснение знатоков Arduino.
В автомобиле установлен вот такой джойстик.
http://images.vfl.ru/ii/1521131345/a...20970760_s.jpg
На нем имеется 5 кнопок и колесико, которое бесконечно вращается вперед и назад. С кнопками все понятно, они назначены и работают. Вопрос по колесику. Возможно ли на его прокрутку вперед и назад назначить действие листания рабочих столов. Т.е. на планшете несколько рабочих столов, которые хотелось бы переключать колесиком по аналогии свайпа пальцем по экрану вправо или влево или как если бы зажали левую кнопку мыши и сделали движение вправо или влево, тем самым перевели планшет на следующий или предыдущий рабочий стол?
P.S. Джойстик подключаю через Arduino Leonardo.

Jeni_ 15.08.2018 13:39

Доброго времени суток. Нужна помощь.
В програмировании я полный ноль.
Помогите пожалуйста, сделать скетч на два входа А0 и А1.
на А0 - привязать кнопки play, следующий трек, предыдущий
на А1 привязать кнопку back, длительное нажатие, alt tab
спасибо!!!

НСО154 15.08.2018 14:29

Подробней объясни что хочешь получить в итоге?

Vladget 15.08.2018 14:36

Цитата:

Сообщение от Jeni_ (Сообщение 404794)
Доброго времени суток. Нужна помощь.
В програмировании я полный ноль.
Помогите пожалуйста, сделать скетч на два входа А0 и А1.
на А0 - привязать кнопки play, следующий трек, предыдущий
на А1 привязать кнопку back, длительное нажатие, alt tab
спасибо!!!

да ужж .. интересно как другим понять к чему и куда?

Jeni_ 15.08.2018 15:47

Цитата:

Сообщение от Vladget (Сообщение 404797)
да ужж .. интересно как другим понять к чему и куда?

А что непонятно ?

Vladget 15.08.2018 15:52

"В програММировании я полный ноль. "

Если все понятно .. то жди .

Лучше бы ты написал простым языком что и от чего (что имеешь в натуре?) хочешь получить

Jeni_ 15.08.2018 17:03

Цитата:

Сообщение от Vladget (Сообщение 404800)
"В програММировании я полный ноль. "

Если все понятно .. то жди .

Лучше бы ты написал простым языком что и от чего (что имеешь в натуре?) хочешь получить

Есть гу pioneer, хочу подключить к tv-box кнопки руля.
К гу приходят три провода, один условно земля, второй идет на кнопки mode, enter, next ,Previous.
на третий провод приходит vol_up, vol_down, back.

Vladget 15.08.2018 17:55

Ну уже ближе, Осталось объяснить как связан пионер с тв-боксом (еще неплохо бы определиться с марками как пионера так и тв бокса), и еще ты кнопки с пионера уберешь и подключишь к тв боксу или они (кнопки) должны и пионером управлять и тв боксом?

может тебе надо к юрию с его адаптером

НСО154 15.08.2018 20:47

Тебе нужен один вход и несколько выходов Arduino.
Вход будет-считывать, , выходы-реагировать.
А что бы написать скетч, нужно понимать принцип по-которому хочешь организовать работу устройств и напряжение кнопок, а что бы знать напряжение кнопок, нужно знать модель бокса и пионера, что бы посмотреть по схеме.
ПС:
А вот так заходить на форум, как ты зашёл...мягко говоря-не совсем уважительно к форумчанин и не красиво)
Удачи тебе в твоих начинаниях)
ПС:
Ещё, зайди сюда ознакомиться, кстати, код рабочий, останется только значения входного поменять под свои хотелки.
Реле ставить не обязательно, можно замыкать на землю, токи небольшие.

Vladget 15.08.2018 21:09

А там разве напряжения? там же вроде сопротивление относительно массы


Часовой пояс GMT +4, время: 13:14.

Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot