PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Asuro Quellcodes



IDG
19.04.2011, 12:57
Hallo liebe RoboterNETZ Community

Hier Könnt ihr Quellcodes und hex dateien zum Thema Asuro reinstellen. Hier ein paar Quellcodes die ich gefunden habe:

IDG
19.04.2011, 12:58
Multitasking (Quelle: Roboterclub-Freiburg)


//************************************************** *****************
//
// Multitasking ohne Betriebsystem
//
// Beispiel fr ASURO Roboter
//
// In diesem Programm laufen mehrere Programmteile quasi "gleichzeitig"
// Oft ist es bei der Roboterprogrammierung notwendig, dass mehrere
// Aufgaben zur gleichen Zeit durchgefhrt werden sollen.
// Die Hauptschleife wird mit 1/10 Sekunde durchlaufen, daher können
// Reaktionszeiten von 0,1 Sekunden erreicht werden.
//
// Die Front-Led blinkt unabh?gig von den Rckwärtsleds
// Gleichzeitg werden die Motoren gestartet, wenn der Zeitgeber der
// RückwertsLED's einen bestimmten Wert errreicht.
//
// 17.5.2007 ch
//
//************************************************** *****************
#include "asuro.h"

int main(void)
{
uint32_t nextzeit=100; // Zeitgebervariable mit 32 Bit
uint16_t funktion1_zeit=0; // Zeitgebervariable fr 1.Funktion
uint16_t funktion2_zeit=0; // Zeitgebervariable fr 2.Funktion
uint16_t funktion3_zeit=20; // Zeitgebervariable fr 3.Funktion

Init();

while(1)
{
//************************************************** *****************
// Funktion1: Statusleuchtdiode blinken lassen
//************************************************** *****************

if (funktion1_zeit==0)
{
StatusLED(GREEN);
}
if (funktion1_zeit==10) // Nach 1 Sekunde auf Rot umschalten
{
StatusLED(RED);
}
funktion1_zeit++;
if (funktion1_zeit>20) funktion1_zeit=0;

//************************************************** *****************
// Funktion1: Ende
//************************************************** *****************
//************************************************** *****************
// Funktion2: Rckwärtige Leuchtdioden abwechselnd schalten
//************************************************** *****************

if (funktion2_zeit==0)
{
BackLED(OFF,ON);
}
if (funktion2_zeit==15) // Nach 1,5 Sekunde auf Rot umschalten
{
BackLED(ON,OFF);
}
if (funktion2_zeit==49)
{
funktion3_zeit=0; // hiermit wird die Funktion3 gestartet
}
funktion2_zeit++;
if (funktion2_zeit>50) funktion2_zeit=0; // 3 Sekunden

//************************************************** *****************
// Funktion2: Ende
//************************************************** *****************
//************************************************** *****************
// Funktion3: Motoren benutzen
// Diese Funktion wird gestartet, wenn die Variable
// function3_zeit auf 0 gesetzt wird
//************************************************** *****************

if (funktion3_zeit==0)
{
MotorSpeed(255,255);
MotorDir(FWD,FWD); // Motoren vorwäts
}
if (funktion3_zeit==5) // 0,5 Sekunden
{
MotorSpeed(255,255);
MotorDir(RWD,FWD);
}
if (funktion3_zeit==10) // 0,5 Sekunden
{
MotorSpeed(0,0);
}

if (funktion3_zeit<15) funktion3_zeit++; // Funktion beenden, wenn 15 erreicht

//************************************************** *****************
// Funktion3: Ende
//************************************************** *****************

// Schleifendurchlauf auf 0,1 Sekunden synchronisieren
while(Gettime()<nextzeit); // warten, bis Zielzeit erreicht
nextzeit=Gettime()+100; // Zeitgeber auf 100 Millisekunden= 0,1 Sekunde stellen
}
}

IDG
19.04.2011, 13:01
Zufallszahlengenerator und sichere Tasterabfrage (Quelle: Roboterclub-Freiburg)


//
// uint8_t zufall()
//
// Liefert eine 8Bit Pseudozufallszahl zurück,
// die Zahlenfolge wiederholt sich spätestens nach 65535 Aufrufen
//

uint8_t zufall()
{
static uint16_t startwert=0x0AA;

uint16_t temp;
uint8_t n;

for(n=1;n<8;n++)
{
temp = startwert;
startwert=startwert << 1;

temp ^= startwert;
if ( ( temp & 0x4000 ) == 0x4000 )
{
startwert |= 1;
}
}

return (startwert);
}
//************************************************** *****************
// uint8_t KeyPressed(void)
//
// zeigt, ob eine Taste des ASUROs gedrckt ist.
//
// Die Funktion nutzt nicht den AD-Wandler wie die Funktion Pollswitch,
// sondern fragt die Tasten direkt digital ab.
// Grund: Funktion Pollswitch arbeitet nicht zuverlaessig.
//
// 23.5.2007 ch
//
//************************************************** *****************
uint8_t KeyPressed(void)
{
uint8_t flag;

DDRD &= ~SWITCHES; // High Impedance ( Input )
DDRC |= (1<<PC4); // ADC-Switch-Pin to Output
PORTC |= (1<<PC4); // load capacitor / Pull up
Msleep(1);
DDRC &= ~(1<<PC4); // Set ACD-Switch to Input
PORTC &= ~(1<<PC4); // High Impedance

Msleep(1);

if(PIND&SWITCHES) flag=FALSE;
else flag=TRUE;

return flag;
}