H0 Overweg

Arduino specifieke Software
Berichten: 3
Geregistreerd: 18 Sep 2022, 10:47

H0 Overweg

Berichtdoor tankje53 » 18 Sep 2022, 11:06

Wie kan mij helpen, ik heb een H0 overweg gecreëerd dat op zich prima werkt, nu heb ik daar een geluid (middels een sd card reader) aan gehangen dat als de sensor getriggerd word het geluid gaat afspelen. alleen het volgende als de bomen sluiten stopt het geluid(bel) hoe kan ik totdat de beomen weer open zijn het geluid (bel) blijft ?

#define GATE_SPEED 50 // [ms] lower number is higher servo speed
#define GATE_DELAY 1500 // [ms] delay time before gate closes
#define GATE_DELAY1 3000 // [ms] delay time before gate closes
#define GATE_OPEN 88 // servo angle
#define GATE_CLOSED 179 // servo angle
#define BLINK_SPEED 500 // [ms] smaller number is faster blinking
#define BLINK2_SPEED 900 // [ms] smaller number is faster blinking
#define SERVO_PIN 3 // outp pin 3
#define AUDIO_PIN 9 // outp pin 9
#define LED1_PIN A2 // outp pin A2
#define LED2_PIN A3 // outp pin A3
#define LED3_PIN A4 // outp pin a4
//#define CS_PIN 4 // outp pin 4
//#define SCK_PIN 13 // outp pin 13
//#define MOSI_PIN 11 // outp pin 11
//#define MOSO_PIN 12 // outp pin 12
#define SENSOR1_PIN 5 // input pin 5 inkom links
#define SENSOR2_PIN 6 // input pin 6 uitgaan links
#define SENSOR3_PIN 7 // input pin 7 inkom rechts
#define SENSOR4_PIN 8 // input pin 8 uitgaan rechts
#define SD_CARD 4 // input pin 4



byte state = 1, transition;
byte led1, led2, blink_enabled;
byte led3, blink2_enabled;
byte angle = GATE_OPEN;
byte setpoint = GATE_OPEN;
unsigned long time_to_blink;
unsigned long time_to_blink2;
unsigned long time_to_close_gate;
unsigned long time_to_open_gate;
unsigned long time_for_servo;



#include "TMRpcm.h"
#include "SPI.h"
#include "SD.h"
#include <Servo.h>
Servo gate_servo;
TMRpcm tmrpcm;

void setup() {
pinMode(SENSOR1_PIN, INPUT_PULLUP);
pinMode(SENSOR2_PIN, INPUT_PULLUP);
pinMode(SENSOR3_PIN, INPUT_PULLUP);
pinMode(SENSOR4_PIN, INPUT_PULLUP);
pinMode(LED1_PIN, OUTPUT);
pinMode(LED2_PIN, OUTPUT);
pinMode(LED3_PIN, OUTPUT);
pinMode(SD_CARD, INPUT_PULLUP);

gate_servo.attach(SERVO_PIN);
gate_servo.write(angle);
tmrpcm.speakerPin = 9;

Serial.begin(9600);
if (!SD.begin(SD_CARD))
Serial.println("SD fail");
return;
Serial.println("Overweg Klaar, Wacht op trein, Oranje knippert");
blink_enabled = 0; // led1,2
blink2_enabled = 1;// led3
}

void loop() {
switch(state) {
case 1: // Wachten
if(digitalRead(SENSOR1_PIN) == LOW) transition = 12;
if(digitalRead(SENSOR3_PIN) == LOW) transition = 17;
break;
case 2: // Rood knippert bomen sluiten
if(millis() > time_to_close_gate) transition = 23;
break;
case 21: // Rood knippert bomen sluiten
if(millis() > time_to_close_gate) transition = 231;
break;
case 3: // Rood knippert bomen sluiten
if(digitalRead(SENSOR2_PIN) == LOW) transition = 34;
break;
case 31: // Rood knippert bomen sluiten
if(digitalRead(SENSOR4_PIN) == LOW) transition = 34;
break;
case 4: //Vertrek trein openen bomen
if(digitalRead(SENSOR2_PIN) == HIGH) transition = 45;
if(digitalRead(SENSOR4_PIN) == HIGH) transition = 45;
break;
case 5: // Vertrek trein openen bomen
if(angle == GATE_OPEN) transition = 56;
break;
case 6: // gate open , but still blinking
if (millis() > time_to_open_gate) transition = 56;
}

switch(transition) {

case 12: // Sensor 1
Serial.println("Aankomst trein, rood knippert, oranje uit");
tmrpcm.play("spoorbel.wav");
blink_enabled = 1; // led1,2
led1 = 1;
led2 = 1;
blink2_enabled = 0;// led3
led3 = 0;
time_to_close_gate = millis() + (unsigned long)GATE_DELAY1;
transition = 0;
state = 2;
break;

case 23: //
Serial.println("Tijd voor overweg sluiten");
gate_servo.attach(SERVO_PIN);
setpoint = GATE_CLOSED;
transition = 0;
state = 3;
break;

case 17: // Sensor 3
Serial.println("Aankomst trein, rood knippert, oranje uit");
tmrpcm.play("spoorbel.wav");
blink_enabled = 1; // led1,2
led1 = 1;
led2 = 1;
blink2_enabled = 0;// led3
led3 = 0;
time_to_close_gate = millis() + (unsigned long)GATE_DELAY1;
transition = 0;
state = 21;
break;

case 231: //
Serial.println("Tijd voor overweg sluiten case");
gate_servo.attach(SERVO_PIN);
setpoint = GATE_CLOSED;
transition = 0;
state = 31;
break;

case 34:
Serial.println("Vertrek trein, Open bomen");
gate_servo.attach(SERVO_PIN);
setpoint = GATE_OPEN;
transition = 0;
state = 4;
break;

case 45:
Serial.println("Vertrek trein, Open bomen");
gate_servo.attach(SERVO_PIN);
setpoint = GATE_OPEN;
transition = 0;
state = 5;
break;

case 56:
Serial.println("Overweg Klaar, Wacht op trein, Oranje knippert");
time_to_open_gate = millis() + (unsigned long)GATE_DELAY;
blink_enabled = 0; // led1,2
led1 = 0;
led2 = 0;
blink2_enabled = 1;// led3
led3 = 1;
gate_servo.detach(); // to avoid servo flutter
transition = 0;
state = 1;
break;


}
if (millis() > time_for_servo) {
time_for_servo = millis() + (unsigned long)GATE_SPEED;
if (angle < setpoint) angle++;
if (angle > setpoint) angle--;
gate_servo.write(angle);

}
if(blink_enabled == 1) {
if(millis() > time_to_blink) {
time_to_blink = millis() + (unsigned long)BLINK_SPEED;
led1 = !led1;
led2 = !led1;
}

}
if(blink2_enabled == 1) {
if(millis() > time_to_blink) {
time_to_blink = millis() + (unsigned long)BLINK2_SPEED;
led3 = !led3;
}
}
tmrpcm.setVolume(5);
digitalWrite(LED1_PIN, led1);
digitalWrite(LED2_PIN, led2);
digitalWrite(LED3_PIN, led3);


}

Advertisement

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: H0 Overweg

Berichtdoor shooter » 18 Sep 2022, 13:24

als je de muziek start dan moet dat maar 1 keer doen dus start sound en dan niet nog een keer starten dus de state veranderen in geluid is aan en dan na 1 seconde de bomen sluiten maar transition is iets anders dan state: ofwel teken je schema nogmaals maar dan alleen mar met state en niet transition maar een aparte state zoals state 21 is gewoon een mooie denkfout.
paul deelen
shooter@home.nl

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 22 gasten