- SF800 Solar Speicher Tutorial         
Ergebnis 1 bis 10 von 69

Thema: Welche Möglichkeiten der Fehlersuche hat man beim Arduino?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    HaWe
    Gast
    switch/case ist nichts anderes als ein goto.
    Die case (irgendwas) sind nichts anderes als Sprungmarken für gotos, daher müssen es in C immer auch Integer-Konstanten sein (und keine Floats oder logische Ausdrücke).
    So ungern hier also manche das goto in C-Programmen sehen: es ist nur persönliches Ästhetikempfinden, nicht mehr und nicht weniger

    an fredyxx:
    wenn du sicher bist, dass deine Sprünge im richtigen Moment an die richtige Stelle führen, ist das kein Grund, sie durch switch/case Anweisungen zu ersetzen.
    Allerdings müssen sie beide in jedem Falle immer im richtigen Moment an die richtige Stelle führen.
    Bist du also sicher, dass sie stimmen, lass sie drinnen - und such den Fehler woanders.
    Goto Anweisungen innerhalb von switch/case ist allerdings reichlich doppelt gemoppelt und wirklich extrem unschöner Programmierstil.

    zum Debuggen mit serial:
    Du kannst Wartepunkte einfügen, indem du in dein Programm ein Warten auf einen Buttondruck und wieder loslassen einfügst:
    Code:
    #define testpin 13 // or whatever
    Code:
    while(!testpin);
    Serial.print(irgendwas);
    while(testpin);
    Geändert von HaWe (16.09.2016 um 14:03 Uhr)

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.03.2013
    Beiträge
    242
    Zitat Zitat von HaWe Beitrag anzeigen

    zum Debuggen mit serial:
    Du kannst Wartepunkte einfügen, indem du in dein Programm ein Warten auf einen Buttondruck und wieder loslassen einfügst:
    Code:
    #define testpin 13 // or whatever
    Code:
    while(!testpin);
    Serial.print(irgendwas);
    while(testpin);
    Hallo HaWe,

    funktioniert hat es so:

    Code:
    #define testpin 13 // or whatever
    Code:
    while(!testpin){
    Serial.print(irgendwas);
    }
    
    while(testpin);
    [/QUOTE]

    Nötig sind die geschweiften Klammern.

    Die letzte Zeile war bei mir nicht nötig.

    Aber prima die Idee!!

    vG

    fredyxx

  3. #3
    HaWe
    Gast
    mmmhhh... versuch es mal so wie ich ursprünglich schrieb -
    erst wartet er an der Stelle bis die Taste gedrückt wurde,
    sobald das der Fall war, macht er sein print,
    dann wartet er erneut, bis die Taste wieder losgelassen wurde.

    Zumindest war das meine ursprüngliche Idee.

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    Jungs, ihr prüft hier auf Konstanten. HaWe's Code
    Code:
    #define testpin 13
    
    while(!testpin);
    Serial.print(irgendwas);
    while(testpin);
    ist gleichzusetzen mit:
    Code:
    Serial.print(irgendwas);
    while(true); // Endlosschleife

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    56
    Beiträge
    2.814
    @Sisor:

    Das ist so schon richtig.
    in der pins_arduino.h
    ist je nach Board die Zuordnung der µC Pins zu den Arduino Pin Nummern festgelegt.
    Bsp.:
    static const uint8_t PinB5 = 13;

    Damit ist "while(!testpin);" eine Prüfung darauf ob PIN 13 nicht gesetzt ist, da PIN13 der Name "testpin" zugewiesen wurde.

    Auszug aus der revisions.txt der 1.6.11 vom 17.8.2016.
    * The new, variant-specific pins_arduino.h files now provides additional
    macros with information about the characteristics of the board (e.g.
    the locations of the SPI and TWI pins, and the number of digital and
    analog pins).
    Geändert von i_make_it (19.09.2016 um 07:15 Uhr)

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von i_make_it Beitrag anzeigen
    @Sisor:

    Das ist so schon richtig.
    in der pins_arduino.h
    ist je nach Board die Zuordnung der µC Pins zu den Arduino Pin Nummern festgelegt.
    Bsp.:
    static const uint8_t PinB5 = 13;

    Damit ist "while(!testpin);" eine Prüfung darauf ob PIN 13 nicht gesetzt ist, da PIN13 der Name "testpin" zugewiesen wurde.
    #define testpin 13
    testpin wird durch das #define durch die Zahl 13 ersetzt. Nichts anderes, auch nicht durch "PIN13", und "!13" ist in C false. Das bei einer while-loop, die nur aus einem Befehl besteht, geschweifte Klammern nötig sind, hätte einen sofort auf die Spur bringen müssen.

    Es sind also Vergleiche mit Konstanten, und alles was schon zur Compilezeit false ergibt, wird gar nicht erst compiliert.

    Aber BTT
    Zitat Zitat von fredyxx Beitrag anzeigen
    Wie dem auch sei. Ich habe die Ursache gefunden und die hatte nichts mit goto o.ä. zu tun.

    Es handelte sich um zeitliche und logische Abläufe bei der STOP-Tastenauswertung, die ich nicht vollständig durchschaut und richtig umgesetzt hatte.
    Natürlich hat dein Problem mit den gotos zu tun. Nur damit kann man so unstrukturierten, unlesbaren und damit unwartbaren Code schreiben. Und die Chance, durch verständliche Labels etwas Ordnung in das Chaos zu bringen, wurde auch vertan. Da sind dann Fehler wie " die ich nicht vollständig durchschaut und richtig umgesetzt hatte " unvermeidbar. Der Code könnte in einem Lehrbuch als Beispiel dienen, warum man gotos meiden soll.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  7. #7
    HaWe
    Gast
    fang bitte nicht wieder mit dem goto-Sch**** an, das Thema ist durch, und daran lag es auch nicht.
    Das mit dem testpin oder !testpin war allerdigs tatsächlich nicht richtig , es musste heißen
    while(!digitalRead(testpin));
    while( digitalRead(testpin));
    https://www.arduino.cc/en/Reference/DigitalRead

    sorry for that!

Ähnliche Themen

  1. 18 PWM Kanäle - Welche Möglichkeiten?
    Von Hardware-Entwickler im Forum Elektronik
    Antworten: 7
    Letzter Beitrag: 19.12.2015, 14:16
  2. Antworten: 8
    Letzter Beitrag: 21.10.2014, 09:18
  3. Möglichkeiten der AVR/Arduino PWM?
    Von ichbinsisyphos im Forum Arduino -Plattform
    Antworten: 10
    Letzter Beitrag: 23.02.2013, 09:03
  4. Spannungen mit PC-Computer Messen. Welche Möglichkeiten?
    Von petermetertr im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 14
    Letzter Beitrag: 26.08.2009, 16:36
  5. [ERLEDIGT] 20 mikrovolt-Hirnwellen registrieren-Welche möglichkeiten?
    Von Thomas Wellheim im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 13
    Letzter Beitrag: 18.12.2004, 18:43

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress