PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : IR-Sensoren als Abstanderkennung - Erweiterung beim 3PI



pinsel120866
08.12.2012, 10:16
hallo,

ich würde gerne die abstandserkennung, die beim asuro eingesetzt wird, auf meinen 3pi bauen. die programmierung kann ich vom asuro übernehmen, nur weiss ich nicht wie ich die 36 khz auf die leds bringe.

wie muss ich die lib abändern, bzw wo muss ich das machen?

wäre nett, wenn mir hierbei jemand helfen könnte.

- - - Aktualisiert - - -

Ich liefere mal mehr Informationen:

- die Anode der rechten LED hängt an Pin ADC7
- die Anode der linken LED hängt an Pin ADC6
- die Kathoden beider LEDs hängen an Pin D1
- dad SFH5110 hängt an Pin D0

23963

Programm:


#include <pololu/3pi.h>
#include <avr/pgmspace.h>


uint8_t objekt_sichtbar_rechts(uint8_t distance_r)
{
uint16_t j,z;

DDRC |= (1 << DDC7); // Port C7 als Ausgang
PORTC &= ~(1 << PC7); // PC7 auf LOW

OCR2 = 254-distance_r; // wenn OCR2=0xFE dann Objekt sehr nahe
z=0;
for(j=0;j<30;j++) // loop time: 5ms
{
if (PIND & (1 << PD1))z++;
Sleep(6); // 6*Sleep(6)=1ms
}
if (z>=29) return FALSE; // Objekt nicht gefunden
else return TRUE;
}

uint8_t objekt_sichtbar_links(uint8_t distance_l)
{
uint16_t i,y;

DDRC |= (1 << DDC6); // Port C6 als Ausgang
PORTD &= ~(1 << PC6); // PC6 auf LOW

OCR2 = 254-distance_l; // wenn OCR2=0xFE dann Objekt sehr nahe
y=0;
for(i=0;i<30;i++) // loop time: 5ms
{
if (PIND & (1 << PD1))y++;
Sleep(6); // 6*Sleep(6)=1ms
}
if (y>=29) return FALSE; // Objekt nicht gefunden
else return TRUE;
}

uint8_t abstand_rechts()
{
uint8_t k,n;

k=255;
for(n=0;n<8;n++)
{
if (!objekt_sichtbar_rechts(n)) k=n; // solange kein Objekt, Distanz erhoehen
}
return k;
}

uint8_t abstand_links()
{
uint8_t l,m;

l=255;
for(m=0;m<8;m++)
{
if (!objekt_sichtbar_links(m)) l=m; // solange kein Objekt, Distanz erhoehen
}
return l;
}
/************************************************** ***********************

Hauptprogramm

************************************************** ***********************/
int main(void)
{
uint8_t n,m;

Init();

left_led(0);
right_led(0);

while(1)
{
{
n=abstand_rechts();
left_led(0);
right_led(0);

if(n!=255)
{
if (n<5) left_led(0);
right_led(1);

delay_ms(10);
}
}
{
m=abstand_links();
left_led(0);
right_led(0);

if(m!=255)
{
if (m<3) left_led(1);
right_led(0);

delay_ms(10);

}
}
}
}

Wenn ich das kompiliere, kriege ich viele Fehlermeldungen, weil die passende Lib fehlt.

Widooo
21.06.2013, 15:11
Bei deiner Frage kann ich dir leider nicht weiterhelfen, jedoch hätte ich eine andere Frage!

Welche Ausgabe hat deine IR-Abstandsensor?

--> von 1 bis 10, wo 1 nahe und 10 weit entfernt ist ?
--> oder in einer Längeneinheit?