- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 20 von 20

Thema: Über UART empfangener Text auswerten in einer If-Schlaufe

  1. #11
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Zitat Zitat von Barracuda_cy
    ... bekomm ich immer "LCD aus" angezeigt, egal was ich dem MC sende.

    If B1 = 65 Then Cls : Locate 1 , 1 : Lcd "LED A"

    If B1 = 66 Then Cls : Locate 1 , 1 : Lcd "LED B"

    If B1 = 67 Then Cls : Locate 1 , 1 : Lcd "LED Aus"
    Du kannst zwar mehrere Befehle durch Doppelpunkt getrennt in eine Zeile schreiben. Das heißt aber nicht, dass die alle zu der Bedingung gehören. Bei dir wird nur der CLS Befehl bedingt ausgeführt. Locate und Lcd dagegen immer. Also schreibt er zuerst "LED A", dann "LED B" und dann "LED Aus" aufs LCD. Die letzte Ausgabe bleibt dann stehen.
    Wenn du unbedingt bei deinen schwer lesbaren Ein-Zeilern bleiben möchtest, sollte die Syntax so aussehen:

    If B1 = 65 Then : Cls : Locate 1 , 1 : Lcd "LED A" : End IF

  2. #12
    okay danke, es zeigt nun immerhin nicht mehr von anfang an LCD aus an^^

    und mit der Übersichtlichkeit hast du recht, hab den code dahingehend wieder geändert...

    aber ich bin echt am verzweifeln, wieso geht das nicht wie es doch eigentlich sollte?!

    Hier wieder mein Code (das ganze config zeug vom LCD und so obendran hab ich jetzt mal weggelassen, das stimmt ja auch)

    Dim B1 As Byte

    Cls
    If B1 = 65 Then
    Cls
    Locate 1 , 1
    Lcd "LED A"
    End IF
    If B1 = 66 Then
    Cls
    Locate 1 , 1
    Lcd "LED B"
    End If
    If B1 = 67 Then
    Cls
    Locate 1 , 1
    Lcd "LED Aus"
    End If

    End

  3. #13
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Du gibst aber schon ein großes "A" ein, oder? Das macht hier einen Unterschied.
    In deinem letzten Code fehlt auch das B1 = Inkey(). Ist das noch drin?
    Wenn keine der 3 Alternativen zuschlägt, würde ich hinter dem Inkey() den eingelesenen Wert direkt einmal ausgeben. Dann siehst du ja, was da ankommt. Also so:
    LCD B1
    Dahinter kein CLS, damit der Wert sichtbar bleibt.

  4. #14
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    52
    Beiträge
    765
    Die Hauptschleife sollte schon drin bleiben...
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  5. #15
    So, ich glaub ich hab das Problem gefunden, hier zuerst der Code

    Dim B1 As Byte
    B1 = Inkey()
    Cls
    Lcd B1
    Waitms 1000

    Cls
    If B1 = 65 Then
    Cls
    Locate 1 , 1
    Lcd "LED A"
    End IF
    If B1 = 66 Then
    Cls
    Locate 1 , 1
    Lcd "LED B"
    End If
    If B1 = 67 Then
    Cls
    Locate 1 , 1
    Lcd "LED Aus"
    End If

    End

    So, wenn ich nun den Controller resete und gerade dann den richtigen Grossbuchstaben sende bekomme ich den zugehörigen Text angezeigt, wenn ich jedoch nen kurzen Moment warte gehts nicht mehr. Woran liegts? Bzw was ist die Lösung des Problems?

    Liebe Grüsse

  6. #16
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    52
    Beiträge
    765
    Habe ich doch gerade geschrieben...

    Mein Code von gestern 22:01 Uhr sollte auch funktionieren...
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  7. #17
    so, jetzt funktionierts zur zufriedenheit

    Hier der Code

    $regfile = "m32def.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    $crystal = 14745600
    $baud = 9600


    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.4 , Db6 = Portc.5 , Db7 = Portc.6 , E = Portc.2 , Rs = Portc.0
    Cls
    Dim B1 As Byte
    B1 = Waitkey()
    Cls
    Lcd B1
    Waitms 1000

    Cls
    If B1 = 65 Then
    Cls
    Locate 1 , 1
    Lcd "LED A"
    Print "Empfangen A"
    End IF
    If B1 = 66 Then
    Cls
    Locate 1 , 1
    Lcd "LED B"
    Print "Empfangen B"
    End If
    If B1 = 67 Then
    Cls
    Locate 1 , 1
    Lcd "LED Aus"
    Print "Empfangen C"
    End If

    End



    Vielen Dank für deine geduldige Hilfe

  8. #18
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    52
    Beiträge
    765
    Das das zu Deiner Zufriedenheit funktioniert wundert mich aber ein wenig. Das Programm startet, wartet, bis ein Zeichen über UART reinkommt. wartet dann 1 Sekunde, leert das LCD und gibt das empfangene Zeichen aus, führt je nach Zeichen eine Aktion aus (oder auch nicht, bei falschem Zeichen) und dann? Wahrscheinlich hängt er sich irgendwo auf und macht einen Neustart. Oder der Watchdog ist aktiv und erledigt das...
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  9. #19
    Ne, das Programm hängt sich eigentlich nirgends auf!...
    Und ja, das mit der Sekunde warten mach ich dann im endgültigen Programm schon anders, das soll ja nur mal n'beispiel programm sein

  10. #20
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    52
    Beiträge
    765
    Wenn das der gesamte Code ist, dann läuft das Programm nur 1mal durch und dann Ende...
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad