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:
So habe ich das Array erstmal Global deklariertCode:uint16_t IR_Wert[51]; //Array für Messwerte 0-50
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: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 soll der Roboter anweisung bekommen sich nach lins zu drehen, wenn links frei ist.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 die funktion GP2D12 die Position des kleinsten wertes zurückgebenCode: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); }
Meine Main Function. Der GP2D12 wert soll der Funktion Motorsteuerung übergeben werden, wo dann ja geregelt wird wo der Roboter hinfährt.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 }
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







Zitieren

Lesezeichen