Re: SRF08 Kategorie: Sensoren (von André H. - 10.04.2004 15:15) | ||
Als Antwort auf SRF08 von Floyd - 5.04.2004 22:59 | ||
| ||
Hallo Floyd, > Daher nun meine Frage, ob jemand schon diese Sensoren zufriedenstellend zum laufen > bekommen hat?! Ich mache zwar nichts mit Ultraschall-Sensoren, jedoch kann ich Dir ein paar Hinweise zur Verwendeung des I²C-Busses geben: > Ich verwende folgenden Quellcode: > > byte buffer[2]; > int range; > string s; > > i2c.init(); Den I²C-Bus mu�t Du nicht initialisieren, da dies beim Start der VM automatisch gemacht wird. > lcdext.init(); > > loop > { > i2c.start(0xE0); Benutze immer i2c.cstart() , falls Du auf den I²C-Bus aus mehreren Threads zugreifen willst. > i2c.write(0); > i2c.write(0x51); 0x51 scheint als Kommando für cm zu stimmen. > i2c.stop(); > > sleep 70; > > i2c.start(0xE0); auch hier wieder cstart() :-) > i2c.write(2); > i2c.start(0xE1); > buffer[0]=i2c.readlast(); > i2c.stop(); > > i2c.start(0xE0); > i2c.write(3); > i2c.start(0xE1); > buffer[1]=i2c.readlast(); > i2c.stop(); Du mu�t I²C-Bus-Bausteine i.d.R nicht erneut Adressieren, wenn Du zwei Bytes hintereinander lesen willst. > > range = mem.getint(buffer,0); > > lcdext.clear(); > s=""; > str.putint(s,range); > > lcdext.print(s); Die Ausgabe auf das LCD geht auch einfacher. Hier ein etwas abgeänderter Quellcode: thread main { lcdext.init(); lcdext.goto(1,6); lcdext.print("cm"); loop { i2c.cstart(0xE0); i2c.write(0); i2c.write(0x51); i2c.stop(); sleep 100; // vielleicht hilft eine etwas höhere Pause :-) i2c.cstart(0xE0); i2c.write(2); i2c.start(0xE1); lcdext.line(1); lcdext.zahl((i2c.read() shl 8) or i2c.readlast()); i2c.stop(); } } MfG André H. Antworten bitte nur ins Forum! Fragen per EMail auf Forum-Postings werden nicht beantwortet! Das macht meine Heizung gerade | ||
Antwort schreiben Antworten: |