-
        

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 25

Thema: Asuro- dauernd kollision

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    03.10.2008
    Beiträge
    9

    Asuro- dauernd kollision

    Anzeige

    hallo
    Ich habe meinen Asuro zusammengelötet und der selbsttest funktionierte.
    Ich habe folgendes programm auf meinen Asuro geflasht:

    #include "asuro.h"
    int main(void) {
    Init ();
    MotorDir(FWD,FWD); // Beide Motoren auf vorwärts
    MotorSpeed(100,100); // Beide Motoren etwa halbe Kraft voraus
    StatusLED(GREEN); // Status-Leuchtdiode auf grün schalten
    while (PollSwitch()==0) { // Solange keine Kollision erfolgte...
    SerWrite("Alles OK!\n",10); // ... Euphorie verbreiten
    }
    MotorSpeed(0,0); // Kollision! Sofort anhalten!
    StatusLED(RED); // Statusleuchtdiode rot schalten
    while (1) {
    SerWrite("Aua!\n",5); // und weinen!
    }
    }


    Jedoch glaubt mein Asuro, dass nach dem einschalten sofort eine Kollision hat, bleibt stehen und die lampe leuchtet rot.

    Könnt ihr mir helfen?

    mfg.

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.783
    Blog-Einträge
    8
    So vielleicht?

    while (PollSwitch()==0 && PollSwitch()==0) {

    StatusLED ist nach Init() immer grün.

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    26.09.2008
    Ort
    Wien
    Alter
    31
    Beiträge
    94
    Hi und willkommen im Forum!

    So ein "ähnliches" Problem hatte ich vor kurzem auch (Link), dort wurde mir empfohlen die PollSwitch immer mehrfach zu überprüfen da sie öfters Fehler liefert.
    Und sowieso ist es gut die Taster erstmal zu kalibrieren, ich habe dazu den Code von Sternthaler von hier verwendet (18. Post). Damit sehe ich am Hyperterminal sofort welchen Wert welcher Taster liefert.

    PS: Verwende um einen Code anzuzeigen bitte die Code-Tags. [.Code] am Anfang und [./Code] am Ende. Allerdings ohne den Punkten.

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    03.10.2008
    Beiträge
    9
    danke für die schnelle antwort!

    wenn ich diesen code verwende:
    while (PollSwitch()==0 && PollSwitch()==0) {
    fährt er zwar, aber wenn ich einen Taster drücke tut sich nichts.

    ich bae vorher mit einem anderen programm meine taster ausgewertet
    und es ergab folgende werte:
    Taster1: 1
    Taster2: 2
    Taster3: 4
    Taster4: 8
    Taster5: 16
    Taster6: 32

    müsste passen, oder?

    ich habe auch ein weiteres problem
    wenn ich im programm vereinbart habe, die status led soll rot leuchten, leuchtet sie grün und umgekehrt.

  5. #5
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.783
    Blog-Einträge
    8
    Hallo

    Bei meinem asuro funktioniert das sogar mit dreifacher PollSwitch()-Abfrage. Aber bei dem laufen keine Motoren mit die stören könnten. Schau mal deine Tastenwerte bei laufenden Motoren an, vielleicht ändert sich da was. K1 ist 32! StatusLED ist falschrum eingelötet.

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    03.10.2008
    Beiträge
    9
    ok
    die status les werde ich morgen gleich umlöten.

    hab den asuro von vorne angesehen und dann von links nach rechts die taster getstet.


    und die tastenwerte werde ich auch nochmal überprüfen.

    DANKE

  7. #7
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.783
    Blog-Einträge
    8
    Nach dem Platinenaufdruck (Manual S.16) ist K6 beim Ein-/Ausschalter. Der wird mit PollSwitch() als Wert 1 erkannt:

    Code:
    #include "asuro.h"
    int main(void) {
    	Init ();
    	
    	while(1)
    	{
    		PrintInt(PollSwitch());
    		SerWrite("\n\r", 2);
    		Msleep(200);
    	}
    }
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken asuro-k6.jpg  

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    03.10.2008
    Beiträge
    9
    ich weiß nicht ob das relevant ist, aber wenn ich
    (PollSwitch()==1) schreibe, dann fährt er, aber die taster reagieren nicht.

    hab jetzt noch mal die taster getestet:

    Code:
    #include "asuro.h"
    
    int main (void)
    {
    unsigned char x;            //definition der pollswitch-variable
    unsigned char string [5];   //definition eines string mit max. 5 zeichen
    
       Init ();
       while (1)
       {
          x = PollSwitch ();                   //taster werden abgefragt
          itoa (x, string, 10);                //wert wird umgewandelt und in string gespeichert
          SerWrite (string, strlen (string));  //string wird an terminal geschrieben
          SerWrite ("\n\r", 2);                //umbruch an terminal schreiben
                                               //("\n" und "\r" sind je ein byte!)
       }
    }
    er sendet nu "84" und beim drücken der taster ändert sich nichts

  9. #9
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.783
    Blog-Einträge
    8
    Hallo

    Deine Kommentare gefallen mir. Vorbildlich :)

    Um das Problem mit strlen() zu umgehen kann man den String mit 0-Werten vorbelegen. SerWrite() erkennt das als Stringende und bricht die Übertragen beim ersten Zeichen=0 ab obwohl beim Aufruf 5 Zeichen angegeben wurden. (Das ist allgemein die Endekennung eines Strings in C).

    Wir wollten doch mit laufenden Motoren testen:
    Code:
    #include "asuro.h"
    
    int main (void)
    {
    unsigned char x;            //definition der pollswitch-variable
    unsigned char string [5];   //definition eines string mit max. 5 zeichen
    
    	Init ();
    
    	/********************************************
    	/* Achtung! Der asuro kann jetzt losfahren! *
    	/********************************************/
    
    	MotorSpeed(150,150);		 					 // elektrischen Krach machen
    
       while (1)
       {
    		StatusLED(RED);                      // wir senden
          for(x=0; x<5; x++) string[x]= 0;     // String mit Endekennungen vorbelegen
          x = PollSwitch ();                   //taster werden abgefragt
          itoa (x, string, 10);  //wert wird umgewandelt und in string gespeichert
          SerWrite (string, 5);  					 //string wird an terminal geschrieben
          SerWrite ("\n\r", 2);                //umbruch an terminal schreiben
                                               //("\n" und "\r" sind je ein byte!)
    		StatusLED(YELLOW);                   // wir warten 1/4 Sekunde
    		for(x=250; x; x--) Sleep(72);			 // 250 mal eine ms
       }
    }
    Bei mir sind auch hier noch die Tastenwerte richtig, vermutlich weil ich keine Motoren an meinem asuro habe :)

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    03.10.2008
    Beiträge
    9
    also
    ich habe das programm getestet.
    folgendes lese ich aus, wenn ich den asuro einschalte und nichts drücke:

    Code:
    0
    0
    1
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    33
    0
    16
    0
    0
    8
    0
    0
    0
    0
    5
    0
    2
    0
    0
    0
    0
    0
    1
    0
    0
    0
    0
    2
    0
    0
    0
    0
    0
    1
    0
    0
    0
    0
    0
    0
    0
    2
    0
    0
    0
    0
    0
    0
    0
    0
    00
    0
    2
    0
    0
    0
    0
    0
    0
    0
    0
    2
    0
    0
    0
    0
    0
    0
    2
    0
    0
    0
    0
    0
    0
    0
    1
    0
    0
    2
    0
    0
    0
    0
    4
    0
    0
    2
    0
    0
    0
    0
    8
    0
    0
    0
    0
    0
    1
    16
    0
    0
    0
    33
    0
    0
    0
    33
    0
    33
    0
    0
    0
    0
    0
    1
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    2
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    2
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    2
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    2
    0
    2
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    1
    0
    0
    0
    0
    0
    0
    2
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    1
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    1
    0
    2
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    2
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    2
    0
    0
    0
    0
    0
    0
    0
    0
    0
    1
    1
    0
    0
    0
    0
    0
    2
    0
    0
    0
    0
    0
    4
    2
    0
    2
    0
    0
    0
    8
    0
    0
    16
    0
    0
    32
    0
    0
    0
    0
    1
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    1
    0
    2
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    1
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    2
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    1
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    2
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    1
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    2
    0
    0
    0
    0
    0
    0
    0
    wenn ich dann die Taster dazu noch drücke kommt:
    mit k6 angefangen:

    Code:
    16
    0
    0
    2
    0
    0
    0
    0
    2
    0
    4
    0
    8
    7
    16
    16
    2
    32
    1
    0
    0
    0ø


    wenn ich einen taster hintereinander drücke kommt
    Code:
    1
    1
    2
    1
    
    2
    2
    2
    
    4
    4
    4
    
    8
    9
    8
    7
    8
    8
    
    16
    16
    6
    16
    
    33
    34
    32
    32
    23

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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