Ich habe einen Algorithmus geschrieben damit mein Roboter Gegenständen ausweicht. Folgende Schritte werden wie folgt bearbeitet: 1. Fahre solange geradeaus bis Gegenstand 6cm vor dem Roboter steht. 2. Bremse, und fahre 3 Sekunden lang zurück 3. Mach eine zufällige Drehung nach links oder nach rechts 4. Fahr weiter wie vorher und starte US Messung erneut. Der Code:
1 | //Main-Loop:*********************************************************************
|
2 | while(1) |
3 | {
|
4 | MotorLINKS = QuarterSpeed; |
5 | MotorRECHTS = QuarterSpeed; |
6 | ultraschall_StarteMessungSRF05(&PORTA, 7); |
7 | _delay_ms(10); //Damit Messung vor der Auswertung schon Werte hat |
8 | |
9 | if(OBJEKTvorROBOTER == true) |
10 | {
|
11 | PORTB |= MODUS_MotorenBREMSEN; |
12 | |
13 | _delay_ms(1500); |
14 | |
15 | PORTB &=~ MODUS_MotorenBREMSEN; |
16 | PORTB |= MODUS_MotorenZUER; |
17 | |
18 | MotorLINKS = QuarterSpeed; |
19 | MotorRECHTS = QuarterSpeed; |
20 | _delay_ms(3000); //Rückwärtsgang einschalten für 3 Sekunge |
21 | |
22 | PORTB |= MODUS_MotorenBREMSEN; |
23 | |
24 | _delay_ms(1500); |
25 | |
26 | PORTB &=~ MODUS_MotorenBREMSEN; |
27 | PORTB |= MODUS_MotorenVOR; |
28 | |
29 | if( (rand() % 2) > 0) //Wenn der Rest einer Zufälligen Zahl/2 größer als 0 ist dann ist die zufällige Zahl ungerade |
30 | {
|
31 | MotorLINKS = HalfSpeed; |
32 | MotorRECHTS = OFF; |
33 | }
|
34 | else //Wenn gerade dann andere Richtung |
35 | {
|
36 | MotorLINKS = OFF; |
37 | MotorRECHTS = HalfSpeed; |
38 | }
|
39 | |
40 | _delay_ms(2000); // Drehe Roboter 2 Sekunden Lang in Zufällige Richtung |
41 | |
42 | }
|
43 | }
|
44 | //back***************************************************************************
|
Da ich diesen Algorithmus noch nicht austesten kann habe ich ihn reingestellt damit ich mögliche Denkfehler jetzt schon korrigieren kann falls jemand einen findet. Ich bin jedem dankbar der mir hilft. lg andy