- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 11

Thema: Arduino-Code: fehlende Definition, benötige Hilfe

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    55
    Beiträge
    2.199
    In dem geposteten Progrämmchen wird der Button überhaupt nicht abgefragt.
    Weil er auch nicht mit nem Interrupt verbunden ist, kann der also auch nichts bewirken.
    Der ist also völlig wirkungslos...

    Frag einfach zyklisch (also in der loop() ) den Button auch mal ab:

    buttonState=digitalRead(PUSH_BUTTON).

    Dann läufts auch.
    Zuverlässiger wirds, wenn du den Button noch etwas entprellst.

    Allerdings: ein- und ausschalten per Tastendruck wird das Programm, so wie ich das sehe, nicht, sondern die LED's laufen nur, wenn der Button gedrückt _ist_.
    Lässt du ihn los, gehn die wieder aus, weil sich dann buttonState wieder ändert.

    Anmerkung: buttonState kannst du als bool deklarieren, da die nur true und false können muss- das spart Speicher.

    Mal so aus Neugier: welcher Stümper hat das Buch geschrieben?
    Grüssle, Sly
    ..dem Inschenör ist nix zu schwör..

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    31.03.2014
    Beiträge
    165
    Danke für Deine Antwort. Das habe ich tatsächlich auch noch übersehen... bzgl. Dein Hinweis zu PUSH_BUTTON und Loop...
    Da scheinen wohl noch paar andere Stellen im Code nicht korrekt zu sein. Ich habe zum Verlag und zu einem der Autoren per eMail Kontakt aufgenommen. Ich hoffe, dass man mir antwortet - und evt. Korrekturen zusendet. Ein Lehrbuch mit Fehlern, das ist ein Widerspruch in sich. Ich hoffe sehr, dass sich nicht noch mehr Fehler zeigen in dem Buch.
    Hier ein Link zum Buch/Verlag:
    https://www.franzis.de/maker/raspber...ach-e-book-pdf

    Andi

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    55
    Beiträge
    2.199
    Ja..Franzis nimmt leider so ziemlich alles...

    Und es stimmt: der Code ist ziemlicher Pfusch. Ich weiss zwar nicht, was du alles raus gelöscht hast, aber wenn es wirklich _nur_ Kommentare waren, kommt der nicht mal in die Nähe dessen, was er tun sollte *grusel
    Grüssle, Sly
    ..dem Inschenör ist nix zu schwör..

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    31.03.2014
    Beiträge
    165
    Hier mal der ursprüngliche Code:

    Code:
    // +++ QUELLCODE FÜR DEN DRUCKTASTER MIT PERMA-LED-LAUFLICHT +++ //
    
    // Definition von Variablen für den Taster + LEDs
    const int LED_PINS[] = {2, 3, 4, 5};
    const int PUSH_BUTTON = 6;
    int buttonStateOld = 0;
    bool buttonFlag = false;
    
    void setup() {
      // Initialisiere digitale Pins als Ausgang in einer For-Schleife
      for (int a = 0; a < 4; a++) {
        pinMode(LED_PINS[a], OUTPUT);
      }
    
      // Initialisiere den Drucktaster als Eingang
      pinMode(PUSH_BUTTON, INPUT);
    }
    
    void loop() {
      if (buttonState != buttonStateOld) {
        // Ändere das Flag nur, wenn der Taster gedrück wird
        if (buttonState == HIGH) {
          if (buttonFlag == false) {
            buttonFlag = true;
          } else {
            buttonFlag = false;
          }
        }
    
        // Speichere den aktuellen Wert des Tasters
        buttonStateOld = buttonState;
      }
    
      if (buttonFlag == true) {
        for (int a = 0; a < 4; a++) {
          // Schalte eine LED an
          digitalWrite(LED_PINS[a], HIGH);
          // Sende eine Nachricht an den seriellen Monitor
          Serial.print("LED Status: LED ");
          Serial.print(LED_PINS[a]);
          Serial.println(" is ON");
          // Warte 50 Millisekunden
          delay(50);
        }
        
        for (int a = 0; a < 4; a++) {
          // Schalte eine LED aus
          digitalWrite(LED_PINS[a], LOW);
          // Sende eine Nachricht an den seriellen Monitor
          Serial.print("LED Status: LED ");
          Serial.print(LED_PINS[a]);
          Serial.println(" is OFF");
          // Warte 50 Millisekunden
          delay(50);
        }
      }
    }
    In Thread #1 hatte ich die Kommentare gelöscht. Ebenfalls den seriellen Monitor. Und die Delays von 50 auf 200 geändert.

    Ob der Code "...nicht mal in die Nähe dessen (kommt), was er tun sollte...", kann ich nicht beurteilen. Möglicherweise verfolgt der Autor ein späteres Ziel und man könnte speziell diesen Code zwar anders schreiben, aber evt. damit das spätere Ziel nicht schon im Blick haben. Wie gesagt, das kann ich mit meinem Kenntnisstand nicht einschätzen, hoffe aber darauf, dass (trotz der enthaltenen Fehler im aktuellen Code) der Autor den Leser an einem "roten Faden" konsequent durchs Buch führt.


    Andi
    Geändert von Andi#87 (19.03.2023 um 11:04 Uhr)

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    55
    Beiträge
    2.199
    Bau da mal die von mir vorgeschlagene Zeile ein.
    Ich bin mir relativ sicher: die LED's werden nur funktionieren, wenn man den Button gedrückt _hält_.

    Zum Entprellen wird hier wohl das delay() mit genutzt, das ist zwar ziemlich hemdsärmelig, müsste aber halbwegs funktionieren.

    Für buttonStateOld brauchts auch keineswegs eine int- da nur zwei Möglichkeiten bestehen, ist eine bool völlig ausreichend.
    Geht in dem Testprogramm natürlich auch, aber irgendwann kommst du an den Punkt, wo du mal den Speicher voll kriegst, daher: gewöhn dir besser an, für Variablen nicht mehr Speicher zu reservieren (genau das passiert am Anfang nämlich) als nötig.

    Was den Aufbau des Buches angeht: ich weiss ja nicht, wie du es durcharbeitest, aber möglicherweise sind da bewusst Fehle im Code, die auf den nächsten Seiten dann untersucht werden?
    Grüssle, Sly
    ..dem Inschenör ist nix zu schwör..

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    31.03.2014
    Beiträge
    165
    Was den Aufbau des Buches angeht: ich weiss ja nicht, wie du es durcharbeitest, aber möglicherweise sind da bewusst Fehle im Code, die auf den nächsten Seiten dann untersucht werden?
    Das war auch eine Option, die ich erhoffte, aber da habe ich keine Hinweise oder Lösungen/Korrekturen gefunden. Ansonsten wäre das ja durchaus eine gute Möglichkeit, etwas zu lernen. Die Codes werden für die Käufer des Buches auch im Download angeboten. Auch dort ist keine Korrektur zu finden.

    Danke für Deine Tips, werde ich in den kommenden Tagen ausprobieren. Heute komme ich nicht mehr dazu.

    Andi

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 29.01.2013, 19:33
  2. Bascom code auf Arduino Board Flashen **Hilfe**
    Von KoaxPilot im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 13
    Letzter Beitrag: 23.06.2011, 09:14
  3. Benötige Hilfe bei der CC2 auf RP5
    Von blade im Forum C-Control II
    Antworten: 28
    Letzter Beitrag: 19.03.2006, 17:02
  4. Hilfe: BASCOM Definition files?
    Von reiner im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 17.12.2005, 15:03
  5. benötige Hilfe bei meinem Code
    Von Reeper im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 09.12.2005, 15:36

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests