German B4R Timer geht nicht

Zecke

Member
Licensed User
Hallo,

Wenn keine Verbindung aufgebaut werden kann wollte ich eine LED blinken lassen. Der Timer wird aber nicht gestartet??

B4X:
Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'Public variables can be accessed from all modules.
    
    Public Serial1 As Serial
    Private Blinker As Timer
    Private StatusLEDpin As Pin
    Private wifi As ESP8266WiFi
    
End Sub

Private Sub AppStart
    Serial1.Initialize(115200)
    Log("AppStart")
    
    StatusLEDpin.Initialize(4,StatusLEDpin.MODE_OUTPUT)
    Blinker.Initialize("Timer1_Tick", 700) 
    
End Sub


Sub WIFIConnect(unused As Byte)

    If wifi.Connect2("SSID","PSSWD") Then 
        Log("Verbunden.")
        Log("ip: ", wifi.LocalIp)
    Else
        Log("Failed to connect. Try Again...")
        Blinker.Enabled = True
        WIFIConnect(0)
        Return
    End If
    
    
End Sub


Private Sub Timer1_Tick

    Dim currentState As Boolean = StatusLEDpin.DigitalRead
    Dim NewState As Boolean = Not(currentState)
    StatusLEDpin.DigitalWrite(NewState)
    
End Sub
 

Zecke

Member
Licensed User
Ja sehe ich, habe extra den connect mit dem WLan verhindert.
Mir scheint, "wifi.Connect2" verhindert den Start des Timers. Benutze ich den nicht, dann funktioniert Der BlinkTimer.
 

Kiffi

Well-Known Member
Licensed User
ist doch initialisiert bei APPstart...
ja, aber nicht richtig. Guck mal genau hin.

Deins:
B4X:
Blinker.Initialize("Timer1_Tick", 700)
Meins:
B4X:
Blinker.Initialize("Timer1", 700)
;)

(es sei denn, B4R funktioniert anders als B4J)

Grüße ... Peter
 

MarkusR

Well-Known Member
Licensed User
...Mir scheint, "wifi.Connect2" verhindert den Start des Timers. Benutze ich den nicht, dann funktioniert Der BlinkTimer.
wo/wie rufst Du die "Sub WIFIConnect" auf ?
Im Fehler Fall rufst Due die gleiche Sub nochmal auf?
B4X:
WIFIConnect(0)
Ist das dann nicht quasi eine Endlosschleife?
 

Zecke

Member
Licensed User
Ja, ist ne Endlosschleife. Geht aber weil, wenn keine Verbindung hergestellt werden kann wifi.Connect2 nen Timeout hat. Aber selbst wenn ich den Timer vor dem ersten aufrufen von wifi.Connect2 auf Enabled schalte geht der Timer nicht weil dann wohl alles andere blockiert wird. Dachte dass Timer trotzdem weiter laufen.

Wie kriege ich also ein Blinken hin, während versucht wird zu connecten... hmmm
 

MarkusR

Well-Known Member
Licensed User
Also bei B4J oder B4A muss die Sub erst wieder verlassen werden damit die Ereignisse wieder abgearbeitet werden.
Ich stelle mir das so vor das da auch eine Funktion/Sub ist die sich um alles kümmert.
Und wenn die blockiert ist bzw. nicht durchlaufen wird kann die auch keine Methode wie diesen _Tick aufrufen.
Tuh diese zwei Zeilen mal auskommentieren und provoziere einen Verbindungs Fehler.
B4X:
WIFIConnect(0)
Return
Und wenn die Verbindung ok ist dort
B4X:
Blinker.Enabled = False
LedOff
sonst Tickt / Blinkt der ja weiter. + die LED wieder aus.
 
Last edited:

Zecke

Member
Licensed User
Hatte ich zuvor auch schon probiert. Sobald ich wifi.Connect2 aufrufe stoppt der Blinktimer bzw, geht gar nicht erst an. Wenn jetzt keine Verbindung aufgebaut werden kann liefert wifi.Connect2 ein Timeout und die nächste Quellcodezeile wird ausgeführt. Jetzt fängt's auch an zu blinken, da der Timer nicht mehr blockiert ist. Aber ich muss ja jetzt wifi.Connect2 ja wieder ausführen lassen, um weiter eine Verbindungsherstellung zu versuchen. Daher die Endlosschleife. Denn wifi.Connect2 macht nur einen Versuch. Und der Blinker stoppt wieder.

Mein Fazit ein Blinken während der Verbindungsversuche nicht möglich (jedenfalls nicht mit meinen beschränkten Fähigkeiten). Ich versuche es mal mit Arduino direkt...

Grüsse..
 

MarkusR

Well-Known Member
Licensed User
Dann würde ich die LED an machen vor dem Connect2 und danach wieder aus.
Zumindest siehste dann wo es hängt.
Ich vermute dieses wifi haste nur als Lib oder? Sonst könntest Du es ja umbauen.
 
Top