Hallo achim S,
sieht schlecht aus nach meiner Meinung. Hier ein Programm das dir zeigt wie die IR Sensoren reagieren. Ich habe mal mit einer Lampe auf ein IR Sensor geleuchtet und es ändert sich nichts an den Werten die sie messen. Das hat mich aber auf eine andere Idee gebracht. Wenn du z.B. mit einer IR Fernseh Fernbedienung auf die IR Sensoren leuchest ändern sich die Werte soweit dass man damit was anfangen könnte
#include <nibo/niboconfig.h>
#include <nibo/display.h>
#include <nibo/gfx.h>
#include <nibo/copro.h>
#include <nibo/delay.h>
#include <nibo/iodefs.h>
#include <nibo/bot.h>
#include <avr/interrupt.h>
#include <stdio.h>
#include <nibo/spi.h>
#include <nibo/leds.h>
#include <nibo/pwm.h>
void shape();
void col(int li,int voli, int vo, int vore, int re);
int main()
{
sei();
bot_init();
leds_init();
pwm_init();
spi_init();
display_init();
gfx_init();
leds_set_displaylight(800);
copro_ir_startMeasure();
while (1==1)
{
copro_update();
delay(70);
gfx_term_clear ();
shape();
col(copro_distance[0],copro_distance[1], copro_distance[2], copro_distance[3], copro_distance[4]);
delay(200);
}
return 0;
}
//
Fuktionen
void col(int li,int voli, int vo, int vore, int re)
{
//Kollision links
int lline =0;
if (li<=-1) {lline = 9;}
if (li>=5000) {lline = 3;}
if (li>=15000) {lline = 6;}
// Linien links
for (lline=lline; lline<=6; lline=lline+3)
{
gfx_move (30+lline,16);
gfx_lineTo (30+lline,24);
// gfx_move (30+lline,16-lline);
// gfx_lineTo (30+lline,24+lline);
}
//Kollision vornelinks
int vlline =0;
if (voli<=-1) {vlline = 9;}
if (voli>=5000) {vlline = 3;}
if (voli>=15000) {vlline = 6;}
// Linien vornelinks
for (vlline=vlline; vlline<=6; vlline=vlline+3)
{
gfx_move (35+vlline,44-vlline);
gfx_lineTo (40+vlline,49-vlline);
// gfx_move (30+vlline,39-vlline);
// gfx_lineTo (45+vlline,54-vlline);
}
//Kollision vorne
int vline =0;
if (vo<=-1) {vline = 9;}
if (vo>=5000) {vline = 3;}
if (vo>=15000) {vline = 6;}
// Linien vorne
for (vline=vline; vline<=6; vline=vline+3)
{
gfx_move (61,54-vline);
gfx_lineTo (68,54-vline);
// gfx_move (61-vline,54-vline);
// gfx_lineTo (68+vline,54-vline);
}
//Kollision vornerechts
int vrline =0;
if (vore<=-1) {vrline = 9;}
if (vore>=5000) {vrline = 3;}
if (vore>=15000) {vrline = 6;}
// Linien vornerechts
for (vrline=vrline; vrline<=6; vrline=vrline+3)
{
gfx_move (94-vrline,44-vrline);
gfx_lineTo (89-vrline,49-vrline);
// gfx_move (98-vrline,39-vrline);
// gfx_lineTo (84-vrline,53-vrline);
}
//Kollision rechts
int rline =0;
if (re<=-1) {rline = 9;}
if (re>=5000) {rline = 3;}
if (re>=15000) {rline = 6;}
// Linien rechts
for (rline=rline; rline<=6; rline=rline+3)
{
gfx_move (99-rline,16);
gfx_lineTo (99-rline,24);
// gfx_move (99-rline,16-rline);
// gfx_lineTo (99-rline,24+rline);
}
char textli[20]="-- -- -- --";
sprintf(textli, "%d", li);
gfx_move(0, 0);
gfx_print_text(textli);
char textvoli[20]="-- -- -- --";
sprintf(textvoli, "%d", voli);
gfx_move(0, 10);
gfx_print_text(textvoli);
char textvo[20]="-- -- -- --";
sprintf(textvo, "%d", vo);
gfx_move(0, 20);
gfx_print_text(textvo);
char textvore[20]="-- -- -- --";
sprintf(textvore, "%d", vore);
gfx_move(0, 30);
gfx_print_text(textvore);
char textre[20]="-- -- -- --";
sprintf(textre, "%d", re);
gfx_move(0, 40);
gfx_print_text(textre);
}
void shape() {
gfx_move (39,10);
gfx_lineTo (39,30); //links
gfx_lineTo (54,45); //linksvorne
gfx_lineTo (74,45); //vorne
gfx_lineTo (89,30); //rechtsvorne
gfx_lineTo (89,10); //rechts
gfx_lineTo (39,10); //unten
}
Das Programm zeichnet auf dem Display den Nibo2 von oben ab und Abstandslinien. Je näher ein Objekt kommt desto weniger Linien werden angezeigt. Ich glaube der Code für die Linien ist etwas seltsam geschrieben. Igendwie in den Rücken durch die Brust ins Auge ... aber funktioniert
Links am Rand findst du die Wete die die einzelnen Sensoren messen. Vielleicht hilft dir das weiter. Bei Fragen...einfach fragen.
Grüße, Arcanix