Hallo,
ik ben nieuw in het arduino wereldje en loop tegen een probleem aan.
Voor mijn modeltrenbaan probeer ik mijn wissels te sturen met Tortoise wisselmotoren, aangestuurd door een arduino uno en motorschield hw-130.
4 wissels per arduino elke wissel aangestuurd door een momentschakelaar.
Wanneer ik de arduino aanzet gaat het wissel om. Daarna, wanneer ik de druktoets voor dat wissel gebruik, gebeurt er niets.
Wat doe ik fout? Aansluitingen drukknop op A0 - A1 ........
Moet ik een weerstand tussen drukknop en massa (of +) plaatsen?
Waar ga ik in de fout. Alvast mijn dank.
Frank
// Besturing van 4 Tortoise wisselmotoren via HW-130 (L298) motorshield
// Eén momentschakelaar per wissel – toggle werking
// Versie met analoge inputs A0–A3
// --- Pin definities ---
const int btnPins[4] = {A0, A1, A2, A3}; // Momentary switches op analoge inputs
const int mA[4] = {8, 12, 7, 4}; // Motor A-pins (IN1, IN3, IN5, IN7)
const int mB[4] = {9, 13, 6, 3}; // Motor B-pins (IN2, IN4, IN6, IN8)
// Wisselstanden (0 = richting A, 1 = richting B)
bool state[4] = {0, 0, 0, 0};
// Voor debounce
unsigned long lastPress[4] = {0,0,0,0};
const unsigned long debounceTime = 200;
// Pulsduur voor Tortoise beweging
const int pulseTime = 400; // ms
void setup() {
// Buttons
for (int i = 0; i < 4; i++) {
pinMode(btnPins[i], INPUT_PULLUP); // interne pull-up
}
// Motor outputs
for (int i = 0; i < 4; i++) {
pinMode(mA[i], OUTPUT);
pinMode(mB[i], OUTPUT);
digitalWrite(mA[i], LOW);
digitalWrite(mB[i], LOW);
}
}
void loop() {
for (int i = 0; i < 4; i++) {
if (digitalRead(btnPins[i]) == LOW) { // knop ingedrukt
if (millis() - lastPress[i] > debounceTime) {
toggleSwitch(i);
lastPress[i] = millis();
}
}
}
}
void toggleSwitch(int id) {
state[id] = !state[id]; // wissel stand toggelen
if (state[id] == 1) {
// Richting B
digitalWrite(mA[id], HIGH);
digitalWrite(mB[id], LOW);
} else {
// Richting A
digitalWrite(mA[id], LOW);
digitalWrite(mB[id], HIGH);
}
delay(pulseTime);
// Motor stoppen
digitalWrite(mA[id], LOW);
digitalWrite(mB[id], LOW);
}
