Neuling brauch Hilfe beim programmieren seiner Uhr.

  • Hallo an alle die das lesen.

    Ich bin gerade erst mit AutoIt angefangen und habe vorher auch noch keine ander Programmierspache gelernt.

    Was ich bisher weiß habe ich aus verschiedenen Tutorials gelernt.


    Mein zeil ist es erst mal eine Uhr / Wecker zu programmieren.

    Ich habe ihr schon solche einen gefunden.

    Spoiler anzeigen
    [autoit]

    #include <Date.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $time = InputBox("Weckkzeit", "Weckzeit eingeben", @HOUR & ":" & @MIN & ":" & @SEC)
    $string = StringSplit($time, ":")

    [/autoit] [autoit][/autoit] [autoit]

    If (UBound($string) <> 4) Or (Not IsArray($string)) Then
    MsgBox(48, "Error", "Falsches Eingabeformat, bitte nach diesem Format eingeben:" & @CRLF & " Stunde:Minute:Sekunde")
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $tcur = _Date_Time_GetLocalTime()
    If _Date_Time_SystemTimeToTimeStr($tcur) = $time Then
    _aktion()
    Exit
    EndIf
    Sleep(200)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _aktion()
    MsgBox(0, "", "Uhrzeit erreicht!")
    EndFunc ;==>_aktion

    [/autoit]


    So eine will ich aber nicht,weil ich dort nicht verstehe wie er funktioniert.

    Ich versuche so eine Uhr wo immer 1000 mikrosekunden dazu gerechnet werden.

    Genau das ist das wo für ich hilfe brauch. Ich verstehe nicht wie man die Aktuellezeit in Mikrosekunden umrechnet.

    Das Rechnen ist kein Problemm ,sonden die Uhrzeit endsprechend aufzuteilen.

    So weit bin ich mit den Script :

    Spoiler anzeigen
    [autoit]

    ; $Aktuellezeit : Die aktuelle Uhrzeit soll fortlaufend angezeigt werden.
    ; $Weckzeit : Soll die Zeit sein wann die MsgBox auf geht.
    ; $Verbleibendezeit : Soll ein Countdown sein bis die MsgBos aufgeht.

    [/autoit] [autoit][/autoit] [autoit]

    #include <GUIConstants.au3>
    #include <Date.au3>

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 307, 218, 195, 131)
    $Aktuellezeit = GUICtrlCreateLabel("Aktuelleuhrzeit", 80, 48, 161, 25) ; $Aktuellezeit ist der Wert nach der Verarbeitung wieder ausgegeben wird
    $Weckzeit = GUICtrlCreateInput("23:59:59", 72, 88, 177, 21) ; $Weckzeit ist der Wert mit den das Programm rechnen soll.
    $Button1 = GUICtrlCreateButton("Start", 72, 120, 177, 25, 0)
    $Verbleibendezeit = GUICtrlCreateLabel("Verbleibendezeit", 72, 160, 178, 25)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    $zeit = _DateTimeFormat(_NowCalc(),5) ;Speicher die Uhrzeit in die Variabele $zeit
    $zeit2 = 123 ;$zeit2 soll die sich verringende verbleibende Zeit sein.
    If $zeit2 = 0 Then ; Wenn, Dann funktin
    MsgBox(1,"Es ist so weit" , "Ab ins Bett !!! ")
    EndIf
    GUICtrlSetData ($Aktuellezeit , $zeit) ; GUICtrlSetData liest den Wert aus $zeit und übergibt ihn in $Aktuellezeit
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1 ; Case erkennt ob der Button gedrückt wurde SEHR WICHTIG
    $zeit1 = GUICtrlRead ($Weckzeit) ; GUICtrlRead liest den Wert aus $Weckzeit und übergibt es in $zeit1
    GUICtrlSetData ($Verbleibendezeit ,$zeit2 ) ; GUICtrlSetData liest den Wert aus $zeit2 und übergibt ihn in $Verbleibendezeit
    EndSwitch
    WEnd

    [/autoit]


    Es wäre nett wenn jemand mir es zu ende schreibt und die einzelnen funktionen / Zeiche die erklärt.

    Oder mir jemand sagen kann mit welchen Funktionen / Zeichen ich es schffen kann und wie sie arbeiten.


    Danke im vorraus

    MfG AlexAlex

  • Also dein Text liest sich irgendwie recht komisch. Dennoch versuch ich dir mal irgendwie zu helfen.Du kannst deine Zeitwerte in die einzelnen Zeiten(Zahlen) aufteilen wenn du ein StringSplit nutzt.

    [autoit][/autoit][autoit][/autoit][autoit]

    #include <Date.au3>
    #include <array.au3> ;Benötigt für _Array - Funktionen

    [/autoit][autoit][/autoit][autoit]

    $Zeit = _DateTimeFormat(_NowCalc(),5) ;Speichert die Uhrzeit in die Variabele $Zeit
    $aZeit = StringSplit($Zeit,":") ;Teilt den String (deine Zeit) an dem angegebenen Zeichen in Arrays auf
    _ArrayDisplay($aZeit) ; Alle Werte des Arrays abrufen

    [/autoit]

    Dann hast du in den Array $aZeit[1] - [3] die Std, Min, Sek stehen und kannst Sie verwenden.

    Ich hoffe das war das was du gemeint hast.

    Edit: Nächstes mal solltest du es evtl in den Bereich "Unterstützung und Hilfe" posten. Da wird dich sicher schneller geholfen. :)

    Einmal editiert, zuletzt von Prixma (15. Dezember 2010 um 07:38)

  • Hallo!

    Zitat

    Ich versuche so eine Uhr wo immer 1000 mikrosekunden dazu gerechnet werden.
    Genau das ist das wo für ich hilfe brauch. Ich verstehe nicht wie man die Aktuellezeit in Mikrosekunden umrechnet.

    Um die Mikrosekunden zu errechnen, teilt man einfach die ermittelten Sekunden durch 1000000.
    Die Frage ist allerdings, ob du es schaffst, jede Mikrosekunde auch anzeigen zu lassen!
    Also einen Timer, der jede Sekunde in 1000000 Teile teilt und diese dann innerhalb dieser Sekunde hochzählt.
    Viel Spass dabei!
    Das Problem dabei ist, dass das Betriebssystem dir dein Programm regelmäßig unterbricht, um auch andere Programme "gleichzeitig" laufen zu lassen. Diese Unterbrechung wirft natürlich alles an genauer Berechnung im Mikrosekundenbereich über den Haufen.
    Eine weitere Möglichkeit wäre, die Prozessor-Takte seit dem Rechnerstart abzufragen. Mit einer (internen) Umrechnung ist das genau das, was

    [autoit]

    Timerinit() Timerdiff()

    [/autoit]

    machen. Aber einzelne Mikrosekunden einzufangen wirst du nicht schaffen....

    1000 Mikrosekunden sind 1 Millisekunde, da sollte das wenigstens Ansatzweise möglich sein....

  • kurzes Beispiel, in der Console werden die Millisekunden ausgegeben

    Spoiler anzeigen
    [autoit]

    #include<date.au3>
    #include <GUIConstantsEx.au3>
    ;timertest

    [/autoit] [autoit][/autoit] [autoit]

    global $t=timerinit(),$sec=0

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $hgui=guicreate("timer",200,50)
    $label=GUICtrlCreateLabel("",20,20,200,30)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    adlibregister("Millisekunde",1) ;theoretisch jede Millisekunde aufrufen

    [/autoit] [autoit][/autoit] [autoit]

    while GUIGetMsg()<>-3
    wend

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    func Millisekunde();praktischer Aufruf alle x Millisekunden
    $time=_nowtime()
    consolewrite($time&" : "&int(timerdiff($t))&@crlf)
    GUICtrlSetData($label,$time&" : "&int(timerdiff($t)))
    if stringright($time,1)<>$sec Then
    $t=timerinit()
    $sec=stringright($time,1)
    endif
    endfunc

    [/autoit]
  • Danke für die Antworten und endschuldigung für mein Schreibstil.


    [autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    #include <Date.au3>
    #include <array.au3> ;Benötigt für _Array - Funktionen

    [/autoit][autoit][/autoit][autoit]

    $Zeit = _DateTimeFormat(_NowCalc(),5) ;Speichert die Uhrzeit in die Variabele $Zeit
    $aZeit = StringSplit($Zeit,":") ;Teilt den String (deine Zeit) an dem angegebenen Zeichen in Arrays auf
    _ArrayDisplay($aZeit) ; Alle Werte des Arrays abrufen

    [/autoit]

    Das von Prixma ist das was ich gesucht habe, Jetzt kann ich die std, und min in der Uhrzeit in die Sekunden umrechnen.

    Um die Uhr dann immer 1 Sekunde weiter zahlen zulassen.


    Aber das Script von Andy wird mir sicher auch noch bein lehren helfen. :thumbup:


    So ich werde ann mal versuchen ob ich es jetzt mit den neuen Wissen es schaffe sie zu ende zu Programmieren.

    MfG AlexAlex