Sehr interessant! Ich habe mir eure Anregungen zu Herzen genommen und umgesetzt.
Code:
#include "asuro.h" // Konfigurationsdateien laden
#include <string.h>
#define ENDLOS while(1)
/* Funktionen definieren */
void schlafen(unsigned int t)
{
unsigned int i;
for(i=0; i<t; i++)
{
Sleep(72);
}
}
/* Geradeausfahren */
void GeradeAus()
{
static unsigned int i=0;
unsigned int OdoDataInit[2];
unsigned int OdoData[2];
static unsigned int n0=0;
static unsigned int n1=0;
OdometrieData(OdoDataInit);
unsigned int old0;
unsigned int old1;
static unsigned int spd0=190;
static unsigned int spd1=190;
MotorDir(FWD,FWD);
MotorSpeed(spd0,spd1);
for(i=0; i<50; i++) // 50 mal Messen für exakteren Wert
{
OdometrieData(OdoData);
/* Berechnung der Drehzahl des 0. Odosensors */
if(old0==0){old0=1;} // sonst teilt man nacher durch 0 wenns dunkel ist!
if(OdoData[0]/old0 > 1.4 || OdoData[0]/old0 < 0.6) // Wenn Übergang n erhöht
{
n0++;
}
old0=OdoData[0];
/* Berechnung der Drehzahl des 1. Odosensors */
if(old1==0){old1=1;} // sonst teilt man nacher durch 0 wenns dunkel ist!
if(OdoData[1]/old1 > 1.4 || OdoData[1]/old1 < 0.6)
{
n1++;
}
old1=OdoData[1];
}
StatusLED(GREEN);
/* Drehzahlen ins Verhältnis setzen und dann Geschw. ev. Erhöhen */
if(n0<n1)
{
if(spd0<255)
{
spd0++;
StatusLED(GREEN);
}
else
{
spd1--;
StatusLED(RED);
}
}
else if(n0>n1)
{
if(spd1<255)
{
spd1++;
StatusLED(GREEN);
}
else
{
spd0--;
StatusLED(RED);
}
}
}
/* Beginn des Hauptprogramms */
int main (void){
Init(); //Prozessor initialisieren
ENDLOS // Endlosschleife
{
GeradeAus();
}
/* Schluss ! */
return 0;
}
Jetzt macht Asuro aber vollends abgefahrene Sachen!
Er gibt zunächst auf beiden Rädern gas und verringert dann beim rechten Rad abnehmend bis auf 0 die Geschwindigkeit, das linke Rad läuft mit konstanter Geschwindigkeit. Nach einiger Zeit (und ein Paar Runden auf der Stelle...) fängt das gleiche dann wieder von vorne an. Sehr seltsam!
Interessant ist auch, dass sehr schnell die StatusLED auf RED umschaltet. spd0 / spd1 müssen also sehr schnell 255 erreichen weshalb dann die Geschwindigkeit gedrosselt wird (? oder
).
Lesezeichen