Archiv verlassen und diese Seite im Standarddesign anzeigen : Asuro Quellcodes
Hallo liebe RoboterNETZ Community
Hier Könnt ihr Quellcodes und hex dateien zum Thema Asuro reinstellen. Hier ein paar Quellcodes die ich gefunden habe:
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
}
}
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;
}
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.