Al 1,5 week zeer frustrerend met het ding bezig wat Arduino Uno heet... Toen ik hem net bijna in de vuilnisbak wilde gooien, toch maar besloten dit forum te raadplegen. Ik kom er niet meer uit, ik krijg het niet voor elkaar.
Wat ik wil, is heel simpel in feite:
Op een modelspoorbaan zijn 6 sporen naast elkaar beschikbaar om treinen op te stellen (schaduwstation).
Eén willekeurig spoor is altijd leeg, die trein rijdt op de baan rond, de andere 5 wachten.
Er kan er maar één per keer rondrijden.
Vlak vóór het schaduwstation komt een contactje wat geactiveerd wordt als een trein het schaduwstation nadert.
Met het maken van contact moet één van de 6 sporen (en dat mag ook het lege spoor zijn, dan rijdt diezelfde trein nog een rondje) met een relais onder spanning worden gezet voor 10 a 15 seconde. Ná die 10 a 15 seconde, moet het relais weer afvallen en de spanning er weer af gaan.
Dit moet zich eigenlijk continu herhalen.
Wat er nu gebeurt, is dat ALLE 6 de sporen vrijgegeven worden en ook niet meer spanningsloos worden gesteld. Dus, één grote ravage als het straks aangesloten wordt.
Vanwege de gebruikte relaiskaart is HIGH en LOW omgedraaid, dat kan voor verwarring zorgen.
Wie kan me helpen met het laatste stukje code om dit werkend te krijgen?
Ik geef het op na vele uren en dagen ploeteren en testen...
Alvast bedankt,
Roland.
const int buttonpin = 2; //Rijcontact M-rails vóór het schaduwstation
int buttonState;
const int relay_1 = 7; //Relais 1
const int relay_2 = 8; //Relais 2
const int relay_3 = 9; //Relais 3
const int relay_4 = 10; //relais 4
const int relay_5 = 11; //Relais 5
const int relay_6 = 12; //Relais 6
const int maxLedPins = 6;
int ledpins[maxLedPins] = {relay_1, relay_2, relay_3, relay_4, relay_5, relay_6};
unsigned long starttijd = 0; // Zet de standaard timer (voor millis) op nul
unsigned long interval_vertrek = 15000; // De tijd dat een spoor geactiveerd is om te vertrekken (15 sec)
void setup() {
pinMode(buttonpin, INPUT_PULLUP); //Door interne weerstand: LOW = HIGH, HIGH = LOW
pinMode(relay_1, OUTPUT);
pinMode(relay_2, OUTPUT);
pinMode(relay_3, OUTPUT);
pinMode(relay_4, OUTPUT);
pinMode(relay_5, OUTPUT);
pinMode(relay_6, OUTPUT);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(relay_1, HIGH); //Bij opstarten dit relais uitgeschakeld houden
digitalWrite(relay_2, HIGH); //Bij opstarten dit relais uitgeschakeld houden
digitalWrite(relay_3, HIGH); //Bij opstarten dit relais uitgeschakeld houden
digitalWrite(relay_4, HIGH); //Bij opstarten dit relais uitgeschakeld houden
digitalWrite(relay_5, HIGH); //Bij opstarten dit relais uitgeschakeld houden
digitalWrite(relay_6, HIGH); //Bij opstarten dit relais uitgeschakeld houden
}
void loop() {
buttonState = digitalRead(buttonpin);
if (buttonState == LOW) { //Laat de volgende trein vertrekken indien er contact is.
starttijd = millis();
while ((millis() - starttijd) < interval_vertrek)
{
digitalWrite (ledpins[random(maxLedPins)], LOW); //Random een trein uitkiezen, eventueel dezelfde.
digitalWrite(LED_BUILTIN, HIGH); //Interne LED, is aan/of uit, tegengesteld met relais.
}
if (buttonState == HIGH) //Stop de schakeling. (pull_up, dus andersom)
{
}
}
}