- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 8 von 8

Thema: Was macht dieser Befehl: digitalWrite(ziffer[0][j], (segmente[i][j]==1)?HIGH:LOW);

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von HeXPloreR
    Registriert seit
    08.07.2008
    Ort
    Soltau - Niedersachsen
    Alter
    46
    Beiträge
    1.369
    Hallo Marco,

    dass das Programm sehr weit nach oben springt sollte klar sein, da die Sub-Funktion "pinAnazeige" hier nunmal endet, zurück in die loop geht, die dann endet und von neuem beginnt.

    Warum die letzten drei prints nicht ausgegeben werden wenn das "error" kommt, kann ich nicht sehen. Hier befindet man sich ja schon in der if-Anweisung die das print "error" enthält.
    Das "Error" selbst hat innerhalb dieses Strings hier jedenfalls nichts damit zu tun und kann nicht irgendwie aktiv werden. Es sei den der String wird noch irgendwie irgendwo ausgewertet - sieht aber nicht danach aus.

    Versuche mal den Inhalt vom ersten (fehlendem) print manuell in einen definitven String zu ändern (z.B. Serial.print("Ziffer 0"); ). Wenn der dann nach dem "error" auch kommt dann tippe ich darauf das der Inhalt von print jetzt noch fehlerhaft ist. Print scheint gar keinen Inhalt zu haben. Was ja nicht sein kann wenn alle Prints davor in der gleichen Form "print(digitalread ... )" funktionieren. Warum sehe ich aber nicht.

    Viele Grüße
    Jörg

    Edit1:
    Unglücklich finde ich immer so Bedingungen wie z.B. " >=7 " zu wählen wenn man auf eine Zahl prüft ob sie größer als 6 ist. Da würde ich persönlich immer direkt " >6 " bevorzugen, weil man hier direkt sehen kann worum es geht, nämlich um einen Test auf "größer als 6". Die 7 kommt zwar nach 6, ist aber im Bezug auf die Prüfung bei Ganzzahlen nicht relevant.
    Das gleiche sinngemäß umgekehrt für die for-Schleifen z.B. bei "(..., j <=10 , ... )".

    Edit2:
    Um die "if 's" alles zusammenzufassen würde ich Dir ncht empfehlen den Operator ?: zu benutzen. Wie Du selbst gesehen hast erzeugt er eher Verwirung, bei der großangelegten Verwendung in Blöcken ist diese umso größer.
    Daher schaue Dir dazu lieber ein "switch-case" Konstrukt an.
    Geändert von HeXPloreR (01.04.2015 um 05:36 Uhr)

  2. #2
    Benutzer Stammmitglied Avatar von Chevy
    Registriert seit
    07.12.2004
    Ort
    Biblis
    Alter
    57
    Beiträge
    33
    Hi Jörg,

    Zitat Zitat von HeXPloreR Beitrag anzeigen
    Das "Error" selbst hat innerhalb dieses Strings hier jedenfalls nichts damit zu tun und kann nicht irgendwie aktiv werden.
    Hatte ich mir auch so gedacht, kann eigentlich nicht da beim print Befehl innerhalb der " " keine Befehle stehen. Habe das aber auch nicht weiter verfolgt, da diese Serial.print nur zur Kontrolle eingebaut waren und da ich momentan keine Zeit habe mich länger daran aufzuhalten, sondern das Projekt muss bald stehen habe ich die Funktion erst mal als fertig abgespeichert und die nächste Funktion angegangen.

    Edit1:
    Unglücklich finde ich immer so Bedingungen wie z.B. " >=7 " zu wählen wenn man auf eine Zahl prüft ob sie größer als 6 ist. Da würde ich persönlich immer direkt " >6 " bevorzugen, weil man hier direkt sehen kann worum es geht, nämlich um einen Test auf "größer als 6". Die 7 kommt zwar nach 6, ist aber im Bezug auf die Prüfung bei Ganzzahlen nicht relevant.
    Das gleiche sinngemäß umgekehrt für die for-Schleifen z.B. bei "(..., j <=10 , ... )".
    Da hast Du völlig recht, ich mag dieses negieren der Negierung auch nicht. Bei den FOR Schleifen habe ich das auch nicht drin, da ja das > oder < sich auf den Inhalt eines Array bezieht und nicht auf Zahlen sondern auf Spalten bzw. Felder. Möglicherweise ahnst Du schon warum ich das jetzt bei den If Abfragen so gewählt habe, (hier darf man mal lachen) ich war mir nämlich nicht sicher ob eine Ganzzahl auch wirklich intern als Ganzzahl behandelt wird. Durch die Funktion mit dem Modulo bin ich etwas durcheinander geraden, da ich dachte der Rest einer Division ist ja das ....,XY also das ,23 bei zB. 1,23. Bis ich die Funktion richtig verstanden hatte, hatte ich die Abfragen schon geschrieben und damit verhindern wollte das eine 6,23 als >6 angesehen wird. Ok Ok werde es ändern


    Edit2:
    Um die "if 's" alles zusammenzufassen würde ich Dir ncht empfehlen den Operator ?: zu benutzen. Wie Du selbst gesehen hast erzeugt er eher Verwirung, bei der großangelegten Verwendung in Blöcken ist diese umso größer.
    Daher schaue Dir dazu lieber ein "switch-case" Konstrukt an.
    Hast ebenfalls recht, den Code kann man dann nur noch schwer durchschauen. Bei den zuweisungen der "einsen" und "nullen" zu den Pins ist das ja noch i.O. aber wenn ich jetzt verschiedene Bedingungen damit definiere dann kann ich das kaum selbst, nach ein paar Tagen, nachvollziehen. Das mit dem switch-case muss ich mir noch mal genauer anschauen, ist schon gut 2 Jahre her als ich das letzte mal damit was programmiert hatte. Zur Zeit habe ich aber ein anderes Problem, nähmlich mit der Wire Funktion. Aber dazu mach ich einen anderen Tread auf, hat ja mit der obigen Funktion nichts zu tun.

    Gruß Marco

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    67
    Beiträge
    2.435
    Hallo Jörg,
    Zitat Zitat von HeXPloreR Beitrag anzeigen
    Edit1:
    Unglücklich finde ich immer so Bedingungen wie z.B. " >=7 " zu wählen wenn man auf eine Zahl prüft ob sie größer als 6 ist. Da würde ich persönlich immer direkt " >6 " bevorzugen, weil man hier direkt sehen kann worum es geht, nämlich um einen Test auf "größer als 6". Die 7 kommt zwar nach 6, ist aber im Bezug auf die Prüfung bei Ganzzahlen nicht relevant.
    Das gleiche sinngemäß umgekehrt für die for-Schleifen z.B. bei "(..., j <=10 , ... )".
    Es kommt immer darauf an was man macht und was schlussendlich übersichtlicher ist. z.B.
    Code:
      if (a == 0) f0();
      if (a == 1) f1();
      if (a == 2) f2();
      if (a == 3) f3();
      if (a >= 4) f4();
    ist sicher übersichtlicher als:
    Code:
      if (a == 0) f0();
      if (a == 1) f1();
      if (a == 2) f2();
      if (a == 3) f3();
      if (a   > 3) f4();
    Auch wenn man mit Konstanten arbeitet, kann es Sinn machen:
    Code:
      if (('a' <= x) && (x <= 'z')) f0();
    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

Ähnliche Themen

  1. Verständnisfrage: HIGH/LOW?
    Von BurningWave im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 16.04.2008, 18:34
  2. was bewirkt dieser bascom befehl?
    Von alper im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 18.04.2007, 20:07
  3. High und Low
    Von keha im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 11.04.2007, 10:49
  4. High Low simulieren?
    Von JojoKoester im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 23.07.2006, 17:43
  5. i2c low-byte high-byre
    Von rille im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 08.11.2005, 14:56

Berechtigungen

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

12V Akku bauen