pinsel120866
08.12.2012, 11: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.
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.