Goededag iedereen,
Ik ben geen crack in het arduinoverhaal maar ik vind het o-zo-leuk om er dingen mee te bouwen. Ik heb reeds simpele voorgekauwde dingetjes gemaakt maar nu wil ik deze theorie in praktijk gaan omzetten en echte functionerende dingen gaan maken.
Ik ben met een project bezig om via een bedieningsunit de verlichting van een 24V trailer te testen. De bedieningsunit kan je zien als de "auto" die je dan aansluit via de stekkerdoos aan de trailer om de verlichting te testen. In de handel zijn hier simpele bakjes voor te koop met schakelaartjes die dan stroom stuurt naar het juiste circuit zoals de standlichten, richtingsaanwijzer, enz...
Maar ik wil het zelf digitaal maken met tal van funties en een propere behuizing. Het moet een beetje robuust zijn voor mij. Ik voeg onderaan enkele foto's toe hoe het tot nu toe gebouwd is.
Even de belangrijkste hardware toelichten :
- arduino MEGA
- relayshield 16 relais
- drukknoppen momentary
- printplaatje zelf gemaakt met 10K PULL DOWN weerstanden voor de drukknoppen
De reeds gemaakte code werkt en de drukknoppen zijn geDEBOUNCED. Dus als ik een bepaalde drukknop bedien gaat de gewenste relais aantrekken. Als ik nogmaals op de knop druk dan gaat de relais uit. De drukknoppen doen dus dienst als schakelaar.
Tot zover de huidige code.
Mijn issue is 2 volgende functies waar ik reeds 20 verschillende samengestelde codes heb voor geprobeerd maar ik geraak er niet aan uit.
Issue 1 : wanneer ik bijvoorbeeld de drukknop van de richtingsaanwijzer bedien dan gaat de relais aan en bij nogmaals bedienen gaat die uit. Ik wil dit nu zoals echt gaan simuleren dat als je dezelfde knop 1 seconde indrukt de relais aan - uit - aan - uit - ... gaat (zoals een echte richtingsaanwijzer. en wanneer de knop dan nogmaals 1 seconde ingedrukt wordt dat deze knipperfunctie terug uit is. dus kort bedienen is constant aan en lang bedienen is knipperfunctie.
Issue 2 : ik heb een simulatieknop voorzien. Ik begrijp onder simulatie : wanneer ik deze drukknop bedien dat alle circuits om beurten 2 seconden van stroom worden voorzien. Zo kan je achteraan de trailer staan en hoef je geen 10 keer 14meter te wandelen naar de bedieningsbak om alle circuits om beurt te activeren om te kijken of alle verlichting werkt. Dus kort gezegd : als ik de simulatieknop bedien dan moet circuit 1 enkele seconden branden, circuit 1 uit en daarna circuit 2, circuit 2 uit, enz... Ik had al gespeeld met de bestaande code van de debouncedrukknop met enkele digitalWrites bij te zetten en delays maar dat werkt voor geen meter.
Kan of wil iemand mij verder helpen hoe ik deze 2 issues kan gaan vertalen in mijn sketch zodat dit kan werken?
Mijn huidige sketch (vereenvoudigd naar 4 knoppen ipv 13 om de code wat eenvoudig te houden)
//BIBLIOTHEKEN IN TE VOEREN
//INT INPUT KNOPPEN EN RELAISSHIELD
int STLI = 22; //PIN van RELAIS STANDLICHT LINKS - JD1
int STLIstatus = HIGH; // the current state of the output pin
int readSTLIKNOP; // the current reading from the input pin
int previousSTLIKNOP = LOW; // the previous reading from the input pin
int STLIKNOP = 34; //PIN van KNOP STANDLICHT LINKS
int PILI = 24; //PIN van RELAIS PINKER LINKS - JD2
int PILIstatus = HIGH; // the current state of the output pin
int readPILIKNOP; // the current reading from the input pin
int previousPILIKNOP = LOW; // the previous reading from the input pin
int PILIKNOP = 36; //PIN van KNOP PINKER LINKS
int STOP = 26; //PIN van RELAIS STOP - JD3
int STOPstatus = HIGH; // the current state of the output pin
int readSTOPKNOP; // the current reading from the input pin
int previousSTOPKNOP = LOW; // the previous reading from the input pin
int STOPKNOP = 38; //PIN van KNOP STOP
int SIMUstatus = HIGH; // the current state of the output pin
int readSIMUKNOP; // the current reading from the input pin
int previousSIMUKNOP = LOW; // the previous reading from the input pin
int SIMUKNOP = 47; //PIN van SIMULATIEKNOP
int SIMU; //DIT IS EEN VIRTUELE OUTPUT voor de simulatie echter is deze niet bepaald wat die moet gaan doen - ISSUE 2
//VARIABELEN VOOR KNOPPEN
long time = 0; // the last time the output pin was toggled
long debounce = 200; // the debounce time, increase if the output flickers
void setup() {
// put your setup code here, to run once:
pinMode(STLIKNOP, INPUT);
pinMode(PILIKNOP, INPUT);
pinMode(STOPKNOP, INPUT);
pinMode(SIMUKNOP, INPUT);
pinMode(STLI, OUTPUT);
pinMode(PILI, OUTPUT);
pinMode(STOP, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
//KNOP STANDLICHT LINKS
readSTLIKNOP = digitalRead(STLIKNOP);
// if the input just went from LOW and HIGH and we've waited long enough
// to ignore any noise on the circuit, toggle the output pin and remember
// the time
if (readSTLIKNOP == HIGH && previousSTLIKNOP == LOW && millis() - time > debounce) {
if (STLIstatus == HIGH)
STLIstatus = LOW;
else
STLIstatus = HIGH;
time = millis();
}
digitalWrite(STLI, STLIstatus);
previousSTLIKNOP = readSTLIKNOP;
//KNOP PINKER LINKS
readPILIKNOP = digitalRead(PILIKNOP);
if (readPILIKNOP == HIGH && previousPILIKNOP == LOW && millis() - time > debounce) {
if (PILIstatus == HIGH)
PILIstatus = LOW;
else
PILIstatus = HIGH;
time = millis();
}
digitalWrite(PILI, PILIstatus);
previousPILIKNOP = readPILIKNOP;
//KNOP STOP
readSTOPKNOP = digitalRead(STOPKNOP);
if (readSTOPKNOP == HIGH && previousSTOPKNOP == LOW && millis() - time > debounce) {
if (STOPstatus == HIGH)
STOPstatus = LOW;
else
STOPstatus = HIGH;
time = millis();
}
digitalWrite(STOP, STOPstatus);
previousSTOPKNOP = readSTOPKNOP;
//KNOP SIMULATIE
readSIMUKNOP = digitalRead(SIMUKNOP);
if (readSIMUKNOP == HIGH && previousSIMUKNOP == LOW && millis() - time > debounce) {
if (SIMUstatus == HIGH)
SIMUstatus = LOW;
else
SIMUstatus = HIGH;
time = millis();
}
digitalWrite(SIMU, SIMUstatus);
previousSIMUKNOP = readSIMUKNOP;
}
Verder staat nog op het programma om bij te bouwen (maar eerst de basisfunties uiteraard ) :
- 24V en 5V en verbruikte stroom (A) uitlezen via I2C OLED
- bediening via een RF 433Mhz afstandsbediening die dezelfde funties kan uitvoeren als de drukknoppen
- bediening via een app of bluetooth
Met vriendelijke groeten,
Wouter