frage zu programm

Gast #1582323
Lesenswert?
• ▲
▼
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
#1582337
Lesenswert?
• ▲
▼
andi schrieb:

> 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.

Das denke ich nicht.
Es wird wohl eher so sein, dass das hier

void infrarotempfang(void)
{if (!(PINC & (1<<PC3)))
 {a++;  //infrarot empfangen
 }
}

den Pin PC3 immer (oder meistens) auf LOW vorfinden wird (zb. weil sich 
der Empfänger irgendwelche Reflexionen einfängt. Wenn du dein IR Signal 
nicht moduliert hast, würde mich das nicht weiter wundern. Wie sieht 
denn die Schaltung dazu aus?)

Lass dir doch in dieser Funktion einmal a ausgeben

void writeUint8( uint8_t wert )
{
  char buffer[10];
  itoa( buffer, (int)wert, 10 );
  writeString( buffer );
}

und dann fügst du einen Aufruf ein

void infrarotempfang(void)
{
 if (!(PINC & (1<<PC3)))
 {
   writeString( "IR: " );
   a++;  //infrarot empfangen
   writeUint8( a );
   writeString( " " );
 }
}

dann weißt du was Sache ist.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.