modelspoor overweg code

Geef hier suggesties voor extra onderwerpen of andere dingen die je graag gewijzigd zou willen zien
Berichten: 3
Geregistreerd: 18 Sep 2022, 10:47

modelspoor overweg code

Berichtdoor tankje53 » 03 Jan 2023, 13:52

Goedemorgen, nu heb ik een code voor het aansturen van een modelspoor overweg, nu werkt alles prima (zonder belgeluid) het belgeluid begint zodra er een trein over een trigger rijd dan gaan de lampjes rood knipperen en de bel bellen, tot het moment dat de bomen dicht gaan, dan stopt het bellen.
nu ben ik al even bezig om waar de code van de bel te plaatsen maar toto op heden geen succes, ofwel knipperen en bellen maar geen slagbomen ofwel knipperen en geen bel (om gek van te worden)
dus misschien heeft iemand hier een idee waar het stukje code te plaatsen om en knipperen en spoorbomen te sluiten, en uiteraard als de trein voorbij is dat na openen bomen de bel weer stopt.

// updated 1-1-2023
//
#define GATE_SPEED 50
#define GATE_DELAY 100
#define GATE_DELAY1 1500
#define GATE_OPEN 1 // voor achterkant =88
#define GATE_CLOSED 88 // voor voorkant = 1
#define BLINK_SPEED 500
#define BLINK2_SPEED 900
#define LED1_PIN A2
#define LED2_PIN A3
#define LED3_PIN A4
#define SERVO_PIN 3
#define SD_CARD 4
#define SENSOR1_PIN 5
#define SENSOR2_PIN 6
#define SENSOR3_PIN 7
#define SENSOR4_PIN 8
#define AUDIO_PIN 9
//
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"
TMRpcm tmrpcm;
#include <Servo.h>
Servo gate_servo;
//
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;
blink_enabled = 0;
blink2_enabled = 1;
if (!SD.begin(SD_CARD))
Serial.println("SD fail");
return; }
//
void loop() {
switch(state) {
case 1:
if(digitalRead(SENSOR1_PIN) == LOW) transition = 1;
if(digitalRead(SENSOR3_PIN) == LOW) transition = 1;
break;
case 2:
if(millis() > time_to_close_gate) transition = 2;
break;
case 3:
if(digitalRead(SENSOR2_PIN) == LOW) transition = 3;
if(digitalRead(SENSOR4_PIN) == LOW) transition = 3;
break;
case 4:
if(angle == GATE_OPEN) transition = 4;
break; }
//
switch(transition) {
case 1:
blink_enabled = 1;
led1 = 1;
led2 = 1;
blink2_enabled = 0;
led3 = 0;
time_to_close_gate = millis() + (unsigned long)GATE_DELAY;
transition = 0;
state = 2;
break;
case 2:
gate_servo.attach(SERVO_PIN);
setpoint = GATE_CLOSED;
transition = 0;
state = 3;
break;
case 3:
gate_servo.attach(SERVO_PIN);
setpoint = GATE_OPEN;
transition = 0;
state = 4;
break;
case 4:
blink_enabled = 0;
led1 = 0;
led2 = 0;
blink2_enabled = 1;
led3 = 1;
time_to_open_gate = millis() + (unsigned long)GATE_DELAY;
gate_servo.detach();
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;
tmrpcm.play("spoorbel.wav");}} <-----------------------------

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

Gaat dus om de code '' tmrpcm.play("spoorbel.wav"); '' en uiteraard '' tmrpcm.stopPlayback();''

vr groeten rob

Advertisement

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

Re: modelspoor overweg code

Berichtdoor shooter » 03 Jan 2023, 22:12

doe eens een CTRL T dan zie je wat meer structuur want ik denk dat er wat teveel haken zijn gebruikt en eerst de rode lampen aan en dan pas de servo langzaam laten sluiten ook attach maar 1 keer in de setup doen en in de loop alleen maar een gate_servo.write doen als deze inderdaad anders is dan de vorige loop als blink_enabled ==1 dan blijft dat dus aan dus hij start elke milliseconde de track ook zo bij stop trouwens maar dan kom ik weer een spekhaak tegen dus ergens klopt het niet helemaal.
paul deelen
shooter@home.nl

Berichten: 68
Geregistreerd: 04 Sep 2021, 08:31

Re: modelspoor overweg code

Berichtdoor RobGood » 04 Jan 2023, 11:42

Rob, je gebruikt een uno?
Een library die de arduino een wav speler maakt?
Een library die twee servo's aanstuurd
En nog een library voor het lezen van een sd card.

Hmmm.... denk dat die libraries in elkaars vaarwater zitten te roeren, dat verklaard dat delen het wel apart doen maar niet samen.
Dus de afzonderlijke delen apart even testen, geeft ook de gelegenheid de layout van je programma leesbaarder te maken.

Maar evenzogoed denk ik niet dat dit allemaal tegelijk in 1 arduino past.
Voor een paar dubbeltjes koop je in het verre china standalone audiospelers die alleen maar een aan en uit signaal nodig hebben. Daar zit denk ik de oplossing. Zaterdag op houten heb ik die bij me op mijn standje. Laat ik ook mijn versie van de overweg zien....
Succes....rob.

Berichten: 80
Geregistreerd: 02 Nov 2022, 13:03

Re: modelspoor overweg code

Berichtdoor ThHe » 07 Jan 2023, 12:57

Snel door je code gaan valt het volgende statement op
Led2 = !led1 moet dat misschien led2=!led2 zijn?

Terug naar Forum suggesties

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 8 gasten