- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 6 von 6

Thema: Variable nimmt irgendwelche Werte an

  1. #1

    Variable nimmt irgendwelche Werte an

    Anzeige

    Powerstation Test
    Hallo!

    Voller freude über meinen RP5 wollte ich gleich mal einige Ideen für den Fahrenden stromfresser realisieren. Leider scheitere ich schon bei meiner 1. Idee, mittels Doppel-Berührung auf den Touchsensor eine Reaktion hervorzurufen.
    Eine Variable, die ich zur Verwaltung von Doppel-Berührungen brauche und die im Code immer zwischen 0 und 1 geswitcht wird, nimmt interessanter Weise Werte wie 40, etc. an.


    Wie ist das möglich?


    Hier der Code - TOUCH_EVAL ist die problematische Variable

    Code:
    '--------------------------------------------
    ' Vars
    '--------------------------------------------
    define TEMP_TOUCH byte
    define TOUCH1 byte	' 1. Druck
    define TOUCH2 byte	' 2. Druck
    define TOUCH_EVAL byte	' Soll Druck evaluiert werden (Verhindern von mehrfachzählen des Gleichen)
    define TOUCH_COUNTER word	' Abbruch von Auswertung nach längerer Inaktivität
    
    define MAKE_EXIT byte	' Soll am Ende des Durchlaufes abgebrochen werden?
    define MAKE_RUNNINGLEDS byte	' Lauflicht machen
    
    '--------------------------------------------
    ' Parametric Vars
    '--------------------------------------------
    define LEDVALUE byte
    
    '--------------------------------------------
    ' Init
    '--------------------------------------------
    TOUCH1 = 0
    TOUCH2 = 0
    TOUCH_EVAL = 1  
    
    MAKE_EXIT = 0
    MAKE_RUNNINGLEDS = 0
    
    '--------------------------------------------
    ' Human Interface
    '--------------------------------------------
    #hi
    TEMP_TOUCH = TOUCH ' buffering
    IF TEMP_TOUCH < 10 THEN TEMP_TOUCH = 0 ' tolerance
    TOUCH_COUNTER = TOUCH_COUNTER + 1
    
    IF TOUCH_COUNTER > 99 THEN goto SET_TOUCH_COMMAND
    IF TEMP_TOUCH = 0 THEN TOUCH_EVAL = 1
    IF TEMP_TOUCH > 0 AND TOUCH1 = 0 AND TOUCH_EVAL > 0 THEN goto SET_TOUCH1
    IF TEMP_TOUCH > 0 AND TOUCH1 > 0 AND TOUCH2 = 0 AND TOUCH_EVAL > 0 THEN goto SET_TOUCH2
    GOTO END_TOUCH_DEFS
    #SET_TOUCH1
    	TOUCH1 = 1
    	TOUCH_EVAL = 0
    	TOUCH_COUNTER = 0
    	GOTO END_TOUCH_DEFS
    #SET_TOUCH2
    	TOUCH2 = 1
    	TOUCH_EVAL = 0
    	TOUCH_COUNTER = 0
    	GOTO END_TOUCH_DEFS
    #SET_TOUCH_COMMAND
    	IF TOUCH1 = 1 AND TOUCH2 = 1 THEN MAKE_EXIT = 1
    	IF TOUCH1 = 1 AND TOUCH2 = 0 THEN MAKE_RUNNINGLEDS = 1
    	TOUCH_COUNTER = 0 : TOUCH1 = 0 : TOUCH2 = 0 ' reset vars
    	goto ei
    #END_TOUCH_DEFS
    
    LEDVALUE = TOUCH1 + TOUCH2 * 2
    
    if TOUCH >= 200 THEN MAKE_EXIT = 1
    
    print touch, touch_eval, touch1, touch2, touch_counter, temp_touch
    
    '--------------------------------------------
    ' Environment Interface
    '--------------------------------------------
    #ei
    
    '--------------------------------------------
    ' Reaction
    '--------------------------------------------
    #re
    IF MAKE_EXIT = 1 THEN GOTO EXIT
    IF MAKE_RUNNINGLEDS = 1 THEN GOSUB RUNNINGLEDS
    
    MAKE_RUNNINGLEDS = 0 : MAKE_EXIT = 0 ' reset reactions
    
    '--------------------------------------------
    ' Output
    '--------------------------------------------
    #out
    pause 5
    GOSUB SETLEDS
    
    ' RETURN TO BEGINNING
    GOTO hi
    
    '--------------------------------------------
    ' EXIT
    '--------------------------------------------
    #EXIT
    	GOSUB LEDSOFF
    	beep 600,5,0
    	print "ENDE"
    END
    Wie schon erwähnt - ich switch TOUCH_EVAL zwischen 0 und 1 und trotzdem kommen auch andere Werte vor, die mir natürlich alles zusammen haun.

    Ich wär euch sehr dankbar für Tips. Ich habs nach etnlichen Stunden Fehlersuchen aufgegeben.

    Ciao

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    du nimmst eine einfache if-schleife mit 2 bedingungen. wenn zahl=0 und berührung =40 then bedingung ist 1. dann , wenn zahl=1 und berührung =40 then zahl=0. mit deinem langen programm für die sensorberührung hast du schon deinen robby schon fast vollständig beschäftigt.
    setze den robby auf räder (ketten entfernen), dann fährt er ca 50%länger und viel, viel leiser.
    mfg pebisoft

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    25.11.2003
    Ort
    Freiberg
    Alter
    62
    Beiträge
    237
    Ja, Pebisoft hat Recht, für eine Variable, die nur die Werte 0 und 1 annehmen kann, sollte man auch keine Bytevariable verschwenden, da langt eine Bitvariable. Da die C-Control Wordvariablen immer an einer geraden Bytegrenze anfangen läßt, sollte man diese ganz an den Anfang des Programmes setzen und die Bytevariablen nummerieren. Es kann sein, daß durch die fehlende Nummerierung immer das erste Byte verwendet wird, wenn auch unter verschiedenen Namen.

    Gruß

    Torsten

  4. #4
    Danke für die Antworten.

    @Pebisoft: Das kann so leider nicht gehn - schön wärs
    Ich will sozusagen doppelklicks ermitteln und ich brauche dazu eine Variable die sagt, wann eine Berührung gewertet werden darf, und wann nicht.
    Wenn ich es so machen würde, wie du sagst, würde eine Berüherung die länger als einen Schleifendruchlauf dauert, automatisch als 2 Berühurngen gewertet - das ist nicht so gut.

    Das mit der "Kette" entfernen lass ich lieber bleiben


    @thille: ich wusste nicht, dass es einen Datentyp für BIT gibt, ich hab bis jetzt nur die Tutorials durchgemacht und bin bis jetzt noch nicht auf diesen Datentyp gestoßen


    ich probier grad einen Workaround aus, der die Variable auf 0 setzt, wenn sie größer als 1 ist. total crapy, aber was solls :/


    ps: if-schleifen gibt es nicht

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    was du jetzt schilderst (doppleklicks)kannst du mit dem robby-touchfeld nicht machen es ist zu träge (schlechte reaktionszeiten). nimm eine fernbedienung, dann bist du besser bedient. dieses "touchfeld" ist eine spielerei und kann technisch für eine vernünftige steuerungen nicht genutzt werden.

  6. #6
    bei meinem Algorithmus ist Trägheit egal. Dazu brauch ich ja die Variable TOUCH_EVAL ....

    aber danke für den Tip mit der Fernbedienung. Werd ich ausprobiern, sobald ich eine find

Berechtigungen

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

Solar Speicher und Akkus Tests