#include <Arduino.h>
// Defineer de pinnen (ingangen)
#define REM PB3
#define LINKS PB4
#define RECHTS PB5
#define KEUZE_KLOK PA6
#define KEUZE_DATA PA7
#define KEUZE_SCHAKELAAR PB5
#define GROOT PB8
#define AUDIO_LINKS PB0
#define AUDIO_RECHTS PB1
// Defineer de pinnen (uitgangen)
#define LED_1 PB10
#define LED_2 PB11
#define LED_3 PB12
#define LED_4 PA0
#define LED_5 PA1
#define LED_6 PA13
#define LED_7 PB2
#define LED_8 PA4
#define LED_9 PA5
#define LED_10 PA12
#define LED_11 PA15
#define LED_12 PB13
#define LED_13 PB14
#define LED_14 PB15
#define VOOR_27 PA9
#define ACHTER_27 PA11
#define VOOR_18 PA8
#define ACHTER_18 PA10
#define KNIPPER_LINKS PC14
#define KNIPPER_RECHTS PC15
void setup() {
// Pin is een ingang of een uitgang
pinMode(AUDIO_LINKS, INPUT);
pinMode(AUDIO_RECHTS, INPUT);
pinMode(REM, INPUT);
pinMode(LINKS, INPUT);
pinMode(RECHTS, INPUT);
pinMode(GROOT, INPUT);
pinMode(KEUZE_KLOK, INPUT);
pinMode(KEUZE_DATA, INPUT);
pinMode(KEUZE_SCHAKELAAR, INPUT);
pinMode(LED_1, OUTPUT);
pinMode(LED_2, OUTPUT);
pinMode(LED_3, OUTPUT);
pinMode(LED_4, OUTPUT);
pinMode(LED_5, OUTPUT);
pinMode(LED_6, OUTPUT);
pinMode(LED_7, OUTPUT);
pinMode(LED_8, OUTPUT);
pinMode(LED_9, OUTPUT);
pinMode(LED_10, OUTPUT);
pinMode(LED_11, OUTPUT);
pinMode(LED_12, OUTPUT);
pinMode(LED_13, OUTPUT);
pinMode(LED_14, OUTPUT);
pinMode(VOOR_27, OUTPUT);
pinMode(ACHTER_27, OUTPUT);
pinMode(VOOR_18, OUTPUT);
pinMode(ACHTER_18, OUTPUT);
pinMode(KNIPPER_LINKS, OUTPUT);
pinMode(KNIPPER_RECHTS, OUTPUT);
// Interupt voor keuze schakelaar.
attachInterrupt(digitalPinToInterrupt(KEUZE_KLOK), leesKeuze, FALLING);
Serial.begin(9600);
Serial.println("Hallo");
}
// Globale variabelen
int iRemLicht = 0;
int iAudioLinks = 0;
int iAudioRechts = 0;
int iGrootLicht = 0;
int iKnipperLinks = 0;
int iKnipperRechts = 0;
int iLEDs = 0;
int iLEDs_Voor_18 = 0;
int iLEDs_Voor_27 = 0;
int iLEDs_Achter_18 = 0;
int iLEDs_Achter_27 = 0;
int iKnipperLamp_Links = 0;
int iKnipperLamp_Rechts = 0;
int iEffectTeller = 0;
int iKeuze = 0;
int iKeuze_Vorige = 99;
int iMultiKnipperLinks = 0;
int iMultiKnipperRechts = 0;
int iMultiKnipperTel = 0;
int iKeuze_Klok = 0;
int iKeuze_Data = 0;
int iTel = 0;
int iLEDs_StatusPositie = 0;
int iLEDs_StatusVoor = 0;
int iLEDs_StatusVoor_Vorige = 0;
int iLEDs_StatusAchter = 0;
int iLEDs_StatusAchter_Vorige = 0;
int aBin[] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536};
int aKIttScanner[] = {125, 8, 16, 32, 64, 128, 256, 512, 1024, 512, 256, 128, 64, 32, 16};
int aKnipperOmEnOm[] = {500, 13107, 3276};
int aKnipperAlles[] = {500, 16383, 0};
int aKnipperBuitenMidden[] = {500, 14343, 2040};
int aKnipperLinksRechts[] = {500, 16256, 127};
int aNaarRechts[] = {200, 9362, 4681, 2340};
int aNaarLinks[] = {200, 4681, 9362, 2340};
int aVuurpijl[] = {100, 192, 480, 816, 1560, 1032, 0, 14343, 0, 14343, 0, 14343, 0, 0, 0};
int aVullenLegen[] = {100, 8193, 4098, 2052, 1032, 528, 288, 192, 8385, 4290, 2244, 1224, 720, 480, 8673, 4578, 2532, 1512, 1008, 9201, 5106, 3060, 2040, 10233, 6138, 4092, 12285, 8190, 16383, 8190, 12285, 4092, 6138, 10233, 2040, 3060, 5106, 9201, 1008, 1512, 2532, 4578, 8673, 480, 720, 1224, 2244, 4290, 8385, 192, 288, 528, 1032, 2052, 4098, 8193, 0};
int aLooplicht[] = {100, 8256, 4128, 2064, 1032, 516, 258, 129, 8256, 4128, 2064, 1032, 516, 258, 129, 8256, 4128, 2064, 1032, 516, 258, 129, 8256, 4128, 2064, 1032, 516, 258, 129, 129, 258, 516, 1032, 2064, 4128, 8256, 129, 258, 516, 1032, 2064, 4128, 8256, 129, 258, 516, 1032, 2064, 4128, 8256, 129, 258, 516, 1032, 2064, 4128, 8256};
int aDunDik[] = {100, 192, 480, 1008, 2040, 4092, 8190, 16383, 8190, 4092, 2040, 1008, 480, 192, 0, 8193, 12291, 14343, 15375, 15903, 16191, 16383, 16191, 15903, 15375, 14343, 12291, 8193, 0};
int aOpstopping[] = {100, 8192, 4096, 2048, 9216, 4608, 2304, 9344, 4672, 2336, 9360, 4680, 2340, 9362, 4681, 2341, 9363, 4683, 2343, 9367, 4687, 2351, 9375, 4703, 2367, 9407, 4735, 2431, 9471, 4863, 2559, 9727, 5119, 3071, 10239, 6143, 4095, 12287, 8191, 16383, 16382, 16381, 16380, 16378, 16377, 16372, 16370, 16361, 16356, 16338, 16329, 16292, 16274, 16201, 16164, 16018, 15945, 15652, 15506, 14921, 14628, 13458, 12873, 10532, 9362, 4681, 2340, 1170, 585, 292, 146, 73, 36, 18, 9, 4, 2, 1, 0};
int aSOS[] = {300, 16383, 0, 16383, 0, 16383, 0, 0, 0, 16383, 16383, 16383, 0, 16383, 16383, 16383, 0, 16383, 16383, 16383, 0, 0, 0, 16383, 0, 16383, 0, 16383, 0, 0, 0, 0, 0, 0, 0};
int iEffectTijd = millis();
int iEffectStap = 1;
int iEffectAantal = 0;
int iKnipperTijd = millis();
int iKnipperStap = 1;
int iKnipperAantal = 0;
int iKnipperSoort = 0;
int aKnipperLinks[][13] = { {125, 2048, 6144, 14336, 14336, 14336, 14336, 0, 0, 0, 0, 0, 0},
{125, 2048, 6144, 14336, 14336, 12288, 8192, 0, 0, 0, 0, 0, 0},
{125, 14336, 14336, 14336, 14336, 14336, 14336, 0, 0, 0, 0, 0, 0} };
int aKnipperRechts[][13] = { {125, 4, 6, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0},
{125, 4, 6, 7, 7, 3, 1, 0, 0, 0, 0, 0, 0},
{125, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0} };
int iRemTijd = millis();
int iRemStap = 1;
int iRemAantal = 0;
int aRem[] = {100, 96, 480, 1008, 2040, 0, 2040, 0, 2040, 0, 2040};
char sLEDs_StatusVoor[] = "______________";
char sLEDs_StatusAchter[] = "______________";
char sScherm_Regel_1[] = "Regel 1 ";
char sScherm_Regel_2[] = "Regel 2 ";
char sScherm_Regel_3[] = "Regel 3 ";
char aScherm_Menu[][19] = {"--- ",
"Alles uit ",
"Dagrijverlichting ",
"Scanner Achter ",
"Scanner Voor ",
"Scanner A + V ",
"Knipperen OmEnOm ",
"Knipperen Alles ",
"Knipperen Bu/Mi ",
"Knipperen Li/Re ",
"Naar Rechts ",
"Naar Links ",
"Vuurpijlen ",
"Vullen en Legen ",
"Looplicht ",
"Dun en Dik ",
"Opstopping ",
"S.O.S. ",
"Audio L+R ",
"Knippersoort +1 ",
"----- "};
// Interrupt voor uitlezen van de keuzeschakelaar
void leesKeuze() {
iKeuze_Data = digitalRead(KEUZE_DATA);
if (iKeuze_Data == HIGH) { iKeuze++; } // Keuzeknop draait met de klok mee.}
if (iKeuze_Data == LOW) { iKeuze--; } // Keuzeknop draait tegen deklok in.}
if (iKeuze < 0) {iKeuze = 0;} // Minimum keuze.
if (iKeuze > 17) {iKeuze = 17;} // Maximum keuze.
iEffectStap = 1; // Bij wisselen van keuze stap voor effect altijd op begin stap (=1).
iEffectTijd = millis();
Serial.println(iKeuze);
}
void loop() {
while (1) {
// Lees de status van de ingangen.
iRemLicht = digitalRead(REM);
iGrootLicht = digitalRead(GROOT);
iKnipperLinks = digitalRead(LINKS);
iKnipperRechts = digitalRead(RECHTS);
iAudioLinks = analogRead(AUDIO_LINKS);
iAudioRechts = analogRead(AUDIO_RECHTS);
iKnipperSoort = digitalRead(KEUZE_SCHAKELAAR);
// KITT Scanner
if ((iKeuze > 1) && (iKeuze < 5)) {
// Update de LEDs met de data van het huidige effect.
iLEDs = aKIttScanner[iEffectStap];
// Controleer voor volgende stap.
if (millis() > (iEffectTijd + aKIttScanner[0])) {
iEffectStap++;
iEffectTijd = millis();
}
// Controleer of laatste stap van het effect is bereikt.
iEffectAantal = (sizeof(aKIttScanner) / sizeof(aKIttScanner[0])) - 1;
if (iEffectStap > iEffectAantal) { iEffectStap = 1; }
// Voor en of achter.
if ((iKeuze == 2) || (iKeuze == 4)) {iLEDs_Achter_18 = 1; iLEDs_Achter_27 = 1;}
if ((iKeuze == 3) || (iKeuze == 4)) {iLEDs_Voor_18 = 1; iLEDs_Voor_27 = 1;}
}
// Knipperen om en om.
if (iKeuze == 5) {
// Update de LEDs met de data van het huidige effect.
iLEDs = aKnipperOmEnOm[iEffectStap];
// Controleer voor volgende stap.
if (millis() > (iEffectTijd + aKnipperOmEnOm[0])) {
iEffectStap++;
iEffectTijd = millis();
}
// Controleer of laatste stap van het effect is bereikt.
iEffectAantal = (sizeof(aKnipperOmEnOm) / sizeof(aKnipperOmEnOm[0])) - 1;
if (iEffectStap > iEffectAantal) { iEffectStap = 1; }
// Voor en achter LEDs aan.
iLEDs_Voor_18 = 1;
iLEDs_Achter_18 = 1;
iLEDs_Voor_27 = 1;
iLEDs_Achter_27 = 1;
}
// Knipperen alles.
if (iKeuze == 6) {
// Update de LEDs met de data van het huidige effect.
iLEDs = aKnipperAlles[iEffectStap];
// Controleer voor volgende stap.
if (millis() > (iEffectTijd + aKnipperAlles[0])) {
iEffectStap++;
iEffectTijd = millis();
}
// Controleer of laatste stap van het effect is bereikt.
iEffectAantal = (sizeof(aKnipperAlles) / sizeof(aKnipperAlles[0])) - 1;
if (iEffectStap > iEffectAantal) { iEffectStap = 1; }
// Voor en achter LEDs aan.
iLEDs_Voor_18 = 1;
iLEDs_Achter_18 = 1;
iLEDs_Voor_27 = 1;
iLEDs_Achter_27 = 1;
}
// Knipperen buiten / midden.
if (iKeuze == 7) {
// Update de LEDs met de data van het huidige effect.
iLEDs = aKnipperBuitenMidden[iEffectStap];
// Controleer voor volgende stap.
if (millis() > (iEffectTijd + aKnipperBuitenMidden[0])) {
iEffectStap++;
iEffectTijd = millis();
}
// Controleer of laatste stap van het effect is bereikt.
iEffectAantal = (sizeof(aKnipperBuitenMidden) / sizeof(aKnipperBuitenMidden[0])) - 1;
if (iEffectStap > iEffectAantal) { iEffectStap = 1; }
// Voor en achter LEDs aan.
iLEDs_Voor_18 = 1;
iLEDs_Achter_18 = 1;
iLEDs_Voor_27 = 1;
iLEDs_Achter_27 = 1;
}
// Knipperen links / rechts.
if (iKeuze == 8) {
// Update de LEDs met de data van het huidige effect.
iLEDs = aKnipperLinksRechts[iEffectStap];
// Controleer voor volgende stap.
if (millis() > (iEffectTijd + aKnipperLinksRechts[0])) {
iEffectStap++;
iEffectTijd = millis();
}
// Controleer of laatste stap van het effect is bereikt.
iEffectAantal = (sizeof(aKnipperLinksRechts) / sizeof(aKnipperLinksRechts[0])) - 1;
if (iEffectStap > iEffectAantal) { iEffectStap = 1; }
// Voor en achter LEDs aan.
iLEDs_Voor_18 = 1;
iLEDs_Achter_18 = 1;
iLEDs_Voor_27 = 1;
iLEDs_Achter_27 = 1;
}
// NaarRechts
if (iKeuze == 9) {
// Update de LEDs met de data van het huidige effect.
iLEDs = aNaarRechts[iEffectStap];
// Controleer voor volgende stap.
if (millis() > (iEffectTijd + aNaarRechts[0])) {
iEffectStap++;
iEffectTijd = millis();
}
// Controleer of laatste stap van het effect is bereikt.
iEffectAantal = (sizeof(aNaarRechts) / sizeof(aNaarRechts[0])) - 1;
if (iEffectStap > iEffectAantal) { iEffectStap = 1; }
// Voor en achter LEDs aan.
iLEDs_Voor_18 = 1;
iLEDs_Achter_18 = 1;
iLEDs_Voor_27 = 1;
iLEDs_Achter_27 = 1;
}
// NaarLinks
if (iKeuze == 10) {
// Update de LEDs met de data van het huidige effect.
iLEDs = aNaarLinks[iEffectStap];
// Controleer voor volgende stap.
if (millis() > (iEffectTijd + aNaarLinks[0])) {
iEffectStap++;
iEffectTijd = millis();
}
// Controleer of laatste stap van het effect is bereikt.
iEffectAantal = (sizeof(aNaarLinks) / sizeof(aNaarLinks[0])) - 1;
if (iEffectStap > iEffectAantal) { iEffectStap = 1; }
// Voor en achter LEDs aan.
iLEDs_Voor_18 = 1;
iLEDs_Achter_18 = 1;
iLEDs_Voor_27 = 1;
iLEDs_Achter_27 = 1;
}
// Vuurpijl
if (iKeuze == 11) {
// Update de LEDs met de data van het huidige effect.
iLEDs = aVuurpijl[iEffectStap];
// Controleer voor volgende stap.
if (millis() > (iEffectTijd + aVuurpijl[0])) {
iEffectStap++;
iEffectTijd = millis();
}
// Controleer of laatste stap van het effect is bereikt.
iEffectAantal = (sizeof(aVuurpijl) / sizeof(aVuurpijl[0])) - 1;
if (iEffectStap > iEffectAantal) { iEffectStap = 1; }
// Voor en achter LEDs aan.
iLEDs_Voor_18 = 1;
iLEDs_Achter_18 = 1;
iLEDs_Voor_27 = 1;
iLEDs_Achter_27 = 1;
}
// Vullen en Legen
if (iKeuze == 12) {
// Update de LEDs met de data van het huidige effect.
iLEDs = aVullenLegen[iEffectStap];
// Controleer voor volgende stap.
if (millis() > (iEffectTijd + aVullenLegen[0])) {
iEffectStap++;
iEffectTijd = millis();
}
// Controleer of laatste stap van het effect is bereikt.
iEffectAantal = (sizeof(aVullenLegen) / sizeof(aVullenLegen[0])) - 1;
if (iEffectStap > iEffectAantal) { iEffectStap = 1; }
// Voor en achter LEDs aan.
iLEDs_Voor_18 = 1;
iLEDs_Achter_18 = 1;
iLEDs_Voor_27 = 1;
iLEDs_Achter_27 = 1;
}
// Looplicht
if (iKeuze == 13) {
// Update de LEDs met de data van het huidige effect.
iLEDs = aLooplicht[iEffectStap];
// Controleer voor volgende stap.
if (millis() > (iEffectTijd + aLooplicht[0])) {
iEffectStap++;
iEffectTijd = millis();
}
// Controleer of laatste stap van het effect is bereikt.
iEffectAantal = (sizeof(aLooplicht) / sizeof(aLooplicht[0])) - 1;
if (iEffectStap > iEffectAantal) { iEffectStap = 1; }
// Voor en achter LEDs aan.
iLEDs_Voor_18 = 1;
iLEDs_Achter_18 = 1;
iLEDs_Voor_27 = 1;
iLEDs_Achter_27 = 1;
}
// Dun en Dik
if (iKeuze == 14) {
// Update de LEDs met de data van het huidige effect.
iLEDs = aDunDik[iEffectStap];
// Controleer voor volgende stap.
if (millis() > (iEffectTijd + aDunDik[0])) {
iEffectStap++;
iEffectTijd = millis();
}
// Controleer of laatste stap van het effect is bereikt.
iEffectAantal = (sizeof(aDunDik) / sizeof(aDunDik[0])) - 1;
if (iEffectStap > iEffectAantal) { iEffectStap = 1; }
// Voor en achter LEDs aan.
iLEDs_Voor_18 = 1;
iLEDs_Achter_18 = 1;
iLEDs_Voor_27 = 1;
iLEDs_Achter_27 = 1;
}
// Opstopping
if (iKeuze == 15) {
// Update de LEDs met de data van het huidige effect.
iLEDs = aOpstopping[iEffectStap];
// Controleer voor volgende stap.
if (millis() > (iEffectTijd + aOpstopping[0])) {
iEffectStap++;
iEffectTijd = millis();
}
// Controleer of laatste stap van het effect is bereikt.
iEffectAantal = (sizeof(aOpstopping) / sizeof(aOpstopping[0])) - 1;
if (iEffectStap > iEffectAantal) { iEffectStap = 1; }
// Voor en achter LEDs aan.
iLEDs_Voor_18 = 1;
iLEDs_Achter_18 = 1;
iLEDs_Voor_27 = 1;
iLEDs_Achter_27 = 1;
}
// S.O.S.
if (iKeuze == 16) {
// Update de LEDs met de data van het huidige effect.
iLEDs = aSOS[iEffectStap];
// Controleer voor volgende stap.
if (millis() > (iEffectTijd + aSOS[0])) {
iEffectStap++;
iEffectTijd = millis();
}
// Controleer of laatste stap van het effect is bereikt.
iEffectAantal = (sizeof(aSOS) / sizeof(aSOS[0])) - 1;
if (iEffectStap > iEffectAantal) { iEffectStap = 1; }
// Voor en achter LEDs aan.
iLEDs_Voor_18 = 1;
iLEDs_Achter_18 = 1;
iLEDs_Voor_27 = 1;
iLEDs_Achter_27 = 1;
}
// Audio.
if (iKeuze == 17) {
// Update de LEDs met de data van het huidige effect.
iLEDs = 0;
iAudioLinks = analogRead(AUDIO_LINKS);
if (iAudioLinks > 25) {iLEDs = iLEDs | 128;}
if (iAudioLinks > 175) {iLEDs = iLEDs | 256;}
if (iAudioLinks > 325) {iLEDs = iLEDs | 512;}
if (iAudioLinks > 475) {iLEDs = iLEDs | 1024;}
if (iAudioLinks > 625) {iLEDs = iLEDs | 2048;}
if (iAudioLinks > 775) {iLEDs = iLEDs | 4096;}
if (iAudioLinks > 925) {iLEDs = iLEDs | 8192;}
iAudioLinks = analogRead(AUDIO_RECHTS);
if (iAudioRechts > 25) {iLEDs = iLEDs | 64;}
if (iAudioRechts > 175) {iLEDs = iLEDs | 32;}
if (iAudioRechts > 325) {iLEDs = iLEDs | 16;}
if (iAudioRechts > 475) {iLEDs = iLEDs | 8;}
if (iAudioRechts > 625) {iLEDs = iLEDs | 4;}
if (iAudioRechts > 775) {iLEDs = iLEDs | 2;}
if (iAudioRechts > 925) {iLEDs = iLEDs | 1;}
// Voor en achter LEDs aan.
iLEDs_Voor_18 = 1;
iLEDs_Achter_18 = 1;
iLEDs_Voor_27 = 1;
iLEDs_Achter_27 = 1;
}
// Knipperlicht soort.
if (iKeuze == 18) {
// Kies volgedende soort voor knipperlicht effecten.
iKnipperSoort = iKnipperSoort + 1;
// Als maximum is overschreden begin weer opnieuw.
if (iKnipperSoort > sizeof(aKnipperLinks) / sizeof(aKnipperLinks[0])) {
iKnipperSoort = 0;
};
}
// Bij een knipperlicht, rem of grootlicht alle LEDs resetten (Verwijderen van effeten.).
if (iKnipperLinks || iMultiKnipperLinks || iKnipperRechts || iMultiKnipperRechts || iRemLicht || iGrootLicht) { iLEDs = 0; }
// Knipperlichten.
if (iKnipperLinks || iMultiKnipperLinks || iKnipperRechts || iMultiKnipperRechts) {
// Knipperlicht Links.
if (iKnipperLinks || iMultiKnipperLinks) {
// Update de LEDs met de data van het huidige effect.
iLEDs = iLEDs | aKnipperLinks[iKnipperSoort][iKnipperStap];
// Kort bedienen knipperlicht zorgt voor 3 x knipperen.
if (iMultiKnipperTel > 2 && iMultiKnipperTel < 33) {
iMultiKnipperLinks = 1;
} else {
iMultiKnipperLinks = 0;
}
// Zet meerdere keren knipper van ander zijde uit.
iMultiKnipperRechts = 0;
}
// Knipperlichten Rechts.
if (iKnipperRechts || iMultiKnipperRechts) {
// Update de LEDs met de data van het huidige effect.
iLEDs = iLEDs | aKnipperRechts[iKnipperSoort][iKnipperStap];
// Kort bedienen knipperlicht zorgt voor 3 x knipperen.
if (iMultiKnipperTel > 2 && iMultiKnipperTel < 33) {
iMultiKnipperRechts = 1;
} else {
iMultiKnipperRechts = 0;
}
// Zet meerdere keren knipper van ander zijde uit.
iMultiKnipperLinks = 0;
}
// Controleer voor volgende stap (via linkerknipperlicht array).
if (millis() > (iKnipperTijd + aKnipperLinks[iKnipperSoort][0])) {
iKnipperStap++;
iKnipperTijd = millis();
iMultiKnipperTel++;
}
// Update de normale lampen met de data van het huidige effect.
iKnipperLamp_Links = iLEDs & 14336;
iKnipperLamp_Rechts = iLEDs & 7;
// Controleer of laatste stap van het effect is bereikt.
iKnipperAantal = (sizeof(aKnipperLinks[0]) / sizeof(aKnipperLinks[0][0])) - 1;
if (iKnipperStap > iKnipperAantal) { iKnipperStap = 1; }
} else {
// Geen knipperlichten.
iKnipperStap = 1;
iMultiKnipperTel = 0;
iKnipperLamp_Links = 0;
iKnipperLamp_Rechts = 0;
}
// Dagrij verlichting
if (iKeuze == 1) {
iLEDs = iLEDs | 1032;
iLEDs_Voor_18 = 1;
iLEDs_Achter_18 = 1;
}
// Rem Aan/Uit
if (iRemLicht) {
// Update de LEDs met de data van het huidige effect.
iLEDs = iLEDs | aRem[iRemStap];
// Controleer voor volgende stap.
if (millis() > (iRemTijd + aRem[0])) {
iRemStap++;
iRemTijd = millis();
}
// Controleer of laatste stap van array is bereikt.
iRemAantal = (sizeof(aRem) / sizeof(aRem[0])) - 1;
if (iRemStap > iRemAantal) { iRemStap = iRemAantal; }
iLEDs_Achter_18 = 1;
iLEDs_Achter_27 = 1;
if (iGrootLicht != 1) {iLEDs_Voor_27 = 0;}
if ((iGrootLicht != 1) && (iKeuze != 1)) {iLEDs_Voor_18 = 0;}
} else {
iRemStap = 1;
}
// Grootlicht Aan/Uit
if (iGrootLicht) {
iLEDs = iLEDs | 2040;
iLEDs_Voor_18 = 1;
iLEDs_Voor_27 = 1;
if (iRemLicht != 1) {iLEDs_Achter_27 = 0;}
if ((iRemLicht != 1) && (iKeuze != 1)) {iLEDs_Achter_18 = 0;}
}
// Verwerk LED-uitgangen naar status string voor OLED-scherm.
iLEDs_StatusPositie = 0;
iLEDs_StatusVoor = iLEDs;
iLEDs_StatusAchter = iLEDs;
// LEDs voor actief of niet actief.
if (iLEDs_Voor_18 != 1) { iLEDs_StatusVoor = iLEDs_StatusVoor & 15351; }
if (iLEDs_Voor_27 != 1) { iLEDs_StatusVoor = iLEDs_StatusVoor & 15375; }
// LEDs achter actief of niet actief.
if (iLEDs_Achter_18 != 1) { iLEDs_StatusAchter = iLEDs_StatusAchter & 15351; }
if (iLEDs_Achter_27 != 1) { iLEDs_StatusAchter = iLEDs_StatusAchter & 15375; }
// LED Status naar string voor en achter.
for (iTel = 13; iTel >= 0; iTel--) {
if (iLEDs_StatusVoor & aBin[iTel]) {
sLEDs_StatusVoor[iLEDs_StatusPositie] = '#';
} else {
sLEDs_StatusVoor[iLEDs_StatusPositie] = '_';
}
if (iLEDs_StatusAchter & aBin[iTel]) {
sLEDs_StatusAchter[iLEDs_StatusPositie] = '#';
} else {
sLEDs_StatusAchter[iLEDs_StatusPositie] = '_';
}
iLEDs_StatusPositie++;
}
// Verwerk menu regels voor OLED scherm.
strncpy(sScherm_Regel_1, aScherm_Menu[iKeuze + 0], 18);
strncpy(sScherm_Regel_2, aScherm_Menu[iKeuze + 1], 18);
strncpy(sScherm_Regel_3, aScherm_Menu[iKeuze + 2], 18);
// Update het OLED-Scherm bij wijzigingen.
if ((iKeuze_Vorige != iKeuze) || (iLEDs_StatusVoor_Vorige != iLEDs_StatusVoor) || (iLEDs_StatusAchter_Vorige != iLEDs_StatusAchter)) {
//Serial.println(sLEDs_StatusVoor);
//Serial.println(sScherm_Regel_1);
//Serial.println(sScherm_Regel_2);
//Serial.println(sScherm_Regel_3);
//Serial.println(sLEDs_StatusAchter);
//Serial.println(" ");
// Reset update.
iKeuze_Vorige = iKeuze;
iLEDs_StatusVoor_Vorige = iLEDs_StatusVoor;
iLEDs_StatusAchter_Vorige = iLEDs_StatusAchter;
}
// Verwerk de LED statussen
if (iLEDs_Voor_18) { digitalWrite(VOOR_18, 1); } else { digitalWrite(VOOR_18, 0); }
if (iLEDs_Voor_27) { digitalWrite(VOOR_27, 1); } else { digitalWrite(VOOR_27, 0); }
if (iLEDs_Achter_18) { digitalWrite(ACHTER_18, 1); } else { digitalWrite(ACHTER_18, 0); }
if (iLEDs_Achter_27) { digitalWrite(ACHTER_27, 1); } else { digitalWrite(ACHTER_27, 0); }
if (iLEDs & 1) { digitalWrite(LED_1, 1); } else { digitalWrite(LED_1, 0); }
if (iLEDs & 2) { digitalWrite(LED_2, 1); } else { digitalWrite(LED_2, 0); }
if (iLEDs & 4) { digitalWrite(LED_3, 1); } else { digitalWrite(LED_3, 0); }
if (iLEDs & 8) { digitalWrite(LED_4, 1); } else { digitalWrite(LED_4, 0); }
if (iLEDs & 16) { digitalWrite(LED_5, 1); } else { digitalWrite(LED_5, 0); }
if (iLEDs & 32) { digitalWrite(LED_6, 1); } else { digitalWrite(LED_6, 0); }
if (iLEDs & 64) { digitalWrite(LED_7, 1); } else { digitalWrite(LED_7, 0); }
if (iLEDs & 128) { digitalWrite(LED_8, 1); } else { digitalWrite(LED_8, 0); }
if (iLEDs & 256) { digitalWrite(LED_9, 1); } else { digitalWrite(LED_9, 0); }
if (iLEDs & 512) { digitalWrite(LED_10, 1); } else { digitalWrite(LED_10, 0); }
if (iLEDs & 1024) { digitalWrite(LED_11, 1); } else { digitalWrite(LED_11, 0); }
if (iLEDs & 2048) { digitalWrite(LED_12, 1); } else { digitalWrite(LED_12, 0); }
if (iLEDs & 4096) { digitalWrite(LED_13, 1); } else { digitalWrite(LED_13, 0); }
if (iLEDs & 8192) { digitalWrite(LED_14, 1); } else { digitalWrite(LED_14, 0); }
// Verwerk de normale knipper lampen status.
if (iKnipperLamp_Links) { digitalWrite(KNIPPER_LINKS, 1); } else { digitalWrite(KNIPPER_LINKS, 0); }
if (iKnipperLamp_Rechts) { digitalWrite(KNIPPER_RECHTS, 1); } else { digitalWrite(KNIPPER_RECHTS, 0); }
// Reset de LED statussen.
iLEDs = 0;
iLEDs_Voor_18 = 0;
iLEDs_Voor_27 = 0;
iLEDs_Achter_18 = 0;
iLEDs_Achter_27 = 0;
// Wachttijd loop
delay(1);
}
}LINKS
RECHTS
REM
GROOT
This is a setup for my VW Baja-Beetle.
The orange/white lights are integrated in the front-bumper.
The orange/red lights are integrated in the rear-bumper.
The LED's are 12-24V light units, and are driven by L293D drivers.
I use a Blue-Pill board, and I used PA2 and PA3 as outputs, so serial out is not available.
On this Nucleo board I use PB2 and PA13 instead.
13.2 VDC
Loading
st-nucleo-c031c6
st-nucleo-c031c6
KEUZE
Loading
ssd1306
ssd1306
AUDIO LINKS
AUDIO RECHTS
RECHTS
LINKS