Переназначить кнопки на подрулевом переключателе.
- Войдите на сайт для отправки комментариев
Пнд, 25/02/2019 - 17:55
Добрый день господа.
В машине есть мафон JVC Chameleon KD-LX555R и подрулевой переключатель штатной музыки как на фото.

Хотелось бы управлять мафоном с помощью подрулевого переключателя. На ютубе я нашел ролик где человек с помощью ардуино заставляет работать именно такой джой как у меня и магнитолу jvc. На странице с видео он оставил ссылки на схему и прошивку. Все это я закинул на яндекс диск
Так же на просторах интернета нашел форум где люди пытаются подключить свою магнитолу jvc к разного рода пультам.
Хотелось бы попросить местных умельцев переназначить в прошивке кнопку которая на торце (по умолчанию в прошивке пауза / смена источника данных) на ATT — приглушение звука / выключение, включение магнитолы при зажатии клавиши. Ну и если получиться при зажатии клавиш след. трек/пред. трек чтоб выполнялась перемотка песни.
В общем буду признателен если кто-то поможет решить данную проблему.
Вы ошиблись разделом. Раздел для заказов работы здесь. Запостите туда.
Понял. Но может модератор перенесет, я даже кнопку редактировать не наблюдаю.
Просто, запостите там. А здесь я удалю.
Просто, запостите там. А здесь я удалю.
Евгений, уже перетащил.
Р е а л и з у е м о - maslachenko767@mail.ru , консультации, подбор компонентов бесплатно, гарантии
Реализовывал подобное.
kakmycmail#@#gmail.com
https://youtu.be/0S2v6wr5Uh8
На этом форуме, стр.3 есть видео где человек реализовал перемотку зажатием перемотки. Его код.
https://www.youtube.com/watch?v=fk73SCOE8qU
Там же есть человек который выложил содержимое скетча в котором присутствуют строки интересующие меня (я так думаю). Пропишите их куда нужно
#define MUTE2 0x0e//0x0D// - Mute/Unmute (and Power OFF with "press and hold" - see below)
#define SEARCHFORW 0x12// - Seach + / Track + (and Manual Tune + / Fast fwd with "press and hold")
#define SEARCHBACK 0x13// - Seach - / Track - (and Manual Tune - / Fast rwd with "press and hold")
Его код:
int PINO = 8; // Digital IO pin connected to base of transistor int Length = 537; // Length in Microseconds int DebugOn = 0; #define POWERNOFF 0x00 #define VOLUP 0x04 #define VOLDOWN 0x05 #define MUTE 0x06 #define SOURCE 0x08 #define EQUALIZER 0x0d///0x0C #define MUTE2 0x0e//0x0D// - Mute/Unmute (and Power OFF with "press and hold" - see below) #define SEARCHFORW 0x12// - Seach + / Track + (and Manual Tune + / Fast fwd with "press and hold") #define SEARCHBACK 0x13// - Seach - / Track - (and Manual Tune - / Fast rwd with "press and hold") #define BANDFORW 0x14// - Band cycle / Folder + //programs #define BANDBACK 0x15// - Band cycle / Folder + //programs #define PROGR 0x15// - Program 1-6 cycle / Folder -//programs //#define UNKNOWN 0x16// - Sel cycle (it cycles between Fader/Balance/Loudness/Subwoofer out level/Volume gain for the current source) #define GREENPIN 5 #define BLUEPIN 3 #define YELLOWPIN 6 #define BROWNPIN 7 #define REDPIN 4 #define BLACKPIN 2 #define OUT_PINS 3 unsigned char out_pins[OUT_PINS]={ GREENPIN,BLUEPIN,YELLOWPIN}; void setup() { pinMode(PINO, OUTPUT); digitalWrite(PINO, LOW); // Make PIN low to shut off transistor Serial.begin(115200); Serial.println("Enter 1 to Go"); pinMode(GREENPIN, OUTPUT); pinMode(BLUEPIN, OUTPUT); pinMode(YELLOWPIN, OUTPUT); pinMode(BROWNPIN, INPUT_PULLUP); pinMode(REDPIN, INPUT_PULLUP); pinMode(BLACKPIN, INPUT_PULLUP); } unsigned char GetJoystic(void){ static unsigned char stage = 0; static unsigned char scroll_stored; unsigned char tmp,i; if (++stage > (OUT_PINS-1)) stage=0; for (i=0;i<(OUT_PINS);i++) if (i==stage){ digitalWrite(out_pins[i], LOW); } else{ digitalWrite(out_pins[i], HIGH); } delay(10); tmp = digitalRead(BROWNPIN); if (!tmp){ if (stage != scroll_stored){ char scrl = stage-scroll_stored; scroll_stored = stage; if ((scrl == 1) ||(scrl==-2)) { Serial.println("Scroll-"); return SEARCHFORW; }else{ Serial.println("Scroll+"); return SEARCHBACK; } } } tmp = digitalRead(REDPIN); if (!tmp){ switch(stage){ case 0: Serial.println("Select"); return SOURCE; case 1: Serial.println("Vol+"); return VOLUP; case 2: Serial.println("Vol-"); return VOLDOWN; } } tmp = digitalRead(BLACKPIN); if (!tmp){ switch(stage){ case 0: Serial.println("Source-"); return BANDFORW; case 1: Serial.println("Mute"); return MUTE2; case 2: Serial.println("Source+"); return BANDBACK; } } return 0; } void loop() { unsigned char Key = GetJoystic(); static unsigned char code = 0; if (Key){ Serial.print("Key Serial.println(Key,HEX); JVCSendCommand(Key); delay(2); JVCSendCommand(Key); delay(20); } if (Serial.available() > 0) { char inp=Serial.read(); Serial.print("Received Serial.println(inp, DEC); switch (inp){ case '1': code--; break; case '2': code++; break; case '3': JVCSendCommand(code); break; } } } // end of loop void JVCSendCode(unsigned char code){ unsigned char i,tmp=1; for (i=0;i<sizeof(code)*8-1;i++){//7bits if (code & tmp) bONE(); else bZERO(); tmp = tmp << 1; } } void JVCSendCommand(unsigned char code){ Preamble(); JVCSendCode((unsigned char)code); Postamble(); } // Wire signals to be generated for a '1' bit void bONE() { // Send a binary ONE over the line if (DebugOn == 1) { Serial.print(" 1 "); } digitalWrite(PINO, HIGH); // Pull 3.5mm TIP low delayMicroseconds(Length); // for 537us digitalWrite(PINO, LOW); // Allow 3.5mm TIP to go high delayMicroseconds(Length * 3); // for 537 * 3 = 1611us } // Wire signals to be generated for a '0' bit void bZERO() { // Send a binary ZERO over the line if (DebugOn == 1) { Serial.print(" 0 "); } digitalWrite(PINO, HIGH); // Pull 3.5mm TIP low delayMicroseconds(Length); // for 537us digitalWrite(PINO, LOW); // Allow 3.5mm TIP to go high delayMicroseconds(Length); // for 537us } // Wire signals to be generated for a start of signal to a JVC void Preamble() { if (DebugOn == 1) { Serial.println(" "); Serial.print(" AGC "); } digitalWrite(PINO, LOW); // Not sure what this does delayMicroseconds(Length * 1); digitalWrite(PINO, HIGH); // AGC delayMicroseconds(Length * 16); digitalWrite(PINO, LOW); // AGC delayMicroseconds(Length * 8); bONE(); // 1 Start Bit JVCSendCode(0x47); } // Wire signals to be generated for a end of signal void Postamble() { if (DebugOn == 1) { Serial.print(" STOP "); } bONE(); bONE(); // 2 stop bits } P.S. This JVC has not 3.5mm jack inpuА это содержимое скетча который я выкладывал в первом сообщении:
#include "Arduino.h" #include "SoftwareSerial.h" // Define commands #define POWERNOFF 0x0A #define VOLUP 0x04 #define VOLDOWN 0x05 #define SOURCE 0x08 #define EQUALIZER 0x0D #define MUTE 0x0E #define NEXTTRACK 0x12 #define PREVTRACK 0x13 #define FOLDERFORW 0x14 #define FOLDERBACK 0x15 //Define outputs #define VOLUP_PIN 2 // D2 #define VOLDOWN_PIN 3 // D3 #define NEXTTRACK_PIN 5 // D4 #define PREVTRACK_PIN 4 // D5 #define SOURCE_PIN 6 // D6 #define SCROLLUP_PIN 9 // B1 #define SCROLLDOWN_PIN 10 // B2 // Connect optocoupler input through a 1k resistor to this pin #define OUTPUTPIN 8 // D8 // On-board LED, useful for debugging #define LEDPIN 13 // D13 // Pulse width in µs #define PULSEWIDTH 555 // Address that the radio responds to #define ADDRESS 0x47//47 unsigned long currentTime, holdbutton; unsigned long loopTime; int PrevState = 0; void setup() { currentTime = millis(); loopTime = currentTime; pinMode(OUTPUTPIN, OUTPUT); // Set the proper pin as output digitalWrite(OUTPUTPIN, LOW); // Output LOW to make sure optocoupler is off // Set the pins connected to the steering wheel remote as input / output pinMode(VOLUP_PIN, INPUT_PULLUP); pinMode(VOLDOWN_PIN, INPUT_PULLUP); pinMode(NEXTTRACK_PIN, INPUT_PULLUP); pinMode(PREVTRACK_PIN, INPUT_PULLUP); pinMode(SOURCE_PIN, INPUT_PULLUP); pinMode(SCROLLUP_PIN, INPUT_PULLUP); pinMode(SCROLLDOWN_PIN, INPUT_PULLUP); pinMode(LEDPIN, OUTPUT); // Set pin connected to on-board LED as output... digitalWrite(LEDPIN, LOW); digitalWrite(LEDPIN, HIGH); delay(1000); digitalWrite(LEDPIN, LOW); // ...and turn LED off } unsigned char GetInput(void) { currentTime = millis(); if(currentTime >= (loopTime + 10)) { //VOLUP if(PrevState == VOLUP_PIN && digitalRead(VOLUP_PIN)) { PrevState = 0; return VOLUP; } else if (PrevState == VOLUP_PIN && currentTime >= (holdbutton + 500)) { holdbutton = currentTime; return VOLUP; } else if(PrevState == 0 && !digitalRead(VOLUP_PIN)) { holdbutton = currentTime; PrevState = VOLUP_PIN; } //VOLDOWN if(PrevState == VOLDOWN_PIN && digitalRead(VOLDOWN_PIN)) { PrevState = 0; return VOLDOWN; } else if (PrevState == VOLDOWN_PIN && currentTime >= (holdbutton + 500)) { holdbutton = currentTime; return VOLDOWN; } else if(PrevState == 0 && !digitalRead(VOLDOWN_PIN)) { holdbutton = currentTime; PrevState = VOLDOWN_PIN; } //NEXTTRACK if(PrevState == NEXTTRACK_PIN && digitalRead(NEXTTRACK_PIN)) { PrevState = 0; return NEXTTRACK; } else if(PrevState == 0 && !digitalRead(NEXTTRACK_PIN)) { PrevState = NEXTTRACK_PIN; } //PREVTRACK if(PrevState == PREVTRACK_PIN && digitalRead(PREVTRACK_PIN)) { PrevState = 0; return PREVTRACK; } else if(PrevState == 0 && !digitalRead(PREVTRACK_PIN)) { PrevState = PREVTRACK_PIN; } //SOURCE - PAUSE(LONG PUSH 1sec) if((PrevState == SOURCE_PIN && digitalRead(SOURCE_PIN)) || (PrevState == POWERNOFF && digitalRead(SOURCE_PIN))) { if(PrevState == SOURCE_PIN) { PrevState = 0; return SOURCE; } else if (PrevState == POWERNOFF) { PrevState = 0; return 0; } } else if(PrevState == 0 && !digitalRead(SOURCE_PIN)) { holdbutton = currentTime; PrevState = SOURCE_PIN; } //PAUSE(LONG PUSH 1sec) if(PrevState == SOURCE_PIN && currentTime >= (holdbutton + 1000)) { PrevState = POWERNOFF; return MUTE; } //SCROLLUP_PIN if(PrevState == SCROLLUP_PIN && digitalRead(SCROLLUP_PIN)) { PrevState = 0; if(digitalRead(SCROLLDOWN_PIN)) { return FOLDERFORW; } else { return FOLDERBACK; } } else if(PrevState == 0 && !digitalRead(SCROLLUP_PIN)) { PrevState = SCROLLUP_PIN; } loopTime = currentTime; // Updates loopTime } return 0; } void loop() { unsigned char Key = GetInput(); if (Key) { SendCommand(Key); delay(2); SendCommand(Key); delay(20); } } // Send a value (7 bits, LSB is sent first, value can be an address or command) void SendValue(unsigned char value) { unsigned char i, tmp = 1; for (i = 0; i < sizeof(value) * 8 - 1; i++) { if (value & tmp) // Do a bitwise AND on the value and tmp SendOne(); else SendZero(); tmp = tmp << 1; // Bitshift left by 1 } } // Send a command to the radio, including the header, start bit, address and stop bits void SendCommand(unsigned char value) { unsigned char i; Preamble(); for (i = 0; i < 1; i++) { // Repeat address, command and stop bits three times so radio will pick them up properly SendValue(ADDRESS); // Send the address SendValue((unsigned char)value); // Send the command Postamble(); // Send signals to follow a command to the radio } } // Signals to transmit a '0' bit void SendZero() { digitalWrite(OUTPUTPIN, HIGH); // Output HIGH for 1 pulse width digitalWrite(LEDPIN, HIGH); // Turn on on-board LED delayMicroseconds(PULSEWIDTH); digitalWrite(OUTPUTPIN, LOW); // Output LOW for 1 pulse width digitalWrite(LEDPIN, LOW); // Turn off on-board LED delayMicroseconds(PULSEWIDTH); } // Signals to transmit a '1' bit void SendOne() { digitalWrite(OUTPUTPIN, HIGH); // Output HIGH for 1 pulse width digitalWrite(LEDPIN, HIGH); // Turn on on-board LED delayMicroseconds(PULSEWIDTH); digitalWrite(OUTPUTPIN, LOW); // Output LOW for 3 pulse widths digitalWrite(LEDPIN, LOW); // Turn off on-board LED delayMicroseconds(PULSEWIDTH * 3); } // Signals to precede a command to the radio void Preamble() { // HEADER: always LOW (1 pulse width), HIGH (16 pulse widths), LOW (8 pulse widths) digitalWrite(OUTPUTPIN, LOW); // Make sure output is LOW for 1 pulse width, so the header starts with a rising edge digitalWrite(LEDPIN, LOW); // Turn off on-board LED delayMicroseconds(PULSEWIDTH * 1); digitalWrite(OUTPUTPIN, HIGH); // Start of header, output HIGH for 16 pulse widths digitalWrite(LEDPIN, HIGH); // Turn on on-board LED delayMicroseconds(PULSEWIDTH * 16); digitalWrite(OUTPUTPIN, LOW); // Second part of header, output LOW 8 pulse widths digitalWrite(LEDPIN, LOW); // Turn off on-board LED delayMicroseconds(PULSEWIDTH * 8); // START BIT: always 1 SendOne(); } // Signals to follow a command to the radio void Postamble() { // STOP BITS: always 1 SendOne(); SendOne(); }Они уже прописаны "куда нужно". Купите готовый адаптер. За заказной вы заплатите больше. Если ардуино стоить три копейки, это не значит, что программа под нее стоит две. CD диск который продает микрософт, стоит 50 центов, а если на нем записан десятый виндавс , продается за 250 баксов.
Я не прошу программу, я ее уже нашел бесплатно. Я прошу в прошивке изменить назначения кнопок. В готовой прошивке, а кнопки на джойстике тупо замыкают контакты.
Возможно, эта задача несложная. Но чтобы исполнитель мог ее решить, вы должны предоставить четкие ответы на два вопроса ниже:
1. К каким контактам подключены кнопки джойстика в первом и втором скетче (номера, обозначения в коде)
2. Какие команды магнитофона генерят эти кнопки в первом и втором скетче - и на какие команды вы хотите их заменить.
Но я подозреваю, что ответов у вас нет - иначе задачу давно решили бы вы сами или кто-то другой. А без этих данных сделать что-то, не имея джойстика и магнитолы в руках - очень сложно.
Если будут ответы - обращайтесь, ded собака cur-ex.ru.
Так Вам об этом и говорят. Вы нашли какую-то программу на две сотни строк с комментариями типа "Not sure what this does" и предлагаете кому-то разобраться в ней и внести изменения. Вы считаете, что это как два пальца? Ошибаетесь. А даже, если бы это и было так, с чего кому-то свои пальцы мочить, когда проблема у Вас, а не у него? Из интереса? Так разбираться в чужом коде - наименее интересная вещь из всего, что есть в программировании.
Здесь вообще-то платный раздел. Или Вы цену спрашиваете?
Возможно, эта задача несложная. Но чтобы исполнитель мог ее решить, вы должны предоставить четкие ответы на два вопроса ниже:
1. К каким контактам подключены кнопки джойстика в первом и втором скетче (номера, обозначения в коде)
2. Какие команды магнитофона генерят эти кнопки в первом и втором скетче - и на какие команды вы хотите их заменить.
Но я подозреваю, что ответов у вас нет - иначе задачу давно решили бы вы сами или кто-то другой. А без этих данных сделать что-то, не имея джойстика и магнитолы в руках - очень сложно.
Если будут ответы - обращайтесь, ded собака cur-ex.ru.
Код джоя ПЕЖО.
пишите на почту. адрес выше