- 12V Akku mit 280 Ah bauen         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 24

Thema: Wie deklariere ich die Pollswitches beim ASURO

  1. #11
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo xyphrox,

    gleich mehrere Fehler.
    - Funktionsaufrufe in C immer mit () Klammern, auch wenn keine Parameter übergeben werden.
    - Goto und Labels in C sollte man besser vermeiden.
    - else Zweig innerhalb des if Blocks wird nie ausgeführt.
    - while Schleife am Ende des Programms bedeutet oberer Programmteil wird nur einmal durchlaufen.

    Probiers mal so:


    Code:
    #include "asuro.h"
    #define PollSwitch sw
    int main(void)
    {
      Init ();
         
      MotorDir(FWD,FWD);
      MotorSpeed(250,233);
      StatusLED(GREEN);
      FrontLED(ON);
    
      while(1)
      {
        
    //    if (sw())   /* irgendeine Taste gedrückt */
        if (sw() & 0x01)   /* Taste K6 gedrückt */
        {
           MotorSpeed(0,0);
           StatusLED(RED);
        }
        else    
        {
           MotorSpeed(250,233);
           StatusLED(GREEN);
        }
       return 0;
    }
    Gruß Peter

  2. #12
    Neuer Benutzer Öfters hier
    Registriert seit
    10.10.2005
    Ort
    Mainz
    Beiträge
    27
    thx für deinen beitrag nur lässt sich der roboter immer noch von jedem taster stoppen

    und laut deinem programm darf nur k6 den robbi ausschalten oder?

    so jetzt bin ich mehr als ratlos....

  3. #13
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Hallo xyphrox,
    ja, das Programm wäre so richtig. Aber halb so schlimm, das kriegen wir schon hin.
    Die Probleme mit den Tastsensoren wurden hier im Forum ja des öfteren schon besprochen.

    Auf meiner Homepage habe ich dazu auch einiges gesammelt.
    http://asuro.pytalhost.de
    Unter Programmierung | Beispielprogramme in C zu finden.

    Probier mal:

    - Mehrmaliges aufrufen der PollSwitch() Funktion
    ...
    PollSwitch();
    PollSwitch();
    PollSwitch();
    PollSwitch();
    PollSwitch();
    PollSwitch();
    PollSwitch();
    if (PollSwitch())
    ...
    - oder Vergleich der zurückgegeben Werte

    unsigned char t1, t2;
    ...
    t1=PollSwitch();
    t2=PollSwitch();
    if (t1 && t2 && t1 == t2)
    ...
    - oder Ausgabe der Werte im TerminalProgramm

    unsigned char t;
    ...
    t=PollSwitch();
    if (t)
    {
    PrintInt(t)
    SerWrite("\r\n");
    }
    Gruß Peter

  4. #14
    Neuer Benutzer Öfters hier
    Registriert seit
    10.10.2005
    Ort
    Mainz
    Beiträge
    27
    moin marvin

    so hab sozusagen nochmal ne nacht drüber geschlafen

    also ich hab jetzt was einigermaßen geht



    Code:
    #include "asuro.h"
    int main(void)
    {
      Init ();
         
    	 PollSwitch();
         PollSwitch();
         PollSwitch();
         PollSwitch();
         PollSwitch();
         PollSwitch();
         PollSwitch();
         if (PollSwitch())
    	 
      MotorDir(FWD,FWD);
      MotorSpeed(250,233);
      StatusLED(GREEN);
      FrontLED(ON);
    
      while(1)
         
         if (PollSwitch() & 0x32)
    	 {MotorDir(RWD,RWD);
         MotorSpeed(250,233);}
    	 else {MotorSpeed(250,233);}
          
    	 
       return 0;
    	
    }

    so das geht
    0x32 <--- das is ja theoretisch der befehl das nur mein K1 schalten soll und das eht auch nur K1 schaltet sonst keiner.
    nur wenn ich das jetzt umschreibe auf 0x01 das nur mein K6 schaltet schalten außer K6 auch noch K1 und K2 ......

    hmpf woran liegt es ?

  5. #15
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Hallo xyphrox,

    - 0x20 = 32, nicht 0x32 in Hexadezimal Schreibweise (2*16).
    - Das wiederholte Aufrufen der PollSwitch() Funktion innerhalb der while Schleife, nicht nur einmal am Programmbeginn.
    - Motorrichtung wieder zurück auf vorwärts schalten.

    so sollte es eigentlich funktionieren:

    Code:
    #include "asuro.h"
    
    int main(void)
    {
      Init ();
         
      MotorDir(FWD,FWD);
      MotorSpeed(250,233);
      StatusLED(GREEN);
      FrontLED(ON);
      while(1)
      {   
         PollSwitch();
         PollSwitch();
         PollSwitch();
         PollSwitch();
         PollSwitch();
         PollSwitch();
         PollSwitch();
         if (PollSwitch() & 0x20)   // K1 gedrueckt
         {
            MotorDir(RWD,RWD);
            MotorSpeed(250,233);
         }
         else 
         {
            MotorDir(FWD,FWD);
            MotorSpeed(250,233);
         }
      }
      return 0;
    }
    Schön wäre es, wenn der Asuro ein Stück zurückfährt (zeitgesteuert) und dann wieder vorwärts.
    Noch besser wenn er entsprechend der gedrückten Taster eine Kurve rückwärts fährt, um dem Hindernis auszuweichen.

    Da solltest du aber selbst versuchen.

    Ich empfehle dringend mal ein C-Tutorial durchzuarbeiten.

    Gruß Peter

  6. #16
    Neuer Benutzer Öfters hier
    Registriert seit
    10.10.2005
    Ort
    Mainz
    Beiträge
    27
    also die 0x32 hab ich mich vertippt
    hab die 0x20 drin

    das mit K1 geht ja auch.

    nur wenn ich dann 0x01 schreibe spinnt er rum....

    ein c tutorial?
    wie mach ich das bzw wie gehe ich da am besten vor ?

    und wegen deinem programmvorschlag das er dann rückwärts fährt und hindernis ausweicht usw...
    ...genau das hab ich vor das muss bis um 12uhr größtenteils alles funktionieren

    danke für deine antwort....

  7. #17
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Hallo xyphrox,

    wenn es mit K6 immer noch nicht klappt, hilft nur noch sich die Werte ausgeben lassen.

    Bau mal folgendes ein:
    unsigned char taste;
    ...
    if (taste = PollSwitch())
    {
    PrintInt(Taste);
    ...
    Du brauchst zum Anzeigen ein Terminalprogramm. Da du den USB Transceiver verwendest, funktioniert Hyperterminal nicht. Hier gibt es ein Terminalprogramm für den USB Transceiver.
    http:///http://asuro.pytalhost.de/pm...in/d2xxapp.zip

    Gruß Peter

  8. #18
    Neuer Benutzer Öfters hier
    Registriert seit
    10.10.2005
    Ort
    Mainz
    Beiträge
    27
    hat es ebínen tieferen sinn das du eben als antwort nochmal das selbe geschrieben hast wie vorhin?

  9. #19
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Sorry wg. Doppelpost

  10. #20
    Neuer Benutzer Öfters hier
    Registriert seit
    10.10.2005
    Ort
    Mainz
    Beiträge
    27
    mit einem schalter z.b. K1 oder K2 funkktioniert es auch mit zeit rücklauf
    zähler usw is drin.

    nur wie geht das das ich sage K2 ODER K5 sollen ein signal bringen und dann fährt er rückwärts....?

    und wenn 2 zusammen ein signal bringen müssen also im prinzip ne und-verknüpfung ?!

    wäre das :

    if (PollSwitch() & 0x10 & 0x02) <-- für UND
    if (PollSwitch() & 0x10 or 0x02) <--- für oder

    ????

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad