Arduino uno reageert niet op drukknoppen

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);
}

Heeft u een tekening van uw circuit en van de voedingen?

PS/ Ik zou u aanraden een van de vele knopbibliotheken te gebruiken, zoals Button in easyRun , OneButton, Toggle, EasyButton, Bounce2, ...

Als ik naar HW-130 zoek op het web kom ik shields tegen die van een 74HC(T)595 zijn voorzien (bv https://componentsexplorer.com/hw-130-motor-control-shield-for-arduino-datasheet en https://lastminuteengineers.com/l293d-motor-driver-shield-arduino-tutorial/). Die shields kun je niet aansturen zoals je dat nu doet. Kun je zien of je shield een 595 IC heeft of een duidelijke foto plaatsen van je bord.

Ik zou beginnen er wat debugging in te zetten op cruciale plaatsen met Serial.println().

Ik vermoed dat je verder niet zo geïnteresseerd bent in het feit dat de knop is ingedrukt maar in het feit dat de knop ingedrukt wordt. Als je dat niet doet en de knop te lang ingedrukt houdt zal je wisselmotor constant schakelen tussen links en rechts.

Verder is het combineren van een millis() gebaseerde benadering met delay() elders niet echt een geweldig idee :wink:

Je gebruikt INPUT_PULLUP dus zou je geen externe weerstand nodig moeten hebben.

Heb geen tekening, wel een foto. Hierop zijn de drukknoppen (nog ) niet aangesloten. Wel is het zo dat, wanneer ik de arduino voor de eerste keer opstart, de aangesloten wisselmotor wel één keer omgaat wat mij doet vermoeden dat het probleem ligt bij de aansturing van de schakelaars.

20260107_140951 by Gardevil _, on Flickr

Ik denk dat ik dat verkeerd heb gezien :frowning:

volgens mij werkt dit

// Buttons
for (int i = 0; i < 4; i++) {
pinMode(btnPins[i], INPUT_PULLUP); // interne pull-up
}

niet zoals verwacht.

A0 - A3 bij een uno zijn dacht ik pin 14, 15, 16 en 17 want je wil ze als digitale pin aansturen

sluit je de wisselmotor aan op wissel of gelijkspanning? als het met wisselspanning is, zit de condensator dan wel juist? die motoren schijnen gelijkspanning prettiger te vinden

https://forum.beneluxspoor.net/index.php?topic=70428.0

IK stuur DC aan. Die pinnen ga ik proberen.