mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik frage zu programm


Autor: andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
#include "RP6ControlLib.h"
#include "RP6I2CmasterTWI.h"
#include "RP6Control_I2CMasterLib.h"

uint8_t a;
uint8_t interruptcounter;


ISR(TIMER1_COMPA_vect) 
  
  {interruptcounter++;
  
if(interruptcounter <21)
  {DDRD |= (1<<PD5);  //PD5 als Ausgang
  PORTD ^= (1<<PD5);

}

if(interruptcounter > 20 && interruptcounter <41)
  {DDRD &=~ (1<<PD5);
}

if(interruptcounter == 41)
  {interruptcounter =0;}
  


}





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

}

void RP6_Bewegung(void)
{if(a<101)
  {changeDirection(BWD);
  moveAtSpeed(50,50); //Roboter fährt
  }

if(a>100)
  {moveAtSpeed(0,0);
  writeString("RP6 anhalten\n"); // Roboter hält an
startStopwatch1();}

if(getStopwatch1() ==1000)
  {a=0;
  setStopwatch1(0);
  writeString("Stopwatch1 auf 0 zurück\n");}
}

  
int main(void)
{initRP6Control();

I2CTWI_initMaster(100);  

DDRC &=~ (1<<PC3);    //PC3 als Eingang infrarotempfänger
 
a=0;        // a anfangs auf 0 setzen

while(true)
{
infrarotempfang();
RP6_Bewegung();
}
return 0;
}
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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.