kan vara bra att ha till den svenska sommaren.
Försökte djärvt att bygga den av en gammal optisk mus och 2 ljussensorer.
Men den blev mer ljuskänslig än regnkänslig. Den reagerade på belysningen i tunnlar mm.
Men jag har en plan för att utnyttja ljussensorerna, återkommer med det......
Så det blev plan B en beg. sensor från en 95a. Med info ifrån denna avhandling.
Master Thesis 383.pdf
Utgångarna ifrån regnsensorn (hög och låg) hastighet får styra 2 relän som sedan får
styra torkarmotorn. (Tjuv)Kopplade in dom sakerna vid rattstången.
Ersatte läget för intervall med aktivering av regnsensor. Kopplade in det + feedback signal och
kraftdiod under relät för vindrutetorkaren (bakom handsfacket). Schema för inkopplingen.:
Nu skulle man kunna ersätta relät helt med regnsensorn och då koppla in allt på
relä kontakten med flatstift och då bara behöva tjuvkoppla högfarts läget vid rattstången.
Version 2 som inte är testad men borde fungera ? Inga garantier :
Monteringen av regnsensorn på framruta var inte det lättaste, men det ska ju inte vara enkelt.
Med en metallbygel som jag satte fast på backspegeln med 2 buntband och dubbelhäftande tejp.
Med en skruv och mutter för att pressa regnsensorn ordentligt mot rutan ihop med en tunn yta av silikonlim så blev det stabilt och fungerade system.
Rattknappar till en Alpine stereo.
Bygget bygger på en Microprocessor ifrån Arduino och med modifierad mjukvara
ifrån MP3car.com . Jag matar den via en 12 volts regulator för att reglera ner 14,4 volt från bilen.
Har lagt in tutan som en extra "knapp" funktion med en egen utgång till ett relä som drar bilens "tut" relä. (det räcker med ett litet relä). Logiskt, ni hänger med ? Ett schema kanske hjälper.
Knapparna på ratten ger olika spänningar beroende vilken knapp som trycks in.
Har man ratten med blindkåpor ístället för rattknapparna så är det nog mer plug and play.
Tillslut var den på plats och med lite modifieringar i programet (Seek Up och Down var omkastat)
ifrån MP3car.com . Jag matar den via en 12 volts regulator för att reglera ner 14,4 volt från bilen.
Har lagt in tutan som en extra "knapp" funktion med en egen utgång till ett relä som drar bilens "tut" relä. (det räcker med ett litet relä). Logiskt, ni hänger med ? Ett schema kanske hjälper.
Knapparna på ratten ger olika spänningar beroende vilken knapp som trycks in.
Knapparna ska matas med 5 volt via ett pullup motstånd på 500 ohm (använde ett 470 ohm).
Kopplade isär kontakten för tutan (grå ej orange som är för krockkudden) vid rattstången för
ta signalerna till processorn och kopplade in relä utgången till den andra ändan till tutan.
Bild innan jag gick loss med vulktejp och buntband....
Monteringen av krockkudden till min ratt krävde lite modifikationer i plasten.
Fick tabort plast från kåpan bakom rattknapparna och en del material vid rattekrarna.
Enklast var att montera bort ratten och "dremla" av plasten. Men tänk på att ställa bilen rakt innan.Har man ratten med blindkåpor ístället för rattknapparna så är det nog mer plug and play.
Tillslut var den på plats och med lite modifieringar i programet (Seek Up och Down var omkastat)
så funkade allt. Det knepiga är vad man ska ha för funktioner på SRC och NXT knapparna
med dubbeltryck eller när man håller in dom. Vet ej vilka funktioner dom har på 9-5an.
Men man får väl prova sig fram och det är lätt att plugga in USB kabeln och programera den.
Programvaran Alpine Stereo
Här kommer ver.2.: (Tutan åtg. och med "defeat" ON/OFF funktion inlagd vad det nu är ?)
//Inklusive Tutan med egen utgång pin8 ,pull up moständ 470 ohm.
// please excuse the lack of comments
// this works with a simgle button and has the correct timings
// adding the send of signals to stereo.. simulating by sending to serial
#define CHECK_MS 5
#define DOUBLE_MS 400
#define HOLD_MS 1200
#define NO_B 870 //nothing pressed
#define MODE_B 776 // NXT(mode)
#define NXTD_B 643 // NEXT DOWN<<
#define NXTU_B 508 // NEXT UP>>
#define MUTE_B 385 // SRC (mute)
#define VOLU_B 264 // VOLUME UP+
#define VOLD_B 151 // VOLUME DOWN-
#define HORN 020 // TUTAN
#define alpPin 7 //utgång Alpine stereo
#define hornPin 8 //utgång för tutan 480ms high
boolean volUp[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 1,1,0,1,1,0,1,1, 1,1,0,1,0,1,1,0, 1,1,0,1,0,1,0,1};
boolean volDn[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 0,1,1,0,1,1,0,1, 1,1,1,1,0,1,1,0, 1,1,0,1,0,1,0,1};
boolean mute[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 1,0,1,0,1,1,0,1, 1,1,1,0,1,1,1,0, 1,1,0,1,0,1,0,1};
boolean pstUp[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 1,0,1,0,1,0,1,1, 1,1,1,0,1,1,1,1, 0,1,0,1,0,1,0,1};
boolean pstDn[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 0,1,0,1,0,1,0,1, 1,1,1,1,1,1,1,1, 0,1,0,1,0,1,0,1};
boolean source[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 1,0,1,1,0,1,1,1, 1,1,0,1,1,0,1,1, 0,1,0,1,0,1,0,1};
boolean trkUp[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 1,0,1,1,1,0,1,1, 1,1,0,1,1,0,1,0, 1,1,0,1,0,1,0,1};
boolean trkDn[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 0,1,0,1,1,1,0,1, 1,1,1,1,1,0,1,0, 1,1,0,1,0,1,0,1};
boolean power[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 0,1,1,1,0,1,1,1, 1,1,1,0,1,0,1,1, 0,1,0,1,0,1,0,1};
boolean entPlay[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 0,1,0,1,0,1,1,1, 1,1,1,1,1,1,0,1, 0,1,0,1,0,1,0,1};
boolean bandProg[48] ={1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 0,1,1,0,1,0,1,1, 1,1,1,1,0,1,1,1, 0,1,0,1,0,1,0,1};
boolean defeat[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 0,1,1,0,1,1,1,1, 1,1,1,0,1,1,0,1, 0,1,0,1,0,1,0,1};
boolean spFlag = 0;
boolean dpFlag = 0;
boolean hpFlag = 0;
int button = 0;
int spbutton = 0;
/*
0-none
1-mode
2-track +
3-track -
4-mute
5-vol+
6-vol-
*/
void setup() {
Serial.begin(9600);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
}
void loop() {
int anaPin = 0;
anaPin = analogRead(0);
if (anaPin > HORN - 20 && anaPin < HORN + 20 )
{digitalWrite(hornPin, HIGH);
delay(48);
digitalWrite(hornPin, LOW);
} else{
static unsigned long oldTime = 0;
int switchStatus = 0;
if (millis() >= oldTime + CHECK_MS) {
oldTime = millis();
switchStatus = CheckSwitch();
if (switchStatus == 0) {
//no button press
} else if (switchStatus == 1) {
// single press
switch (spbutton) {
case 0: // no butto, why are wh here
break;
case 1: // NXT mode
entPlaySend();
break;
case 2: // next up
trkUpSend();
break;
case 3: // next down
trkDnSend();
break;
case 4: // SRC mute
sourceSend();
break;
case 5: // vol up
volUpSend();
break;
case 6: // vol down
volDnSend();
break;
}
} else if (switchStatus == 2) {
//double press
switch (spbutton) {
case 0: // no butto, why are wh here
break;
case 1: // NXT mode
bandProgSend();
break;
case 2: // next up (folder up)
pstUpSend();
break;
case 3: // next down (folder down)
pstDnSend();
break;
case 4: // SRC mute
defeatSend();
break;
case 5: // vol up
volUpSend();
break;
case 6: // vol down
volDnSend();
break;
}
} else if (switchStatus == 3) {
//hold
switch (spbutton) {
case 0: // no butto, why are wh here
break;
case 1: // NXT mode
muteSend();
break;
case 2: // next up (track fwd)
trkUpSend();
break;
case 3: // next down (track rev)
trkDnSend();
break;
case 4: // SRC mute (av/på)
powerSend();
break;
case 5: // vol up
volUpSend();
break;
case 6: // vol down
volDnSend();
break;
}
}
}
}
}
// Service routine called by a timer interrupt
int CheckSwitch() {
static uint16_t State = 0; // Current debounce status
static int curTime = 0;
State=(State<<1) | !RawKeyPressed() | 0xe000;
if (!spFlag) {
if (hpFlag) {
if (State == 0xe000) {
return 3;
} else {
hpFlag = 0;
}
}
if (State==0xf000) {
spFlag = 1;
hpFlag = 1;
dpFlag = 1;
curTime = 0;
spbutton = button;
return 0;
}
}
if (hpFlag && State != 0xe000) {
hpFlag = 0;
}
if (spFlag && hpFlag && curTime > HOLD_MS/CHECK_MS) {
spFlag = 0;
dpFlag = 0;
return 3;
} else if (spFlag && dpFlag && State == 0xf000 && curTime < DOUBLE_MS) {
spFlag = 0;
hpFlag = 0;
dpFlag = 0;
return 2;
} else if (spFlag && !hpFlag && curTime > DOUBLE_MS) {
spFlag = 0;
hpFlag = 0;
dpFlag = 0;
return 1;
} else {
curTime = curTime + CHECK_MS;
return 0;
}
}
boolean RawKeyPressed() {
int anaPin = 0;
anaPin = analogRead(0);
if (anaPin > NO_B - 20) {
button = 0;
return 0;
} else if (anaPin > MODE_B - 20 && anaPin < MODE_B + 20 ) {
button = 1;
return 1;
} else if (anaPin > NXTU_B - 20 && anaPin < NXTU_B + 20 ) {
button = 2;
return 1;
} else if (anaPin > NXTD_B - 20 && anaPin < NXTD_B + 20 ) {
button = 3;
return 1;
} else if (anaPin > MUTE_B - 20 && anaPin < MUTE_B + 20 ) {
button = 4;
return 1;
} else if (anaPin > VOLU_B - 20 && anaPin < VOLU_B + 20 ) {
button = 5;
return 1;
} else if (anaPin > VOLD_B - 20 && anaPin < VOLD_B + 20 ) {
button = 6;
return 1;
} else {
button = 0;
return 0;
}
}
//-----------SOURCE------------------
void sourceSend() {
//first send 8ms high
digitalWrite(alpPin, HIGH);
delay(8);
// send 4.5ms low
digitalWrite(alpPin, LOW);
delayMicroseconds(4500);
for (int i = 0; i <= 47; i++) {
//send bit for 0.5ms
if (source[i] == 1 ) {
digitalWrite(alpPin, HIGH);
} else {
digitalWrite(alpPin, LOW);
}
delayMicroseconds(500);
// wait 0.5ms
digitalWrite(alpPin, LOW);
delayMicroseconds(500);
}
// send 41ms low
digitalWrite(alpPin, LOW);
delay(41);
}
//-----------POWER ON/OFF------------------
void powerSend() {
//first send 8ms high
digitalWrite(alpPin, HIGH);
delay(8);
// send 4.5ms low
digitalWrite(alpPin, LOW);
delayMicroseconds(4500);
for (int i = 0; i <= 47; i++) {
//send bit for 0.5ms
if (power[i] == 1 ) {
digitalWrite(alpPin, HIGH);
} else {
digitalWrite(alpPin, LOW);
}
delayMicroseconds(500);
// wait 0.5ms
digitalWrite(alpPin, LOW);
delayMicroseconds(500);
}
// send 41ms low
digitalWrite(alpPin, LOW);
delay(41);
}
//---------Track NEXT UP-----------------------------------------------
void trkUpSend() {
//first send 8ms high
digitalWrite(alpPin, HIGH);
delay(8);
// send 4.5ms low
digitalWrite(alpPin, LOW);
delayMicroseconds(4500);
for (int i = 0; i <= 47; i++) {
//send bit for 0.5ms
if (trkUp[i] == 1 ) {
digitalWrite(alpPin, HIGH);
} else {
digitalWrite(alpPin, LOW);
}
delayMicroseconds(500);
// wait 0.5ms
digitalWrite(alpPin, LOW);
delayMicroseconds(500);
}
// send 41ms low
digitalWrite(alpPin, LOW);
delay(41);
}
//---------Track NEXT DOWN----------------------------------------------
void trkDnSend() {
//first send 8ms high
digitalWrite(alpPin, HIGH);
delay(8);
// send 4.5ms low
digitalWrite(alpPin, LOW);
delayMicroseconds(4500);
for (int i = 0; i <= 47; i++) {
//send bit for 0.5ms
if (trkDn[i] == 1 ) {
digitalWrite(alpPin, HIGH);
} else {
digitalWrite(alpPin, LOW);
}
delayMicroseconds(500);
// wait 0.5ms
digitalWrite(alpPin, LOW);
delayMicroseconds(500);
}
// send 41ms low
digitalWrite(alpPin, LOW);
delay(41);
}
//---------Folder PST? UP-----------------------------------------------
void pstUpSend() {
//first send 8ms high
digitalWrite(alpPin, HIGH);
delay(8);
// send 4.5ms low
digitalWrite(alpPin, LOW);
delayMicroseconds(4500);
for (int i = 0; i <= 47; i++) {
//send bit for 0.5ms
if (pstUp[i] == 1 ) {
digitalWrite(alpPin, HIGH);
} else {
digitalWrite(alpPin, LOW);
}
delayMicroseconds(500);
// wait 0.5ms
digitalWrite(alpPin, LOW);
delayMicroseconds(500);
}
// send 41ms low
digitalWrite(alpPin, LOW);
delay(41);
}
//---------Folder PST? DOWN----------------------------------------------
void pstDnSend() {
//first send 8ms high
digitalWrite(alpPin, HIGH);
delay(8);
// send 4.5ms low
digitalWrite(alpPin, LOW);
delayMicroseconds(4500);
for (int i = 0; i <= 47; i++) {
//send bit for 0.5ms
if (pstDn[i] == 1 ) {
digitalWrite(alpPin, HIGH);
} else {
digitalWrite(alpPin, LOW);
}
delayMicroseconds(500);
// wait 0.5ms
digitalWrite(alpPin, LOW);
delayMicroseconds(500);
}
// send 41ms low
digitalWrite(alpPin, LOW);
delay(41);
}
//---------MUTE---------------------------------------------------
void muteSend() {
//first send 8ms high
digitalWrite(alpPin, HIGH);
delay(8);
// send 4.5ms low
digitalWrite(alpPin, LOW);
delayMicroseconds(4500);
for (int i = 0; i <= 47; i++) {
//send bit for 0.5ms
if (mute[i] == 1 ) {
digitalWrite(alpPin, HIGH);
} else {
digitalWrite(alpPin, LOW);
}
delayMicroseconds(500);
// wait 0.5ms
digitalWrite(alpPin, LOW);
delayMicroseconds(500);
}
// send 41ms low
digitalWrite(alpPin, LOW);
delay(41);
}
//---------bandProg---------------------------------------------------
void bandProgSend() {
//first send 8ms high
digitalWrite(alpPin, HIGH);
delay(8);
// send 4.5ms low
digitalWrite(alpPin, LOW);
delayMicroseconds(4500);
for (int i = 0; i <= 47; i++) {
//send bit for 0.5ms
if (bandProg[i] == 1 ) {
digitalWrite(alpPin, HIGH);
} else {
digitalWrite(alpPin, LOW);
}
delayMicroseconds(500);
// wait 0.5ms
digitalWrite(alpPin, LOW);
delayMicroseconds(500);
}
// send 41ms low
digitalWrite(alpPin, LOW);
delay(41);
}
//---------entPlay---------------------------------------------------
void entPlaySend() {
//first send 8ms high
digitalWrite(alpPin, HIGH);
delay(8);
// send 4.5ms low
digitalWrite(alpPin, LOW);
delayMicroseconds(4500);
for (int i = 0; i <= 47; i++) {
//send bit for 0.5ms
if (entPlay[i] == 1 ) {
digitalWrite(alpPin, HIGH);
} else {
digitalWrite(alpPin, LOW);
}
delayMicroseconds(500);
// wait 0.5ms
digitalWrite(alpPin, LOW);
delayMicroseconds(500);
}
// send 41ms low
digitalWrite(alpPin, LOW);
delay(41);
}
//---------VOL UP-----------------------------------------------
void volUpSend() {
//first send 8ms high
digitalWrite(alpPin, HIGH);
delay(8);
// send 4.5ms low
digitalWrite(alpPin, LOW);
delayMicroseconds(4500);
for (int i = 0; i <= 47; i++) {
//send bit for 0.5ms
if (volUp[i] == 1 ) {
digitalWrite(alpPin, HIGH);
} else {
digitalWrite(alpPin, LOW);
}
delayMicroseconds(500);
// wait 0.5ms
digitalWrite(alpPin, LOW);
delayMicroseconds(500);
}
// send 41ms low
digitalWrite(alpPin, LOW);
delay(41);
}
//---------VOL DOWN-----------------------------------------------
void volDnSend() {
//first send 8ms high
digitalWrite(alpPin, HIGH);
delay(8);
// send 4.5ms low
digitalWrite(alpPin, LOW);
delayMicroseconds(4500);
for (int i = 0; i <= 47; i++) {
//send bit for 0.5ms
if (volDn[i] == 1 ) {
digitalWrite(alpPin, HIGH);
} else {
digitalWrite(alpPin, LOW);
}
delayMicroseconds(500);
// wait 0.5ms
digitalWrite(alpPin, LOW);
delayMicroseconds(500);
}
// send 41ms low
digitalWrite(alpPin, LOW);
delay(41);
}
//---------Defeat-----------------------------------------------
void defeatSend() {
//first send 8ms high
digitalWrite(alpPin, HIGH);
delay(8);
// send 4.5ms low
digitalWrite(alpPin, LOW);
delayMicroseconds(4500);
for (int i = 0; i <= 47; i++) {
//send bit for 0.5ms
if (defeat[i] == 1 ) {
digitalWrite(alpPin, HIGH);
} else {
digitalWrite(alpPin, LOW);
}
delayMicroseconds(500);
// wait 0.5ms
digitalWrite(alpPin, LOW);
delayMicroseconds(500);
}
// send 41ms low
digitalWrite(alpPin, LOW);
delay(41);
}
//Inklusive Tutan med egen utgång pin8 ,pull up moständ 470 ohm.
// please excuse the lack of comments
// this works with a simgle button and has the correct timings
// adding the send of signals to stereo.. simulating by sending to serial
#define CHECK_MS 5
#define DOUBLE_MS 400
#define HOLD_MS 1200
#define NO_B 870 //nothing pressed
#define MODE_B 776 // NXT(mode)
#define NXTD_B 643 // NEXT DOWN<<
#define NXTU_B 508 // NEXT UP>>
#define MUTE_B 385 // SRC (mute)
#define VOLU_B 264 // VOLUME UP+
#define VOLD_B 151 // VOLUME DOWN-
#define HORN 020 // TUTAN
#define alpPin 7 //utgång Alpine stereo
#define hornPin 8 //utgång för tutan 480ms high
boolean volUp[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 1,1,0,1,1,0,1,1, 1,1,0,1,0,1,1,0, 1,1,0,1,0,1,0,1};
boolean volDn[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 0,1,1,0,1,1,0,1, 1,1,1,1,0,1,1,0, 1,1,0,1,0,1,0,1};
boolean mute[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 1,0,1,0,1,1,0,1, 1,1,1,0,1,1,1,0, 1,1,0,1,0,1,0,1};
boolean pstUp[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 1,0,1,0,1,0,1,1, 1,1,1,0,1,1,1,1, 0,1,0,1,0,1,0,1};
boolean pstDn[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 0,1,0,1,0,1,0,1, 1,1,1,1,1,1,1,1, 0,1,0,1,0,1,0,1};
boolean source[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 1,0,1,1,0,1,1,1, 1,1,0,1,1,0,1,1, 0,1,0,1,0,1,0,1};
boolean trkUp[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 1,0,1,1,1,0,1,1, 1,1,0,1,1,0,1,0, 1,1,0,1,0,1,0,1};
boolean trkDn[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 0,1,0,1,1,1,0,1, 1,1,1,1,1,0,1,0, 1,1,0,1,0,1,0,1};
boolean power[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 0,1,1,1,0,1,1,1, 1,1,1,0,1,0,1,1, 0,1,0,1,0,1,0,1};
boolean entPlay[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 0,1,0,1,0,1,1,1, 1,1,1,1,1,1,0,1, 0,1,0,1,0,1,0,1};
boolean bandProg[48] ={1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 0,1,1,0,1,0,1,1, 1,1,1,1,0,1,1,1, 0,1,0,1,0,1,0,1};
boolean defeat[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 0,1,1,0,1,1,1,1, 1,1,1,0,1,1,0,1, 0,1,0,1,0,1,0,1};
boolean spFlag = 0;
boolean dpFlag = 0;
boolean hpFlag = 0;
int button = 0;
int spbutton = 0;
/*
0-none
1-mode
2-track +
3-track -
4-mute
5-vol+
6-vol-
*/
void setup() {
Serial.begin(9600);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
}
void loop() {
int anaPin = 0;
anaPin = analogRead(0);
if (anaPin > HORN - 20 && anaPin < HORN + 20 )
{digitalWrite(hornPin, HIGH);
delay(48);
digitalWrite(hornPin, LOW);
} else{
static unsigned long oldTime = 0;
int switchStatus = 0;
if (millis() >= oldTime + CHECK_MS) {
oldTime = millis();
switchStatus = CheckSwitch();
if (switchStatus == 0) {
//no button press
} else if (switchStatus == 1) {
// single press
switch (spbutton) {
case 0: // no butto, why are wh here
break;
case 1: // NXT mode
entPlaySend();
break;
case 2: // next up
trkUpSend();
break;
case 3: // next down
trkDnSend();
break;
case 4: // SRC mute
sourceSend();
break;
case 5: // vol up
volUpSend();
break;
case 6: // vol down
volDnSend();
break;
}
} else if (switchStatus == 2) {
//double press
switch (spbutton) {
case 0: // no butto, why are wh here
break;
case 1: // NXT mode
bandProgSend();
break;
case 2: // next up (folder up)
pstUpSend();
break;
case 3: // next down (folder down)
pstDnSend();
break;
case 4: // SRC mute
defeatSend();
break;
case 5: // vol up
volUpSend();
break;
case 6: // vol down
volDnSend();
break;
}
} else if (switchStatus == 3) {
//hold
switch (spbutton) {
case 0: // no butto, why are wh here
break;
case 1: // NXT mode
muteSend();
break;
case 2: // next up (track fwd)
trkUpSend();
break;
case 3: // next down (track rev)
trkDnSend();
break;
case 4: // SRC mute (av/på)
powerSend();
break;
case 5: // vol up
volUpSend();
break;
case 6: // vol down
volDnSend();
break;
}
}
}
}
}
// Service routine called by a timer interrupt
int CheckSwitch() {
static uint16_t State = 0; // Current debounce status
static int curTime = 0;
State=(State<<1) | !RawKeyPressed() | 0xe000;
if (!spFlag) {
if (hpFlag) {
if (State == 0xe000) {
return 3;
} else {
hpFlag = 0;
}
}
if (State==0xf000) {
spFlag = 1;
hpFlag = 1;
dpFlag = 1;
curTime = 0;
spbutton = button;
return 0;
}
}
if (hpFlag && State != 0xe000) {
hpFlag = 0;
}
if (spFlag && hpFlag && curTime > HOLD_MS/CHECK_MS) {
spFlag = 0;
dpFlag = 0;
return 3;
} else if (spFlag && dpFlag && State == 0xf000 && curTime < DOUBLE_MS) {
spFlag = 0;
hpFlag = 0;
dpFlag = 0;
return 2;
} else if (spFlag && !hpFlag && curTime > DOUBLE_MS) {
spFlag = 0;
hpFlag = 0;
dpFlag = 0;
return 1;
} else {
curTime = curTime + CHECK_MS;
return 0;
}
}
boolean RawKeyPressed() {
int anaPin = 0;
anaPin = analogRead(0);
if (anaPin > NO_B - 20) {
button = 0;
return 0;
} else if (anaPin > MODE_B - 20 && anaPin < MODE_B + 20 ) {
button = 1;
return 1;
} else if (anaPin > NXTU_B - 20 && anaPin < NXTU_B + 20 ) {
button = 2;
return 1;
} else if (anaPin > NXTD_B - 20 && anaPin < NXTD_B + 20 ) {
button = 3;
return 1;
} else if (anaPin > MUTE_B - 20 && anaPin < MUTE_B + 20 ) {
button = 4;
return 1;
} else if (anaPin > VOLU_B - 20 && anaPin < VOLU_B + 20 ) {
button = 5;
return 1;
} else if (anaPin > VOLD_B - 20 && anaPin < VOLD_B + 20 ) {
button = 6;
return 1;
} else {
button = 0;
return 0;
}
}
//-----------SOURCE------------------
void sourceSend() {
//first send 8ms high
digitalWrite(alpPin, HIGH);
delay(8);
// send 4.5ms low
digitalWrite(alpPin, LOW);
delayMicroseconds(4500);
for (int i = 0; i <= 47; i++) {
//send bit for 0.5ms
if (source[i] == 1 ) {
digitalWrite(alpPin, HIGH);
} else {
digitalWrite(alpPin, LOW);
}
delayMicroseconds(500);
// wait 0.5ms
digitalWrite(alpPin, LOW);
delayMicroseconds(500);
}
// send 41ms low
digitalWrite(alpPin, LOW);
delay(41);
}
//-----------POWER ON/OFF------------------
void powerSend() {
//first send 8ms high
digitalWrite(alpPin, HIGH);
delay(8);
// send 4.5ms low
digitalWrite(alpPin, LOW);
delayMicroseconds(4500);
for (int i = 0; i <= 47; i++) {
//send bit for 0.5ms
if (power[i] == 1 ) {
digitalWrite(alpPin, HIGH);
} else {
digitalWrite(alpPin, LOW);
}
delayMicroseconds(500);
// wait 0.5ms
digitalWrite(alpPin, LOW);
delayMicroseconds(500);
}
// send 41ms low
digitalWrite(alpPin, LOW);
delay(41);
}
//---------Track NEXT UP-----------------------------------------------
void trkUpSend() {
//first send 8ms high
digitalWrite(alpPin, HIGH);
delay(8);
// send 4.5ms low
digitalWrite(alpPin, LOW);
delayMicroseconds(4500);
for (int i = 0; i <= 47; i++) {
//send bit for 0.5ms
if (trkUp[i] == 1 ) {
digitalWrite(alpPin, HIGH);
} else {
digitalWrite(alpPin, LOW);
}
delayMicroseconds(500);
// wait 0.5ms
digitalWrite(alpPin, LOW);
delayMicroseconds(500);
}
// send 41ms low
digitalWrite(alpPin, LOW);
delay(41);
}
//---------Track NEXT DOWN----------------------------------------------
void trkDnSend() {
//first send 8ms high
digitalWrite(alpPin, HIGH);
delay(8);
// send 4.5ms low
digitalWrite(alpPin, LOW);
delayMicroseconds(4500);
for (int i = 0; i <= 47; i++) {
//send bit for 0.5ms
if (trkDn[i] == 1 ) {
digitalWrite(alpPin, HIGH);
} else {
digitalWrite(alpPin, LOW);
}
delayMicroseconds(500);
// wait 0.5ms
digitalWrite(alpPin, LOW);
delayMicroseconds(500);
}
// send 41ms low
digitalWrite(alpPin, LOW);
delay(41);
}
//---------Folder PST? UP-----------------------------------------------
void pstUpSend() {
//first send 8ms high
digitalWrite(alpPin, HIGH);
delay(8);
// send 4.5ms low
digitalWrite(alpPin, LOW);
delayMicroseconds(4500);
for (int i = 0; i <= 47; i++) {
//send bit for 0.5ms
if (pstUp[i] == 1 ) {
digitalWrite(alpPin, HIGH);
} else {
digitalWrite(alpPin, LOW);
}
delayMicroseconds(500);
// wait 0.5ms
digitalWrite(alpPin, LOW);
delayMicroseconds(500);
}
// send 41ms low
digitalWrite(alpPin, LOW);
delay(41);
}
//---------Folder PST? DOWN----------------------------------------------
void pstDnSend() {
//first send 8ms high
digitalWrite(alpPin, HIGH);
delay(8);
// send 4.5ms low
digitalWrite(alpPin, LOW);
delayMicroseconds(4500);
for (int i = 0; i <= 47; i++) {
//send bit for 0.5ms
if (pstDn[i] == 1 ) {
digitalWrite(alpPin, HIGH);
} else {
digitalWrite(alpPin, LOW);
}
delayMicroseconds(500);
// wait 0.5ms
digitalWrite(alpPin, LOW);
delayMicroseconds(500);
}
// send 41ms low
digitalWrite(alpPin, LOW);
delay(41);
}
//---------MUTE---------------------------------------------------
void muteSend() {
//first send 8ms high
digitalWrite(alpPin, HIGH);
delay(8);
// send 4.5ms low
digitalWrite(alpPin, LOW);
delayMicroseconds(4500);
for (int i = 0; i <= 47; i++) {
//send bit for 0.5ms
if (mute[i] == 1 ) {
digitalWrite(alpPin, HIGH);
} else {
digitalWrite(alpPin, LOW);
}
delayMicroseconds(500);
// wait 0.5ms
digitalWrite(alpPin, LOW);
delayMicroseconds(500);
}
// send 41ms low
digitalWrite(alpPin, LOW);
delay(41);
}
//---------bandProg---------------------------------------------------
void bandProgSend() {
//first send 8ms high
digitalWrite(alpPin, HIGH);
delay(8);
// send 4.5ms low
digitalWrite(alpPin, LOW);
delayMicroseconds(4500);
for (int i = 0; i <= 47; i++) {
//send bit for 0.5ms
if (bandProg[i] == 1 ) {
digitalWrite(alpPin, HIGH);
} else {
digitalWrite(alpPin, LOW);
}
delayMicroseconds(500);
// wait 0.5ms
digitalWrite(alpPin, LOW);
delayMicroseconds(500);
}
// send 41ms low
digitalWrite(alpPin, LOW);
delay(41);
}
//---------entPlay---------------------------------------------------
void entPlaySend() {
//first send 8ms high
digitalWrite(alpPin, HIGH);
delay(8);
// send 4.5ms low
digitalWrite(alpPin, LOW);
delayMicroseconds(4500);
for (int i = 0; i <= 47; i++) {
//send bit for 0.5ms
if (entPlay[i] == 1 ) {
digitalWrite(alpPin, HIGH);
} else {
digitalWrite(alpPin, LOW);
}
delayMicroseconds(500);
// wait 0.5ms
digitalWrite(alpPin, LOW);
delayMicroseconds(500);
}
// send 41ms low
digitalWrite(alpPin, LOW);
delay(41);
}
//---------VOL UP-----------------------------------------------
void volUpSend() {
//first send 8ms high
digitalWrite(alpPin, HIGH);
delay(8);
// send 4.5ms low
digitalWrite(alpPin, LOW);
delayMicroseconds(4500);
for (int i = 0; i <= 47; i++) {
//send bit for 0.5ms
if (volUp[i] == 1 ) {
digitalWrite(alpPin, HIGH);
} else {
digitalWrite(alpPin, LOW);
}
delayMicroseconds(500);
// wait 0.5ms
digitalWrite(alpPin, LOW);
delayMicroseconds(500);
}
// send 41ms low
digitalWrite(alpPin, LOW);
delay(41);
}
//---------VOL DOWN-----------------------------------------------
void volDnSend() {
//first send 8ms high
digitalWrite(alpPin, HIGH);
delay(8);
// send 4.5ms low
digitalWrite(alpPin, LOW);
delayMicroseconds(4500);
for (int i = 0; i <= 47; i++) {
//send bit for 0.5ms
if (volDn[i] == 1 ) {
digitalWrite(alpPin, HIGH);
} else {
digitalWrite(alpPin, LOW);
}
delayMicroseconds(500);
// wait 0.5ms
digitalWrite(alpPin, LOW);
delayMicroseconds(500);
}
// send 41ms low
digitalWrite(alpPin, LOW);
delay(41);
}
//---------Defeat-----------------------------------------------
void defeatSend() {
//first send 8ms high
digitalWrite(alpPin, HIGH);
delay(8);
// send 4.5ms low
digitalWrite(alpPin, LOW);
delayMicroseconds(4500);
for (int i = 0; i <= 47; i++) {
//send bit for 0.5ms
if (defeat[i] == 1 ) {
digitalWrite(alpPin, HIGH);
} else {
digitalWrite(alpPin, LOW);
}
delayMicroseconds(500);
// wait 0.5ms
digitalWrite(alpPin, LOW);
delayMicroseconds(500);
}
// send 41ms low
digitalWrite(alpPin, LOW);
delay(41);
}
Automatisk avbländande innerbackspegel.
kan vara bra att ha. Nu verkar det vara lite rea på dom på bilskrotarna. 350 kr.
Och inkopplingen verkade enkel enligt den här länken.
Och fästet såg ut att passa för en 9000.
Det knepiga var dom bakre skruvarna till fästet som är dolda under innertaket.
Men skruvar man bara ut dom och låter dom sitta kvar i fästet blir det lättare att
vid återmonteringen. Kopplade in 12 volten ifrån läslampan som får ström när tändningen slås på.
Och jorden nyttja jag från ett av dom främre skruvfästet, runda kabelskon.
Men stirra er inte blinda på färgen på kablarna det blev lite tvärtom liksom.
Flyttade över innerbelysnings lampan till den nya backspegeln fick kapa lite i övredelen
och säkrade fästet med lite lim. "Fasten Seat Belt" lampan hamnade lite när fästet men det funkar.
Och inkopplingen verkade enkel enligt den här länken.
Och fästet såg ut att passa för en 9000.
Det knepiga var dom bakre skruvarna till fästet som är dolda under innertaket.
Men skruvar man bara ut dom och låter dom sitta kvar i fästet blir det lättare att
vid återmonteringen. Kopplade in 12 volten ifrån läslampan som får ström när tändningen slås på.
Och jorden nyttja jag från ett av dom främre skruvfästet, runda kabelskon.
Men stirra er inte blinda på färgen på kablarna det blev lite tvärtom liksom.
Flyttade över innerbelysnings lampan till den nya backspegeln fick kapa lite i övredelen
och säkrade fästet med lite lim. "Fasten Seat Belt" lampan hamnade lite när fästet men det funkar.
Och sedan var det bara ut och rejsa iväg och testa grejorna. Man kan hållaför den främre sensorn med ett finger och lysa med ficklampa på spegelsensorn så ser man om den fungerar, också.
Den har lite fördröjning men "dimmar" bra i mellanläge också det är inte bara av och på
funktion på den vilket är bra.
Kromlist-LEDlist
Och lite glitter som lyser på dagen, kromlist ala Volvo S60.
Nu när julen är pågång kan man lysa upp tillvaron med LED-lister....
Efter en trapprenovering fick vi 2 LED lister tillövers, varför inte använda dem till bilen ?
Så det var väl bara och mosa in dem i reflexrampen ala ng9-5.
Upptäckte att den var ganska väl kapslad så det blev en diskretare variant.
(Fast det skulle varit snyggare med en tredje list så att det lyst hela vägen.)
Efter en trapprenovering fick vi 2 LED lister tillövers, varför inte använda dem till bilen ?
Så det var väl bara och mosa in dem i reflexrampen ala ng9-5.
Upptäckte att den var ganska väl kapslad så det blev en diskretare variant.
(Fast det skulle varit snyggare med en tredje list så att det lyst hela vägen.)
Ventilation
Om man har mer fritid kan man bygga om ventilationen så att man får
kallluftsutblås till baksätet.
Allt för att kyla ner bakpassagerarna. Tyvärr tog jag inga bilder på momenten men
jag kapade bort och täppt till utblåskanalerna som går ut under framstolarna och ledde luften in i boxen mellan stolarna.
Gjorde också hål bakom askoppen och bytte ut den med ett utblås ifrån en 900/9-3.
Tyvärr upptäckte jag en liten "bugg" i somras. När ACCen uppnått rätt kyla så börjar den blåsa
varmluft på fötterna (=bakpassagerarna) för att reglera temperaturen.
Tricket kan vara att kyla mera
Allt för att kyla ner bakpassagerarna. Tyvärr tog jag inga bilder på momenten men
jag kapade bort och täppt till utblåskanalerna som går ut under framstolarna och ledde luften in i boxen mellan stolarna.
Gjorde också hål bakom askoppen och bytte ut den med ett utblås ifrån en 900/9-3.
Tyvärr upptäckte jag en liten "bugg" i somras. När ACCen uppnått rätt kyla så börjar den blåsa
varmluft på fötterna (=bakpassagerarna) för att reglera temperaturen.
Tricket kan vara att kyla mera
Prenumerera på:
Inlägg (Atom)







