ok. hatte heute einen schlechten tag und habe wieder einen ausgleich gesucht.
also den kleinen aus die kiste geholt, den rechner an und los.
mit folgendem prog habe ich die ersten erfolge:
Code:
#include <stdlib.h>
#include <avr/io.h>
#include "i2cmaster.h"
#include "asuro.h"
#define SRF02 0xE0 // device address
int main(void)
{
int i;
unsigned char t1, t2;
Init(); // init Asuro
i2c_init(); // init I2C interface
while(1)
{
StatusLED(RED);
for (i=0; i<200; i++)
{Sleep(155);}
StatusLED(GREEN);
i2c_start_wait(SRF02+I2C_WRITE);
i2c_write(0x00);
i2c_write(0x51);
i2c_stop();
for (i=0;i<90;i++){Sleep(72);} // mind. 65 ms warten bis Lesebefehl
i2c_start_wait(SRF02+I2C_WRITE);
i2c_write(0x02);
i2c_rep_start(SRF02+I2C_READ);
t1 = i2c_readNak();
i2c_stop();
i2c_start_wait(SRF02+I2C_WRITE);
i2c_write(0x03);
i2c_rep_start(SRF02+I2C_READ);
t2 = i2c_readNak();
i2c_stop();
char text1[6] =" ";
itoa(t1, text1, 6);
SerWrite(text1, 6);
SerWrite(" ", 6);
char text2[6] =" ";
itoa(t2, text2, 6);
SerWrite(text2, 6);
SerWrite("\r\n", 2); /* Zeilenvorschub */
}
return 0;
}
die messung wird gestartet und ich erhalte auch werte.
leider werte mit denen man noch nichts anfangen kann.
das high byte ist immer 0 egal wie weit ein objekt ist.
das low byte bringt mir werte größer 255.
1000 wurde mir auch angezeigt.
auf entfernungsänderungen reagiert das ganze. habe aber noch nichts nachgemessen.
für das low byte kommen werte wie:
bei kurzer entfernung so ca. 30 cm werte wie: 33; 34; 40 wäre ja super.
gehe ich dann aber nur ein wenig weiter kommt gleich 133;122;414..
gehe ich wieder einige cm weiter 50;51...
vielleicht fällt ja jemandem schon etwas ein.
jetzt reichts mir erst einmal. kiste auf, den kleinen rein. morgen ist auch noch ein tag.
Lesezeichen