norman2

Suzuki -> Alpine

Feb 17th, 2014
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.59 KB | None | 0 0
  1. /*
  2.  
  3.   Interfejs sterowania radiami Alpine z wejściem typu mini-jack z kierwonicy w Suzuki GrandVitara IIgen.
  4.   Projekt bazuje na znalezionym w sieci :
  5.   http://blog.amarkulo.com/arduino-wired-remote-code-scanner-for-alpine/
  6.  
  7.  Do radia wpinamy się tak :
  8.   Używamy złącze mini-jack męskie. Trzymając w ręku złącze (konektorami w górę) patrzymy od dołu :
  9.   Pierwsze pole (masa) podpinamy pod GND
  10.   Drugie pole zostawiamy niepodpięte
  11.   Trzecie pole podpinamy pod pin 13 arduino (outputPin)
  12.  
  13.  Od strony auta :
  14.   Do originalnego radia wchodzi złączka G12 (niebieska). W dolnym rzędzie dwa pierwsze od prawej to :
  15.   - pin 20 koloru różowego z czarnym paskiem podpinamy pod 5V Arduino
  16.   - pin 19 koloru purpurowego podpinamy pod złącze Analog0 (A0) lub dowolne inne zdefiniowane zmienną Sterowanie
  17.   - pomiędzy GND a A0 dajemy rezystor 10k
  18.   Działa to na zasadzie dzielnika napięcia i umożliwia odczyt wartości rezystancji poszczególnych klawiszy.
  19.   Oczywiście piny 19,20 nie mogą być podpięte do żadnego radia bo mogą wystąpić problemy z masą/arduino.
  20.  
  21.  Zasilanie :
  22.   - najbezpieczniej jest wykonać układ zasilania oparty na 7805 którze zrzuci napięcie 12V na 5V do złącza arduino
  23.   - lub kupić przejście z zapalniczki samochodowej na miniUSB/microUSB (w zależności jakie arduino mamy), rozebrać i podać na wejście 12V po stacyjce a kabel podpiąć do arduino
  24.  
  25.  Wszystkie podłączenia robisz na własną odpowiedzialność, nie biorę odpowiedzialności za uszkodzone radio, sterowanie, elektrykę samochodu etc.
  26.  
  27.  (c) 2014 roman.piatkowski(malpa)gmail.com
  28.  
  29. */
  30.  
  31. const unsigned int outputPin = 13;
  32. const unsigned int Sterowanie = 0;
  33. //każda komenda to 6 bajtów = 3 bajty iHello i 3 bajty kodu klawisza
  34. //wysyłane w odpowiednich ostępach jako stan HIGH i LOW
  35. unsigned int iHello[24] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1};
  36. // definicja klawiszy
  37. unsigned int VolUp[24] = {1,1,0,1,1,0,1,1, 1,1,0,1,0,1,1,0, 1,1,0,1,0,1,0,1};
  38. unsigned int VolDn[24] = {0,1,1,0,1,1,0,1, 1,1,1,1,0,1,1,0, 1,1,0,1,0,1,0,1};
  39. unsigned int Mute[24] = {1,0,1,0,1,1,0,1, 1,1,1,0,1,1,1,0, 1,1,0,1,0,1,0,1};
  40. unsigned int FolderUp[24] = {1,0,1,0,1,0,1,1, 1,1,1,0,1,1,1,1, 0,1,0,1,0,1,0,1};
  41. unsigned int FolderDown[24] = {0,1,0,1,0,1,0,1, 1,1,1,1,1,1,1,1, 0,1,0,1,0,1,0,1};
  42. unsigned int Source[24] = {1,0,1,1,0,1,1,1, 1,1,0,1,1,0,1,1, 0,1,0,1,0,1,0,1};
  43. unsigned int TrackUp[24] = {1,0,1,1,1,0,1,1, 1,1,0,1,1,0,1,0, 1,1,0,1,0,1,0,1};
  44. unsigned int TrackDn[24] = {0,1,0,1,1,1,0,1, 1,1,1,1,1,0,1,0, 1,1,0,1,0,1,0,1};
  45. unsigned int Power[24] = {0,1,1,1,0,1,1,1, 1,1,1,0,1,0,1,1, 0,1,0,1,0,1,0,1};
  46. unsigned int EntPlay[24] = {0,1,0,1,0,1,1,1, 1,1,1,1,1,1,0,1, 0,1,0,1,0,1,0,1};
  47. unsigned int BandProg[24] = {0,1,1,0,1,0,1,1, 1,1,1,1,0,1,1,1, 0,1,0,1,0,1,0,1};
  48.  
  49. void setup()
  50. {
  51.   pinMode(outputPin, OUTPUT);
  52. }
  53.  
  54. void loop()
  55. {
  56.   /* do zrobienia :
  57.   mapowanie na klawisze w suzuki :
  58.   Enter/pause krótko -> EntPlay
  59.   Enter/pause długo -> Power
  60.   Mode -> Source
  61.   VolUp -> VolUp
  62.   VolDown -> VolDn
  63.   VolDown długo -> Mute
  64.   Seek+ krótko -> TrackUp
  65.   Seek+ długo -> FolderUp
  66.   Seek- krótko -> TrackDn
  67.   Seek- długo -> FolderDn
  68.   Sterowanie w Suzuki to drabinka rezystorowa pomiędzy pinem 19 i 20 (dolny rząd 2 z prawej) we wtyczce G12 koloru niebieskiego (wchodzi od ori radia)
  69.   każdy klawisz ma swoją rezystancję :
  70.   dopiszę jak zaczytam
  71.  
  72.  
  73.  
  74.   odczyt za pomocą AnalogRead jak w przypadku potencjometru */
  75.  
  76. }
  77.  
  78. void sendButton(unsigned int komenda[24])
  79. {
  80.   // czesc wstepna
  81.   //wysylamy stan wysoki przez 8ms
  82.   digitalWrite(outputPin, HIGH);
  83.   delay(8);
  84.   // a pozniej 4.5ms stan niski
  85.   digitalWrite(outputPin, LOW);
  86.   delayMicroseconds(4500);
  87.  
  88.   // witamy sie
  89.   for (int i = 0; i < 24; i++)
  90.   {
  91.     if (iHello[i] == 0)
  92.     {
  93.       digitalWrite(outputPin, LOW);
  94.       Serial.print("0");
  95.     }
  96.     else {
  97.       digitalWrite(outputPin, HIGH);
  98.       Serial.print("1");
  99.     }
  100.     // pod koniec przerwa .5s, low i czekamy .5ms !!!
  101.     delayMicroseconds(500);
  102.     digitalWrite(outputPin, LOW);
  103.     delayMicroseconds(500);
  104.   };
  105.   //wysylamy kazdy bajt komendy pomiedzy nimi robimy "przerwe" jak wyzej
  106.   for (int p = 0; p < 3; p++)
  107.   {
  108.     for (int x = 0; x < 8; x++)
  109.     {
  110.       if (komenda[x+(p*8)] == 0)
  111.       {
  112.         digitalWrite(outputPin, LOW);
  113.       }
  114.       else {
  115.         digitalWrite(outputPin, HIGH);
  116.       }
  117.       // przerwa
  118.       delayMicroseconds(500);
  119.       digitalWrite(outputPin, LOW);
  120.       delayMicroseconds(500);
  121.     }
  122.   }
  123.   // koniec komendy - wysyłamy 41ms sygnału niskiego
  124.   digitalWrite(outputPin, LOW);
  125.   delay(41);
  126. }
Advertisement
Add Comment
Please, Sign In to add comment