hallo leute, ich bin gerade dabei meinen roboter mit einem ir
kollisionssystem auszustatten. dafür habe ich mein system mit einer ir
sendediode und einem infrarotempfänger ausgestattet. mittlerweile
funktioniert das erkennen der ir- strahlen.
nun aber möchte ich, dass der roboter fährt, wenn er kein hinderniss
erkennt und er soll stehen bleiben, sobald ein hinderniss erkannt wird.
hier mein bisheriges programm:
1 | #include "RP6ControlLib.h"
|
2 | #include "RP6I2CmasterTWI.h"
|
3 | #include "RP6Control_I2CMasterLib.h"
|
4 |
|
5 | uint8_t a;
|
6 | uint8_t interruptcounter;
|
7 |
|
8 |
|
9 | ISR(TIMER1_COMPA_vect)
|
10 |
|
11 | {interruptcounter++;
|
12 |
|
13 | if(interruptcounter <21)
|
14 | {DDRD |= (1<<PD5); //PD5 als Ausgang
|
15 | PORTD ^= (1<<PD5);
|
16 |
|
17 | }
|
18 |
|
19 | if(interruptcounter > 20 && interruptcounter <41)
|
20 | {DDRD &=~ (1<<PD5);
|
21 | }
|
22 |
|
23 | if(interruptcounter == 41)
|
24 | {interruptcounter =0;}
|
25 |
|
26 |
|
27 |
|
28 | }
|
29 |
|
30 |
|
31 |
|
32 |
|
33 |
|
34 | void infrarotempfang(void)
|
35 | {if (!(PINC & (1<<PC3)))
|
36 | {a++; //infrarot empfangen
|
37 | }
|
38 |
|
39 | }
|
40 |
|
41 | void RP6_Bewegung(void)
|
42 | {if(a<101)
|
43 | {changeDirection(BWD);
|
44 | moveAtSpeed(50,50); //Roboter fährt
|
45 | }
|
46 |
|
47 | if(a>100)
|
48 | {moveAtSpeed(0,0);
|
49 | writeString("RP6 anhalten\n"); // Roboter hält an
|
50 | startStopwatch1();}
|
51 |
|
52 | if(getStopwatch1() ==1000)
|
53 | {a=0;
|
54 | setStopwatch1(0);
|
55 | writeString("Stopwatch1 auf 0 zurück\n");}
|
56 | }
|
57 |
|
58 |
|
59 | int main(void)
|
60 | {initRP6Control();
|
61 |
|
62 | I2CTWI_initMaster(100);
|
63 |
|
64 | DDRC &=~ (1<<PC3); //PC3 als Eingang infrarotempfänger
|
65 |
|
66 | a=0; // a anfangs auf 0 setzen
|
67 |
|
68 | while(true)
|
69 | {
|
70 | infrarotempfang();
|
71 | RP6_Bewegung();
|
72 | }
|
73 | return 0;
|
74 | }
|
zur erklärung: der infrarotempfänger an PC3 schaltet auf low, wenn er ir
erkennt.
jetzt habe ich nur das problem, dass der µc immer, also auch wenn kein
ir erkannt wird, "RP6 anhalten" meldet. d.h. der roboter fährt gar nicht
erst los, was wohl daran liegt, dass die variable a von anfang an nicht
auf 0 zurückgesetzt wird.
kann mir vielleicht jemand helfen und sagen, was ich bisher noch falsch
gemacht habe?
mfg andi