Переходник с магнитолы на мульируль
- Войдите на сайт для отправки комментариев
Сб, 08/12/2018 - 16:15
Всем доброго времени суток! Само устройство описывать не будуЮ так-как это сделано тут https://www.drive2.ru/l/518568992273597156/. Если не составит труда, подскажите пожалуйста, почему программа не работет с закомментированной 58 строкой Serial.println(analog);. как это вляет на ход программы? Заранее спасибо!
#define HOLDTIME 400 //Назначяем время, по прошествию которого кнопка считается зажатой /*Описываем сколько "попугаев" в нажатых кнопках*/ #define PLUS0 506 // Кнопка "+ vol" на руле (прибавить громкость на магнитоле) #define MINUS0 606 // Кнопка "- vol" на руле (убавить громкость на магнитоле) #define CIRCLE0 711 // Кнопка "voice" на руле (MUTE на магнитоле) #define RIGHT0 84 // Кнопка ">" на руле (вперед на магнитоле) #define LEFT0 194 // Кнопка "<" на руле (назад на магнитоле) #define SOURSE0 313 // Кнопка "MODE" на руле (SOURSE на магнитоле) #define ALLDOWN 1023 //Все кнопки отпущены #define DELTA 10 // Погрешность в измерении приходящего сигнала, если показания скачут более чем на 10 едениц, то можно увеличить /* #define CALL0 916 // Кнопка "поднять трубку" на руле (прибавить поднять трубку на магнитоле) #define HANGUP0 812 // Кнопка "положить трубку" на руле (прибавить положить трубку на магнитоле) */ /* Назначаем команды кнопкам Команды пульта JVC RM-RK52: MUTE 0xF171 SOUND 0xF1B1 UP 0xF129 DOWN 0xF1A9 LEFT 0xF1C9 RIGHT 0xF149 SOURCE 0xF111 VOL- 0xF1A1 VOL+ 0xF121 */ /*команды которые будут соответствовать нажатой кнопке на руле и зажатой кнопке на руле JVCVolUp(); JVCVolDn(); JVCSource(); JVCSound(); JVCMute(); JVCSkipFwd(); JVCSkipBack(); JVCSkipFwdHold(); JVCSkipBackHold(); */ const int PIN = 3; // Пин, который кправляет базой транзистора const int Length = 537; // Length in Microseconds const int Reps = 3; // Number of times to repeat each transmission int analog=0;// для чтения аналогового сигнала unsigned long time;// переменная для хранения времени void setup() { pinMode(PIN, OUTPUT); // Set pin to output digitalWrite(PIN, LOW); // Make PIN low to shut off transistor Serial.begin(9600); } void loop(){ analog = analogRead(A0);//считываем сигнал с пина АЦП Serial.println(analog); if (abs(ALLDOWN-analog) < DELTA)// для того, чтобы отпущенная кнопка снова обрабатывалась скидываем time на ноль { time=0; } //Читаем значение кнопки, если нажата, и до этого нажата не была (time равен нулю) if (abs(ALLDOWN-analog) > DELTA && time==0) { time = millis(); // отмечаем время нажатия записью в переменную time do { Serial.print("Pushing "); Serial.print(analogRead(A0)); Serial.print(" by "); Serial.println(millis()-time); delay(50); //ждем, набираем holdtime } while (abs(ALLDOWN-analogRead(A0)) > DELTA && millis()-time <= HOLDTIME);// пока что-то нажато и время нажатия не превысило holdtime if (millis()<time+HOLDTIME)//если время удержания меньше чем holdtime, шлем сигналы одиночного нажатия { if (abs(analog-SOURSE0) < DELTA) //Кнопка "MODE" на руле { JVCSource(); JVCSource(); Serial.println("com1: Source"); } if (abs(analog-LEFT0) < DELTA) //Кнопка "<" на руле { JVCSkipBack(); JVCSkipBack(); Serial.println("com1: Left"); } if (abs(analog-RIGHT0) < DELTA) //Кнопка ">" на руле { JVCSkipFwd(); JVCSkipFwd(); Serial.println("com1: Right"); } if (abs(analog-CIRCLE0) < DELTA) //Кнопка "voice" на руле { JVCMute(); JVCMute(); Serial.println("com1: Mute"); } if (abs(analog-PLUS0) < DELTA) //Кнопка "+ vol" на руле { JVCVolUp(); JVCVolUp(); Serial.println("com1: VolUp"); } if (abs(analog-MINUS0) < DELTA) //Кнопка "- vol" на руле { JVCVolDn(); JVCVolDn(); Serial.println("com1: VolDown"); } } /*Код для зажатых кнопок */ else if (millis() >= time+HOLDTIME)// в другом случае, когда кнопка удерживалась, шлем сигналы удержания { if (abs(analog-SOURSE0) < DELTA) //Кнопка "MODE" на руле { while((abs(analogRead(A0)-SOURSE0) < DELTA)) { JVCSource(); Serial.println("com2: Holding Source"); } } /* На моей магнитоле нет кнопок вверх и вниз, поэтому не использую эту функцию, если понадобится то нужно просто раскомментировать*/ /*if (abs(analog-LEFT0) < DELTA) //Кнопка "<" на руле { JVCSkipBackHold(); Serial.println("com2: Down"); } if (abs(analog-RIGHT0) < DELTA) //Кнопка ">" на руле { JVCSkipFwdHold(); Serial.println("com2: Up"); } */ if (abs(analog-CIRCLE0) < DELTA) //Кнопка "voice" на руле { JVCSound(); Serial.println("com2: Sound"); } if (abs(analog-PLUS0) < DELTA) //Кнопка "+ vol" на руле { while((abs(analogRead(A0)-PLUS0) < DELTA)) { JVCVolUp(); Serial.println("com2: Holding VolUp"); } } if (abs(analog-MINUS0) < DELTA) //Кнопка "- vol" на руле { while((abs(analogRead(A0)-MINUS0) < DELTA)) { JVCVolDn(); Serial.println("com2: holding VolDown"); } } } } } /* Далее позаимствованый код с протоколом проводного управления: JVC Communicate with JVC car radio over 3.5mm Remote connector Connect Arduino PIN to Base of NPN transistor Emitter is tied to ground Collector is tied to 3.5mm TIP Ground 3.5mm Ring/Sleeve By Dan Guerra (deguerra98@yahoo.com) */ void JVCVolUp() { // Send 0x04 for (int i = 1; i <= Reps; i++); { Preamble(); bZERO(); bZERO(); bONE(); // 4 bZERO(); bZERO(); bZERO(); // 0 bZERO(); Postamble(); } } void JVCVolDn() { // Send 0x05 for (int i = 1; i <= Reps; i++); { Preamble(); bONE(); bZERO(); bONE(); // 5 bZERO(); bZERO(); bZERO(); // 0 bZERO(); Postamble(); } } void JVCSource() { // Send 0x08 for (int i = 1; i <= Reps; i++); { Preamble(); bZERO(); bZERO(); bZERO(); // 8 bONE(); bZERO(); bZERO(); // 0 bZERO(); Postamble(); } } void JVCSound() { // Send 0x0D for (int i = 1; i <= Reps; i++); { Preamble(); bONE(); bZERO(); bONE(); // D (13) bONE(); bZERO(); bZERO(); // 0 bZERO(); Postamble(); } } void JVCMute() { // Send 0x0E for (int i = 1; i <= Reps; i++); { Preamble(); bZERO(); bONE(); bONE(); // E (14) bONE(); bZERO(); bZERO(); // 0 bZERO(); Postamble(); } } void JVCSkipFwd() { // Send 0x12 for (int i = 1; i <= Reps; i++); { Preamble(); bZERO(); bONE(); bZERO(); // 2 bZERO(); bONE(); bZERO(); // 1 bZERO(); Postamble(); } } void JVCSkipBack() { // Send 0x13 for (int i = 1; i <= Reps; i++); { Preamble(); bONE(); bONE(); bZERO(); // 3 bZERO(); bONE(); bZERO(); // 1 bZERO(); Postamble(); } } void JVCSkipFwdHold() { // Send 0x14 for (int i = 1; i <= Reps; i++); { Preamble(); bZERO(); bZERO(); bONE(); // 4 bZERO(); bONE(); bZERO(); // 1 bZERO(); Postamble(); } } void JVCSkipBackHold() { // Send 0x15 for (int i = 1; i <= Reps; i++); { Preamble(); bONE(); bZERO(); bONE(); // 5 bZERO(); bONE(); bZERO(); // 1 bZERO(); Postamble(); } } void bONE() { // Send a binary ONE over the line digitalWrite(PIN, HIGH); // Pull 3.5mm TIP low delayMicroseconds(Length); // for 537us digitalWrite(PIN, LOW); // Allow 3.5mm TIP to go high delayMicroseconds(Length * 3); // for 537 * 3 = 1611us } void bZERO() { // Send a binary ZERO over the line digitalWrite(PIN, HIGH); // Pull 3.5mm TIP low delayMicroseconds(Length); // for 537us digitalWrite(PIN, LOW); // Allow 3.5mm TIP to go high delayMicroseconds(Length); // for 537us } void Preamble() { digitalWrite(PIN, LOW); // Not sure what this does delayMicroseconds(Length * 1); digitalWrite(PIN, HIGH); // AGC delayMicroseconds(Length * 16); digitalWrite(PIN, LOW); // AGC delayMicroseconds(Length * 8); bONE(); // 1 Start Bit bONE(); // (7 bit device code) bONE(); bONE(); // 7 bZERO(); bZERO(); bZERO(); //4 bONE(); } void Postamble() { bONE(); bONE(); // 2 stop bits }
Неужели ни кто не знает?(
особо в код не всматривался, лениво, но могу предположить, что луп для вашей задачи слишком быстро крутится, Serial.print его немного тормозит, поэтому с ним работает.