Moin!
Ich habe folgendes problem:
Ich habe einen Servo der immer hin und her dreht. Auf diesen servo ist ein GP2D12 montiert. Jetzt möchte ich, das für jede Position des Servos (das sind insgesamt 51), ein ADC-Wert gespeichert wird. Später soll mein Roboter jenachdem wo der kleinste Wert liegt, eine kette vor und eine zurück bewegen, um da hinzulenken, weil beim kleinsten Wert ja das weiteste Hinderniss liegt. Hier sind ein paar auszüge aus meinem Code, wo man sieht wie ich das versucht habe:
Code:
uint16_t IR_Wert[51]; //Array für Messwerte 0-50
So habe ich das Array erstmal Global deklariert
Code:
ISR(ADC_vect)
{
if (changechannel<=0)
{
changechannel++;
ADMUX |= (1<<MUX0); //Eingang ADC1 vorbereiten für den IR-Sensor
LDR = ADC;
}
else
{
changechannel=0;
ADMUX &= ~(1<<MUX0); //Eingang ADC0 vorbereiten für LDR-Messung
IR_Wert[posi]=ADC;
}
}
Hier ist meine Interrupt routine in der unter anderem die GP2D12-Werte eingespeichert werden sollen. (posi ist meine Variable, die die position des Servos enthält also 0 bis 50)
Code:
void Motorsteuerung(int Hinderniss_info)
{
OCR0=60;
OCR2=60;
if(Hinderniss_info<=20)
{
PORTC |= (1<<Motor_Links_Rueck); //Roboter soll nach Links drehen
}
else
{
PORTC &= ~(1<<Motor_Links_Rueck); //Roboter soll aufhören nach links
//zu drehen
}
hier soll der Roboter anweisung bekommen sich nach lins zu drehen, wenn links frei ist.
Code:
int GP2D12(void)
{
uint8_t i, memoposi=0;
uint16_t memo=65535; //zum merken des kleinsten Wertes;
//65535=maxwert bei 16-Bit
for (i=0; i<=50; i++)
{
if (IR_Wert[i]<memo)
{
memoposi = i; //Zum merken der Servoposition, bei der der kleinste
//wert liegt
}
}
return (memoposi);
}
hier soll die funktion GP2D12 die Position des kleinsten wertes zurückgeben
Code:
int main(void)
{
Initial_ADC();
Initial_IR_Servo();
Initial_Motoren();
sei(); //Globales Interrupt gesetzt
while(1)
{
ADCSRA |= (1<<ADSC); //ADC-Messung soll immer wenn möglich aktiv sein
if (count)
{
count=0;
IR_Servo = IR_Servoposition();
Motorsteuerung(GP2D12());
helligkeitsmessung();
}
}
return 0; //wird nie erreicht
}
Meine Main Function. Der GP2D12 wert soll der Funktion Motorsteuerung übergeben werden, wo dann ja geregelt wird wo der Roboter hinfährt.
Hoffe ich hab nichts vergessen
Ach ja! Das Problem was ich habe ist, das die linke Kette dauerhaft rückwärts dreht. Ich hab keine Ahnung was schiefgelaufen sein kann. Is auch das erste mal wo ich mit Arrays arbeite.
Hoffe mir kann jemand helfen.
MfG Jan
Lesezeichen