PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programmdefinition?!?



The-BooN-
04.05.2007, 09:04
Hey Leute ich hab nen Programm im Internet gefunden, kann mir mal jemand die genaue Definition vom Programm mit jeglichen Funktionen erklären?



#include "asuro.h"

/* Um eventuelle Unterschiede zwischen linken und rechtem Motor auszugleichen
* definieren wir 2 Werte für fullspeed links und rechts
*/
#define FULL_L 250 /* Fullspeed linker Motor */
#define FULL_R 250 /* Fullspeed rechter Motor */

/* Motor vorwärts */
void MotorFwd(void)
{
MotorDir(FWD,FWD);
MotorSpeed(150,150);
}

/* Motor rückwärts */
void MotorRwd(void)
{
MotorDir(RWD,RWD);
MotorSpeed(50,50);
}

/* Motor rückwärts links */
void MotorRwdL(void)
{
MotorDir(RWD,RWD);
MotorSpeed(175,100);
}

/* Motor rückwärts rechts */
void MotorRwdR(void)
{
MotorDir(RWD,RWD);
MotorSpeed(100, 175);
}

/* Motor stop */
void MotorStop(void)
{
MotorSpeed(0,0);
}

int main(void)
{
unsigned char t1, t2;

Init();
while(1)
{
t1 = PollSwitch();
t2 = PollSwitch();
if(t1 == 0 && t2 == 0) /* keine Taste */
{
MotorFwd(); /* vorwärts fahren */
FrontLED(ON);
BackLED(OFF,OFF);
}
else if (t1 && t2 && t1 == t2)
{
MotorStop();
if(t1 & 0x07) /* Tasten links gedrückt? if(t1 0x07)*/
{
MotorRwdL(); /* Rückwärtskurve links fahren */
FrontLED(OFF);
BackLED(ON,OFF);
}
if (t1 & 0x38) /* Tasten rechts gedrückt? if (t1 & 0x38) */
{
MotorRwdR(); /* Rückwärtskurve rechts fahren */
FrontLED(OFF);
BackLED(OFF,ON);
}
Msleep(750); /* zeit zum rückwärtsfahren egal ob links oder rechts Msleep(1000) = 1sekunde*/
}
}
return 0;
}


MfG, The-BooN-[/b]

Arexx-Henk
04.05.2007, 09:49
Hallo,


unsigned char t1 = PollSwitch();

In 't1' befindet sich dass resultat vom gedruckten
(oder nicht gedruckten) Tastern.

+----+----+----+----+----+----+----+----+
t1 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | bitnummers
+----+----+----+----+----+----+----+----+
| | | K1 | K2 | K3 | K4 | K5 | K6 | bit und zugehorende Taster
+----+----+----+----+----+----+----+----+
| (0)| (0)| 1 | 1 | 1 | 0 | 0 | 0 | 0x38 = alle drie linker tasten K1/K2/K3 gedruckt
+----+----+----+----+----+----+----+----+
| (0)| (0)| 0 | 0 | 0 | 1 | 1 | 1 | 0x07 = alle drie rechter tasten K4/K5/K6 gedruckt
+----+----+----+----+----+----+----+----+

K1 = Linker Taste beim Infrarot Empfanger


Gruss

Henk

damaltor
04.05.2007, 11:45
#include "asuro.h" //Die definitionen werden eingebunden

/* Um eventuelle Unterschiede zwischen linken und rechtem Motor auszugleichen
* definieren wir 2 Werte für fullspeed links und rechts
*/
#define FULL_L 250 /* Fullspeed linker Motor */
#define FULL_R 250 /* Fullspeed rechter Motor */

/* Motor vorwärts */
void MotorFwd(void) //immer wenn diese funktion im programm aufgerufen wird,...
{
MotorDir(FWD,FWD); //...werden die motoren auf vorwärts gestellt
MotorSpeed(150,150); //...und auf 150
}

/* Motor rückwärts */
void MotorRwd(void) //bei dieser funktion..
{
MotorDir(RWD,RWD);//gehts rückwärts
MotorSpeed(50,50);//mit 50
}

/* Motor rückwärts links */
void MotorRwdL(void) //bei dieser funktion...
{
MotorDir(RWD,RWD);//gehts rückwärts
MotorSpeed(175,100);//und zwar links schneller als rechts (kurve)
}

/* Motor rückwärts rechts */
void MotorRwdR(void) //hier nochmal das gleiche nur andersrum
{
MotorDir(RWD,RWD);
MotorSpeed(100, 175);
}

/* Motor stop */
void MotorStop(void) //bei dieser funktion...
{
MotorSpeed(0,0); //werden die motoren angehalten
}

int main(void) //DIES HIER IST DAS HAUPTPROGRAMM
{
unsigned char t1, t2;

Init(); //"start deas asuro"
while(1) //endlosschleife
{
t1 = PollSwitch(); //in t1 wird der tasterwert gespeichert (siehe einen post höher)
t2 = PollSwitch(); //in t2 auch, um fehler zu vermeiden
if(t1 == 0 && t2 == 0) wenn der wert null ist, also kein taster gedrückt wurde...
{
MotorFwd(); //dann vorwärts fahren
FrontLED(ON); //und licht anmachen
BackLED(OFF,OFF); //hintan licht ausmachen
}
else if (t1 && t2 && t1 == t2) //wenn der wert nicht null ist,...
{
MotorStop(); //erstmal anhalten
if(t1 & 0x07) // wenns die linken tatsen sind...
{
MotorRwdL(); /* Rückwärtskurve links fahren */
FrontLED(OFF);
BackLED(ON,OFF);
}
if (t1 & 0x38) //wenns die rechten tasten sind...
{
MotorRwdR(); /* Rückwärtskurve rechts fahren */
FrontLED(OFF);
BackLED(OFF,ON);
}
Msleep(750); /* zeit zum rückwärtsfahren egal ob links oder rechts Msleep(1000) = 1sekunde*/
}
}
return 0;
}


das programm fährt also vorwärts, und wenn der asuro anstößt, wird ein eine bestimmt reichtung ausgewichen.