- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 4 von 6 ErsteErste ... 23456 LetzteLetzte
Ergebnis 31 bis 40 von 55

Thema: ASURO neuling (noob) hat mal Programiert

  1. #31
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Anzeige

    Praxistest und DIY Projekte
    Auserdem das, wurde seiner VORWERTS, LINKS und RECHTS defines nicht besser mit funktionen gemacht? Weil die #define nur tekst erganzungen sein vordem das eigentliche compilation prozess anfangt.

  2. #32
    Benutzer Stammmitglied
    Registriert seit
    17.05.2009
    Beiträge
    46
    Leider sind das die Befehle, die ich bis jetzt kenne und weis wie anwenden.

    Den char Befehl kenne ich nicht und weis auch nicht was er bewirkt.

    Wen ich das Programm durchsehe, habe ich einige Fragen.
    Wo werden die k5,k6 und k65 definiert was sie sind? In der asuro.h?
    t1 und t2= PollSwitch(); wieso benötigen diese keine werte?

    Hoffe es sind nicht allzu einfache Fragen.

  3. #33
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    40
    Beiträge
    3.416
    Den char Befehl kenne ich nicht und weis auch nicht was er bewirkt.
    char ist kein befehl, sondern eine deklaration einer variable vom TYP character (8bit groß)

    was meinst du mit "benötigt keine werte" ???

    PollSwitch() ist eine funktion die einen wert zurückliefert, der über das gleichheitszeichen den variablen t1 und t2 zugewiesen wird!

    die defines für k5 und k6 stehen doch oben unter dem #include

    t1 und t2 sind im übrigen variablen, d.h. zur laufzeit des programms können sie viele interschiedliche werte annehmen ...

    mit deinen defines für k6 usw. erzeugst du eine temporäre variabel, du rufst die funktion pollswitch auf, die funktion liefert einen wert zurück, der prozessor merkt sich den wert in einer temporären variable und vergleicht dann diese variable mit der zahl, die du hinter dem vergleich geschrieben hast ... deine lösung ist zu aufwändig, da immer wieder die funktion pollswitch benutz wird, radbruchs lösung hingegen ruft den wert ab, speichert ihn in einer definierten variable und vergleicht den wert der variable mit dem wert der im define steht

    #define wird vom so genannten pre-compiler verarbeitet, bevor aus deinem programm ein maschienencode für den asuro wird, geht er über den gesamten text, sucht nach der zeichenkette "k6" zum beispiel und ersetzt diese durch die zeichenkette "PollSwitch()==1" in deinem beispiel

  4. #34
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    02.01.2008
    Alter
    33
    Beiträge
    239
    hallo Bongo1st

    zu deinen Fragen:

    k5, k6, k65 werden am anfang definiert:
    Code:
    #define k6   taste==1
    #define k5   taste==2
    #define k65   taste==3
    ähnlich wie bei dir

    char ist ein datentyp, genauso wie int (unsigned int), float,... aber ich glaube das steht sogar in der anleitung
    char besteht aus 8 bit, kann also zahlen von 0-255 speicher.
    das genügt in diesem fall, da die funktion PollSwitch() als rückgabetyp auch char hat.

    ich hoffe, das beantwortet deine fragen, bei der letzten weiß ich jedoch nicht genau was du meinst
    mfg hai1991

    P.S.: wer großbuchstaben oder rechtschreibfehler findet darf sie behalten

  5. #35
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Zitat Zitat von Ceos
    #define wird vom so genannten pre-compiler verarbeitet, bevor aus deinem programm ein maschienencode für den asuro wird, geht er über den gesamten text, sucht nach der zeichenkette "k6" zum beispiel und ersetzt diese durch die zeichenkette "PollSwitch()==1" in deinem beispiel
    Genau, das meinte ich.

  6. #36
    So. Hab auch mal ne Frage hierzu.

    Hier mein Code (Asuro kann hierbei halt noch ne Vierteldrehung, wenn ein äußerer Taster gedrückt wird, das ist das RECHTS2 bzw. LINKS2, sonst isses ziemlich gleich, Tasterkombinationen finde ich erstmal überflüssig, da das meiner Meinung nach sehr sehr selten zustandekommt):

    Code:
    #include "asuro.h"
    
    #define k6   taste==1
    #define k5   taste==2
    #define k4   taste==4
    #define k3   taste==8
    #define k2   taste==16
    #define k1   taste==32
    
    #define WARTEN1 for (i=0; i<500; i++) {Sleep(72);}   //warten
    #define WARTEN2 for (i=0; i<250; i++) {Sleep(72);}    //warten
    #define WARTEN3 for (i=0; i<125; i++) {Sleep(72);}      //warten
    
    #define VORWERTS BackLED(OFF,OFF); StatusLED(GREEN); MotorDir(FWD,FWD); MotorSpeed(180,180); FrontLED(ON);
    #define RECHTS1 StatusLED(YELLOW); FrontLED(OFF); BackLED(ON,ON); MotorDir(RWD,RWD); MotorSpeed(200,200); WARTEN1; BackLED(ON,OFF); MotorDir(RWD,FWD); WARTEN2;
    #define LINKS1 StatusLED(YELLOW); FrontLED(OFF); BackLED(ON,ON); MotorDir(RWD,RWD); MotorSpeed(200,200); WARTEN1; BackLED(OFF,ON); MotorDir(FWD,RWD); WARTEN2;
    #define RECHTS2 StatusLED(RED); FrontLED(OFF); BackLED(ON,ON); MotorDir (RWD,RWD); MotorSpeed(200,200); WARTEN1; BackLED(ON,OFF); MotorDir(RWD,FWD); WARTEN3;
    #define LINKS2 StatusLED(RED); FrontLED(OFF); BackLED(ON,ON); MotorDir(RWD,RWD); MotorSpeed(200,200); WARTEN1; BackLED(OFF,ON); MotorDir(FWD,RWD); WARTEN3;
    
    
    int main(void)
    {
        char t1, t2, taste;
        unsigned int i;
    
       Init();
    
       while(1)
       {
        t1=PollSwitch();
        t2=PollSwitch();
    
    	if (t1 && (t1==t2))
    	{
    
    	taste=t1;
    
            if(k6)
                {RECHTS2}
    
            else if (k5)
                {RECHTS1}
    
            else if (k4)
                {RECHTS1}
    
            else if (k3)
                {LINKS1}
    
            else if (k2)
                {LINKS1}
    
            else if (k1)
                {LINKS2}
    	}
    
    	else VORWERTS;
    
    	}
    
    
       return(0);
    }
    Alles funktioniert super und passt auch, ABER nach einer Weile (manchmal 30s, manchmal auch 2-3 min) "hängt" der sich irgendwie auf. Der macht einmal gar nichts (nur grüne StatusLed leuchtet) oder fährt endlos im Kreis usw.
    Ich bin noch ziemlich neu auf diesem Gebiet und wollte mal fragen, was da nicht passt.

  7. #37
    Benutzer Stammmitglied
    Registriert seit
    17.05.2009
    Beiträge
    46
    Ich habe mir nochmals zeitgenommen und das Programm überarbeitet. Jedoch leuchtet nun nur noch die StatusLED grün auf, ansonsten passiert nichts.

    @Wrex
    Ich denke es ist nicht ideal mein Programm als Vorlage zu nehmen, da ich meinen Asuro erst ne Woche habe. Jedoch ist es natürlich ein Lob =D>

    Code:
    #include "asuro.h"
    
    
    //Tasten
    
    #define K6		taste==1		//Taste 6
    #define K5		taste==2		//Taste 5
    #define K4		taste==4		//Taste	4
    #define K3		taste==8		//Taste 3
    #define K2		taste==16		//Taste 2
    #define K1		taste==32		//Taste 1
    
    
    //Tasten Kombinationen
    
    #define K65		taste==3		//Taste 6+5
    #define K54		taste==6		//Taste 5+4
    #define K43		taste==12		//Taste 4+3
    #define K32		taste==24		//Taste 3+2
    #define K21		taste==48		//Taste 2+1
    #define K52		taste==18		//Taste 5+2
    
    #define K5432	taste==30		//Taste 5+4+3+2
    
    
    
    //Warten
    
    #define WAIT1 for (i=0; i<1000; i++) {Sleep(72);}	//1 Sekunde
    
    #define WAIT2 for (i=0; i<400; i++) {Sleep(72);}	//90 Grad-Kurve
    
    
    
    //Fahrten
    
    unsigned int i;
    char t1,t2, taste;
    
    void vorwerts (void)
    	{StatusLED (GREEN);
    	 BackLED (ON,ON);
    	 MotorDir (FWD,FWD);
    	 MotorSpeed (124,120);}
    
    void links (void)
    	{StatusLED (YELLOW);
    	 BackLED (OFF,ON);
    	 MotorDir (RWD,RWD);
    	 MotorSpeed (124,120);
    	 WAIT1;
    	 MotorDir (FWD,RWD);
    	 WAIT2;
    	 MotorSpeed(0,0);
    	 WAIT1; }
    
    void rechts (void)
    	{StatusLED (RED);
    	 BackLED (ON,OFF);
    	 MotorDir (RWD,RWD);
    	 MotorSpeed (124,120);
    	 WAIT1;
    	 MotorDir (RWD,FWD);
    	 WAIT2;
    	 MotorSpeed (0,0);
    	 WAIT1;}
    
    
    
    //Start
    
    
    
    int main(void)
    {	
    	Init();
    	
    	while (1)
    	{
    		t1 = PollSwitch();
    		t2 = PollSwitch();
    		
    		if (t1 && (t1=t2))
    		{
    			taste=t1;
    			
    			if (K6) {rechts;}
    			else if (K1) {links;}
    		}
    		
    		else {vorwerts;}
    	}
    
    return (0);
    }

  8. #38
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Jedoch leuchtet nun nur noch die StatusLED grün auf, ansonsten passiert nichts.
    Vermutung: Dein asuro stürzt ab weil man Funktionen mit Klammern aufrufen muss:
    Code:
             if (K6) {rechts();} 
             else if (K1) {links();} 
          } 
           
          else {vorwerts();}

    Alles funktioniert super und passt auch, ABER nach einer Weile (manchmal 30s, manchmal auch 2-3 min) "hängt" der sich irgendwie auf.
    Das direkte Umschalten der Motordrehrichtung bei hoher MotorSpeed erzeugt möglicherweise Impulse die den asuro reseten. Oder Akkus leer/Wackler in der Spannungsversorgung (Ein/Aus-Schalter). Auf die Dauer ist es für den asuro eher ungesund immer gegen die Wand zu knallen! Ich habe sogar schon von rausgeschleuderten Mega8s gelesen....

    Gruß

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

  9. #39
    Benutzer Stammmitglied
    Registriert seit
    17.05.2009
    Beiträge
    46
    SUPER

    Danke für die Hilfe, funkt jetzt einwandfrei. Habe die () übersehen
    Versuche nun das Program noch zu erweitern. Werde dann das vollendete Programm einstellen.

  10. #40
    Ich werd mal ein wenig rumtesten. Bis jetzt is noch nichts raus- bzw. abgefallen!

    Ich will mich mal net zu arg hier beteiligen, da ich doch noch wenig Ahnung hab, aber kann es sein, dass der Teil hier:
    Code:
          if (t1 && (t1=t2))
    so sein muss?
    Code:
          if (t1 && (t1==t2))

Seite 4 von 6 ErsteErste ... 23456 LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test