Newbeeprobleme...

  • huhu ;) hab mich selber schon herumprobiert, habe es nicht zusammengeracht

    1.) weiter unten seht ihr mein Programm leicht schematisch angedeutet... er soll so etwas aufführen

    send("2")
    sleep(5000)
    send("2")

    das hätte ich gern das er dies 1 MAL !!!! ausführt in einer While Schleife.
    Mein Problem ist das wenn ich das so reinschreibe das er Zeugs immer wieder wiederholt wird und mir die 5000ms die while schleife anhalten... " es sollen praktisch 2 Programmflüsse stadtfinden " er soll einerseits die While schleife ganz normal ausgeführen PLUS ohne die Schleife zu stören diese Kommandos ausführen PARALLE. Er geht in die Schleife, macht das was er sowieso schon immer getan hat PLUS er drückt mir auf 2 pause und dann wieder auf 2. So als hätte ich ein 2 tes autoit Programm gestartet das dies ausführt...

    Programm:

    2.) Mein oberes Problem könnte ich z.b auch lösen wenn ich 2 autoit Programme gleichzeitig starte... gibt es eine Möglichkeit dsa ich mit einem autoit programmcode 2 Programmflüsse hat ? Der Pc geht ja praktisch dumm jede Zeile nach. Was ich im Punkt 1 geschrieben habe ist ja auch ungefähr das um was es hier geht... kann man praktisch 2 Programme in ein Programm packen, das der Compiler " gleichzeitig " Zeilen liest.. so als würde ich 2 verschiedene Autoit Programme starten...

    Mein Problem ist nämlich das ich gern so etwas Interruptgesteuertes machen würde... also " Wenn soetwas passiert " und zwar rüberall im Programm und nicht nur in einer while Schleife in der er praktisch auf " böse " Dinge wartet... also er liest gerade send("2000") auf einmal kommt ein Interrupt " Programm denkt sich, scheise wir haben interrupt, wir führen nun eine Code an einer komplett anderen Stelle im Programmcode aus " und lassen alles liegen und stehen. Nachdem er mit dem Interrupt fertig ist soll er wieder in normale Programmroutine zurückspringen..


    ich hoffe ihr versteht was ich meine, tu mich schwer das auszudrücken was ich will ;) wäre echt nett wenn mir wer helfen könnte

    2 Mal editiert, zuletzt von Bullz (26. Januar 2008 um 05:23)

  • danke, scheint genau so etwas zu sein was ich gesucht habe... für punkt 2.

    Punkt 1 wäre nett wenn mir wer novh hilft. Ist sicher nur ein 2 Zeilenmist :( und ich komme nicht drauf

  • Möglichkeit 1

    [autoit]

    $start = TimerInit()

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

    While 1

    If TimerDiff($start) >= 5000 Then Send('2')

    If TimerDiff($start) >= 10000 Then Send('2')

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

    EndIf
    Sleep
    (100)
    ; anderer Code in der Schleife WEnd

    [/autoit]

    so wuerde es super klappen, ich müsste ihm nur einen bereich vorgeben z.b zwischen 5000 und 6000 den sonst würde if grösser 5000 ja immer zutreffen... weil er automatisch weiterzäht... kann man das im autoit mit einem & operator irgendwie hinschreiben ? mathematisch gesehen ein intervall zwischn 5000 und 6000 z.b

    Möglichkeit 2

    mir ist eine 2 te mir mehr zusagende Möglichkeit eingefallen...

    [autoit]


    while 1

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

    if timerdiff(timer) <= 700
    send("2")
    endif

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

    if timerdiff(timer) >= 8000
    send("2")
    ;und hier muss ich die Zeit " ausschalten / zerstören oder einfach auf den fixen wert zwischen 700 und 800 setzen
    endif

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

    wend

    [/autoit]

    2 Mal editiert, zuletzt von Bullz (27. Januar 2008 um 16:49)

  • ok vielen dank, schein gut zu funktionieren ;)

    Einmal editiert, zuletzt von Bullz (27. Januar 2008 um 19:36)

  • lol ich merke gerade, Ich lerne Programmieren :) deine Beispiel mit der Variable das man dann praktisch mit der Zeit und dem Wert einer Variable Abbruchbedingungen schaffen kann, ist ja übergeil... hier hab ich jetzt die Lösung die so funktioniert wie ich es wollte ;) deine antwort war die Hilfe zur Selbsthilfe thx

    ach ja, ich bin mir sicher viele if anweisungen untereinander werden sehr gern programmiert, ist aber wahrscheindlich eher verpöhnt oder ? Kann ich mir jedenfalls bestens vorstellen hehe

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

    $n = 0
    While
    If $n < 1 Then
    Send('2')
    $start = TimerInit()
    $n += 1
    EndIf

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

    if TimerDiff($start) >= 5000 AND $n = 1 then
    send("2")
    $n += 1
    EndIf

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

    Sleep(100)
    ; anderer Code
    WEnd

    [/autoit][autoit][/autoit][autoit][/autoit]
  • huhu, neues Problem ich werd dafür aber keinen neuen Treat aufmachen

    [autoit]


    sleep(5000)
    if PixelSearch(50,103, 127, 114, 0xFFFF00 ) OR PixelSearch(50,103, 127, 114, 0xFE8331 ) Then

    MsgBox(0, "", "gelb und orange")

    Else

    MsgBox(0, "", "nicht gelb und nicht orange")
    EndIf

    [/autoit]

    ich hätte gern das mein Programm eine Box überwacht. Wenn er in dieser Box die Farbe gelb und Orange findet soll er den den Pfadt der If weisung springen, wenn er kein gelb oder orange findet in den anderen. Funktioniert aber nicht, er nimmt immer den ersten Pfadt

    • Offizieller Beitrag

    Oft hilft ja doch das Lesen der Hilfe ;)
    PixelSearch gibt ein 2-Elemente Array zurück mit der ersten gefundenen Position im Bereich (Array[0]=x, Array[1]=y). Wird nichts gefunden gibts einen Fehler.
    Also ist die Abfrage: If PixelSearch() Then sinnlos.
    Hier mußt du abfragen:

    [autoit]

    $ret = PixelSearch(...)
    If @error Then
    ; nichts gefunden
    Else
    ; gefunden an Position $ret[0] / $ret[1]
    EndIf

    [/autoit]
  • ja thx klappt auch so bloss habe ich ein Problem das ich nur jeweils 1 abfrage machen kann mit error.. und ich müsste dann mein GANZES Programm 2 mal in den gleiche if teil reinkopieren. Einmal für gelb und einmal für orange. Das wird doch sicher irgendwie besser gehen

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

    $gelb = PixelSearch(50,103, 127, 114, 0xFFFF00 ) OR $orange = PixelSearch(50,103, 127, 114, 0xFE8331 )

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

    If @error Then

    MsgBox(0, "", "nicht gelb orange")
    ;mein fettes Programm

    Else
    MsgBox(0, "", "gelb orange")

    EndIf

    [/autoit]

    das war mein optisch bester Versuch, hab 4 bis 5 mal das anderes hinschreiben probiert, so nimmt er mir das nicht an. 2 if schleifen wie gesagt wären sehr unschön weil dann mein programmzeilen verdoppelt werden...

    2 Mal editiert, zuletzt von Bullz (28. Januar 2008 um 18:27)

  • Machs doch so:

    Spoiler anzeigen
    [autoit]

    $error = 0
    $gelb = PixelSearch(50,103, 127, 114, 0xFFFF00 )
    If @error Then $error = 1
    $orange = PixelSearch(50,103, 127, 114, 0xFE8331 )
    If @error Then $error = 1

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

    If $error Then

    MsgBox(0, "", "nicht gelb und orange")
    ;mein fettes Programm

    Else
    MsgBox(0, "", "gelb und orange")

    EndIf

    [/autoit]
  • thx für die antwort, programm schaut auch gut aus, funktioniert aber irgendwie nicht, liefert immer das gleiche hmm kann auch an meinen falschen Kordinaten liegen die ich angegeben habe, muss das mal checken... aber das Programm an sich würde funktionieren ? Weil wenn dem so ist werd ich mal genau schauen ob nicht ich einen Fehler gemacht habe bei den Farben etc...

  • so da großes Problem eure Lösungen funktionieren nicht, jedenfalls habe ich jetzt wirklich lange getestet mit Paint am Destop. Und ich könnt mich in den A.... langsam beissen weils der letzte Teil ist vom Programm und der mich natürlich richtig ärgern muss... vorweg ich glaube das 2 hintereinander ausgeführte PixelSearch Probleme machen aber seht selbst....

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

    ;diese 2 Programme habe ich nur zum Test geschrieben das ich ausschliesen kann das ich zu dumm bin Koardinaten
    ;richtig anzugeben und auszuschliesen das es vl auch eine falsche Farbcode verwendet habe.

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

    ; FUNKTIONIERT !!!!

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

    sleep(2000)
    $error = 0

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

    $gelb = PixelSearch(100,200, 101, 201, 0xFFFF00 )
    If @error Then $error = 1

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

    If $error Then

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

    MsgBox(0, "", "kein gelb")

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

    Else
    MsgBox(0, "", "gelb")

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

    EndIf

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

    ;~ FUNKTIONIERT !!!!

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

    sleep(2000)
    $error = 0

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

    $rot = PixelSearch(100,200, 101, 201, 0xFF0000 )
    If @error Then $error = 1

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

    If $error Then

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

    MsgBox(0, "", "kein rot")

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

    Else
    MsgBox(0, "", "rot")

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

    EndIf

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

    ; Funktioniert NICHT
    ;~ dieses Programm funktioniert nicht. Er nimmt immer den " kein Gelb und rot " pfadt egal welche farbe ich ihm gebe,
    ;~ und wenn das noch nicht komisch ist sehe das nächste Beispile...

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

    sleep(2000)
    $error = 0
    $gelb = PixelSearch(100,200, 101, 201, 0xFFFF00 )
    If @error Then $error = 1
    $rot = PixelSearch(100,200, 101, 201, 0xFF0000 )
    If @error Then $error = 1

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

    If $error Then

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

    MsgBox(0, "", "kein gelb und rot")

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

    Else

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

    MsgBox(0, "", "gelb und rot")

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

    EndIf

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

    ; Funktioniert nicht
    ; hier nimmt er IMMER "gelb und rot" egal welche Farbe.Im Unterschied vom oben habe ich 2 300 ms sleeps eingebaut
    ; damit passiert genau das er den anderen Zweig immer nimmt ... egal welche farbe ich ihm anbiete...

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

    sleep(2000)
    $error = 0
    $gelb = PixelSearch(100,200, 101, 201, 0xFFFF00 )
    sleep(300)
    If @error Then $error = 1
    $rot = PixelSearch(100,200, 101, 201, 0xFF0000 )
    sleep(300)
    If @error Then $error = 1

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

    If $error Then

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

    MsgBox(0, "", "kein gelb und rot")

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

    Else

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

    MsgBox(0, "", "gelb und rot")

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

    EndIf

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

    vl gibt es ja eine andere Codekostenelation wo der Fehler nicht auftritt ;( heulheul

  • [autoit]

    ; sobald ich nur eine " Zeile " weglasse funktioniert die erste Abfrage wieder... mir kommt echt vor es liegt am @error. Vl muss man das irgendwie zurücksetzen ? @error = 0 oder so was in der Art funktioniert nicht. Zeit hab ich auch schon sehr große ausprobiert um zu verhinden das es ein Zeitproblem war...

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

    [autoit]

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

    ; Version 1
    $error = 0
    $gelb = PixelSearch(100,200, 101, 201, 0xFFFF00 )
    sleep(300)
    If @error Then $error = 1
    ;$rot = PixelSearch(100,200, 101, 201, 0xFF0000 )
    sleep(300)
    If @error Then $error = 1

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

    ; Version 2
    $error = 0
    $gelb = PixelSearch(100,200, 101, 201, 0xFFFF00 )
    sleep(300)
    If @error Then $error = 1
    $rot = PixelSearch(100,200, 101, 201, 0xFF0000 )
    sleep(300)
    ;If @error Then $error = 1

    [/autoit]

    bei diesen beiden Programmen funktioniert die erste Abfrage aber wieder korrekt... bei den oberen nicht funktiorenden Programmen geht gar nix. Habe das getestet zum herauszufinden welcher der beiden Zeilen Probleme macht aber es machen beide Zeilen zusammen das Problem. Gibt keinen Einzeltäter....


    undefined

  • Ach so, du willst, dass es ausgeführt wird, wenn Gelb ODER Orange ist. Das war für Gelb UND Orange.
    Gelp Oder Orange geht so:

    Spoiler anzeigen
    [autoit]

    $error = 0
    $gelb = PixelSearch(50,103, 127, 114, 0xFFFF00 )
    If @error Then $error = 1
    $orange = PixelSearch(50,103, 127, 114, 0xFE8331 )
    If @error And $error Then
    $error = 1
    Else
    $error = 0
    EndIF

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

    If $error Then

    MsgBox(0, "", "nicht gelb oder orange")
    ;mein fettes Programm

    Else
    MsgBox(0, "", "gelb oder orange")

    EndIf

    [/autoit]