Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Interfejs sterowania radiami Alpine z wejściem typu mini-jack z kierwonicy w Suzuki GrandVitara IIgen.
- Projekt bazuje na znalezionym w sieci :
- http://blog.amarkulo.com/arduino-wired-remote-code-scanner-for-alpine/
- Do radia wpinamy się tak :
- Używamy złącze mini-jack męskie. Trzymając w ręku złącze (konektorami w górę) patrzymy od dołu :
- Pierwsze pole (masa) podpinamy pod GND
- Drugie pole zostawiamy niepodpięte
- Trzecie pole podpinamy pod pin 13 arduino (outputPin)
- Od strony auta :
- Do originalnego radia wchodzi złączka G12 (niebieska). W dolnym rzędzie dwa pierwsze od prawej to :
- - pin 20 koloru różowego z czarnym paskiem podpinamy pod 5V Arduino
- - pin 19 koloru purpurowego podpinamy pod złącze Analog0 (A0) lub dowolne inne zdefiniowane zmienną Sterowanie
- - pomiędzy GND a A0 dajemy rezystor 10k
- Działa to na zasadzie dzielnika napięcia i umożliwia odczyt wartości rezystancji poszczególnych klawiszy.
- Oczywiście piny 19,20 nie mogą być podpięte do żadnego radia bo mogą wystąpić problemy z masą/arduino.
- Zasilanie :
- - najbezpieczniej jest wykonać układ zasilania oparty na 7805 którze zrzuci napięcie 12V na 5V do złącza arduino
- - 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
- Wszystkie podłączenia robisz na własną odpowiedzialność, nie biorę odpowiedzialności za uszkodzone radio, sterowanie, elektrykę samochodu etc.
- (c) 2014 roman.piatkowski(malpa)gmail.com
- */
- const unsigned int outputPin = 13;
- const unsigned int Sterowanie = 0;
- //każda komenda to 6 bajtów = 3 bajty iHello i 3 bajty kodu klawisza
- //wysyłane w odpowiednich ostępach jako stan HIGH i LOW
- 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};
- // definicja klawiszy
- 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};
- 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};
- 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};
- 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};
- 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};
- 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};
- 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};
- 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};
- 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};
- 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};
- 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};
- void setup()
- {
- pinMode(outputPin, OUTPUT);
- }
- void loop()
- {
- /* do zrobienia :
- mapowanie na klawisze w suzuki :
- Enter/pause krótko -> EntPlay
- Enter/pause długo -> Power
- Mode -> Source
- VolUp -> VolUp
- VolDown -> VolDn
- VolDown długo -> Mute
- Seek+ krótko -> TrackUp
- Seek+ długo -> FolderUp
- Seek- krótko -> TrackDn
- Seek- długo -> FolderDn
- 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)
- każdy klawisz ma swoją rezystancję :
- dopiszę jak zaczytam
- odczyt za pomocą AnalogRead jak w przypadku potencjometru */
- }
- void sendButton(unsigned int komenda[24])
- {
- // czesc wstepna
- //wysylamy stan wysoki przez 8ms
- digitalWrite(outputPin, HIGH);
- delay(8);
- // a pozniej 4.5ms stan niski
- digitalWrite(outputPin, LOW);
- delayMicroseconds(4500);
- // witamy sie
- for (int i = 0; i < 24; i++)
- {
- if (iHello[i] == 0)
- {
- digitalWrite(outputPin, LOW);
- Serial.print("0");
- }
- else {
- digitalWrite(outputPin, HIGH);
- Serial.print("1");
- }
- // pod koniec przerwa .5s, low i czekamy .5ms !!!
- delayMicroseconds(500);
- digitalWrite(outputPin, LOW);
- delayMicroseconds(500);
- };
- //wysylamy kazdy bajt komendy pomiedzy nimi robimy "przerwe" jak wyzej
- for (int p = 0; p < 3; p++)
- {
- for (int x = 0; x < 8; x++)
- {
- if (komenda[x+(p*8)] == 0)
- {
- digitalWrite(outputPin, LOW);
- }
- else {
- digitalWrite(outputPin, HIGH);
- }
- // przerwa
- delayMicroseconds(500);
- digitalWrite(outputPin, LOW);
- delayMicroseconds(500);
- }
- }
- // koniec komendy - wysyłamy 41ms sygnału niskiego
- digitalWrite(outputPin, LOW);
- delay(41);
- }
Advertisement
Add Comment
Please, Sign In to add comment