Go Down

Topic: Drehscheibe Modellbahn mit RF24 (Read 4609 times) previous topic - next topic

postmaster-ino

Hi

Ein klein Wenig darfst Du schon selber machen - Ideen habe ich genug, bekomme Diese aber, auch aus Mangel an Zeit, kaum umgesetzt.
Und nur ein kleiner Teil davon hat was mit Arduino zu tun!!

Ach so ... Du sprichst von DEINEM Sketch?
Meine Idee dazu steht weiter oben, mit etwas erkennbarem 'guten Willen' wäre wohl nicht nur ich auch bereit, Dich weiter in die richtige Richtung zu schubsen.

Du verstehst die State-Maschine nicht?
DAS kann man (in diesem Fall Du) ja ändern.

MfG
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

Acki1985

Sorry ich habe mich falsch ausgedrückt. Ich meinte ich verstehe nicht wie eine Statemachine mir dabei helfen soll.

-Es muss der Encoder eingelesen werden (das macht der Code)
-Schritte berechnet werden (das macht der Code)
-Motor angesteuert werden bis Schritte auf 0 sind (Hall am Magnet vorbei ist) das macht der Code noch          nicht (da häng ich momentan)

- entscheidung ob der Motor links oder rechts drehen muss (das macht er auch noch nicht)

Acki1985

Könnt ihr mir einen Tip geben wie man es hinbekommt das man bei der Berechnung 48+1=1 bekommt und nicht 48+1=49?

Tommy56

(48+1)%48

Aber ob Dir das was bringt?

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

Acki1985

So bin mal wieder bei dem Projekt. Also wäre es richtig das die Abfrage des des Drehencoders in dem Zustandsautomaten immer der Grundzustand (Schleife) ist?

Acki1985

Könnte man das auch so machen?

Code: [Select]

 if (schritte != 0){
      while ((schritte != 0) && (enter == true) && (sensor == HIGH)) {
       
          schritte--;
          Serial.println("Schritte");
          Serial.println(schritte);
          delay(2000);
      }
    }
     else if (schritte == 0) {
          enter = false;
          gleisAlt = wertSpeichern;
       }


Tommy56

Zu if (schritte != 0) ist else schon schritte != 0.
Da musst Du nicht noch ein zusätzliches if (schritte == 0) hinzufügen.

Ansonsten weiß ich nicht, was Du damit aussagen willst.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

Acki1985

Das Problem ist das die While Schleife permanent läuft obwohl der Sensor nicht betätigt wird. ?

Tommy56

Was brauchst Du ein while? Du hast doch loop.
Was sagt den die Ausgabe der Schritte?

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

Acki1985

Naja ich versuche halt die errechneten Schritte über den Sensor runter zu zählen. Immer wenn der Sensor betätigt wird, soll schritte - 1 gerechnet werden bis schritte = 0 sind.

postmaster-ino

#55
Jan 11, 2019, 10:52 pm Last Edit: Jan 11, 2019, 10:55 pm by postmaster-ino
Hi

DAS könnte daran liegen, daß der Sensor NIE neu gesetzt wird.
Nur, weil Du einer Speicherstelle den Namen Sensor gegeben hast und auch irgend wo einen Digital-In darin speicherst, steht darin nicht automatisch der aktuelle Zustand von besagtem Sensor.

Schritte wird wohl negativ sein und immer negativer werden - vermute ich.
Sonst sollte die While-Schleife nach 'Schritte' Schritten auch beendet werden.


MfG

PS: Weder enter noch sensor werden innerhalb der Schleife neu eingelesen - dann müssen Die auch nicht in die While-Bedingung.
Oder, wie Tommy schon schrieb: loop() ist eine Schleife - Die reicht dafür komplett.
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

Acki1985

Also müsste ich den Sensor Zustand zwischenspeichern und dann wieder zurück setzen?

postmaster-ino

Hi

Nein - Du musst den Sensor-Zustand EINLESEN, wenn DU auf Veränderungen wartest.
Diese While macht nicht, was Du Dir denkst.
Schreibe auf, WAS darin passieren soll - wie immer: möglichst kleine Schritte

Akut wirfst Du die While-Schleife an und machst, bis auf das Runterzählen der Schrtte, Einen pro While-Durchlauf, Nichts.
Da ist kein Sensor drin, Nicht, ob vll. Jemand zwischenzeitlich irgendwo einen Knopf gedrückt hat, weil Da eine Lok nicht richtig stand und die Drehbühne gerade Gehacktes draus machen will ... der Arduino hört erst auf, wenn Er fertig ist!!

Überdenke Dein Konzept, Blink_without_delay wirst Du hier im Thread schon gehört haben - darin besteht Deine Lösung.

MfG
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

Acki1985

Jetzt weis ich was du meinst. Klar die 2 Sekunden macht er ja nix, weder auf nen Sensor reagieren sonst noch irgendwas anderes. Hatte am Anfang zum einlesen des Encoder Tasters vorallem schon mit millis() gearbeiteitet und baue mir dann hier mit dem Delay ne Krücke rein.

Tommy56

Nicht nur mit dem delay. Du prüfst auch enter und sensor nicht ab. Wenn die egal sind, kannst Du sie aus der Bedingung raus lassen, ansonsten musst Du im while deren Zustand prüfen und aktualisieren.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

Go Up