Die Interruptlösung ist natürlich eleganter, wenn auch komplizierter^^
Allerdings glaub ich, wird das in diesen Fall nicht gehen, weil der Interrupt schon von der Mulwii-Software selbst benutzt wird (um dann weitere Unterfunktionen alaSerial.read() usw. bereitzustellen, denke ich)
nachdem ich grade den Code hochgeladen habe, sind direkt die Motoren angelaufen!! das kapier ich jetzt mal überhaupt nicht!
Ich noch weniger, hab die Software noch nie in den Finger gehabt und kann dementsprechend wenig damit anfangen...
Könntest du mal kurz erläutern, wo überhaupt dein UART-Zeug steht? Wie das ganze gegliedert ist?
Ich konnts nämlich nicht finden...
Gruß
-schumi-
PS: Warum enden die Sourcen eigentlich auf .pde? Also wenn das ne IDE ist, dann ne doofe^^ Und was hat Java damit zu tun?
Unabhängig vom Kompiler/IDE sind while-Schleifen tötlich, egal wie harmlos sie aussehen:
while (Serial.available()==0);
while((StringStatus = StringStatus_empfange) && (Serial.available()==0))
(und 'ne Zuweisung statt des Vergleichs ist besonders fies ;)
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Desshalb sagte ich ja, mit Sicherheit Tippfehler enthalten^^
(Habs oben mal ausgebessert)
Aber weist du was besseres? (Wenn man keine ISR benutzen darf)
Das Problem ist ja, dass wenn man ein IF anstatt WHILE verwendet, der Controller pro 1x Hauptschleife durchlaufen auch nur 1 Zeichen entgegennehmen kann. Und da sowohl Geschwindigkeit des UART als auch die Zeit die die Hauptschleife um einmal durchzulaufen benötigt unbekannt sind, ist es nicht möglich abzuschätzen, ober der Buffer überläuft oder nicht.
Mal abgesehen davon, dass ich damit warscheinlich sowiso überfordert währe, das auszurechnen^^
Mit der While-Schleife entleert er bei jedem Durchlauf der Hauptschleife den Buffer, so dass ein Überlauf wohl recht unwarscheinlich ist...
Hättest du ne bessere Lösung?
Gruß
[EDIT]: @nec-rot:
Ich werds mal versuchen^^
danke Schumi![]()
mit dem I2C Bus hab ich das teil ja auch schon zum laufen bekommen, und zwar direkt über den Mikrocontroller 1.
Vielleicht kann man den Code effizienter einsetzen um die Zykluszeit kaum zu beeinflussen.
//Einlesen der Entferung über I2C mit SRF02 Ultraschallsensor.
#include <Wire.h>
#define srf02Address (0xE0 >> 1)
#define cmdByte 0x00 //Startbefehl zum messen
#define rangeByte 0x02
#define startMessung 0x51
byte MSB = 0x00;
byte LSB = 0x00;
void setup()
{
Serial.begin(115200);
Wire.begin();
}
void loop()
{
int rangeData = getRange();
Serial.println(rangeData); // Ausgabe der Entfernung
delay(200);
}
int getRange()
{
int range = 0;
Wire.beginTransmission(srf02Address); //Ultraschallmesser wird über seine Adresse angesprochen
Wire.send(cmdByte); //Startbefehl zum messen
Wire.send(startMessung); //Startet Messvorgang in cm
Wire.endTransmission();
delay(100);
Wire.beginTransmission(srf02Address);
Wire.send(rangeByte);
Wire.endTransmission();
Wire.requestFrom(srf02Address, 2);
while(Wire.available() < 2);
MSB = Wire.receive();
LSB = Wire.receive();
range = (MSB <<+ LSB;
return(range);
}
Also...Du kannst es aber auch nochmal mit der Seriellen versuchen, ich hab die Fehler oben ausgebessert..
- Ich hab nen Tippfehler, einmal Stringstatus anstatt StringStatus geschrieben....
- Ich kanns nicht erfolgreich kompilieren, weil der AVR-GCC meine math.h anmault (warum weis ich nicht... mal gucken)
- #2 würde mir sowiso nichts bringen, weil mein Gehirn nicht 2 AVRs, inclusive Pheripherie simulieren kann^^ Und um den Code von Hand durchzugehen ist es zu viel und zu komplex....
Eindeutig die bessere Lösung - aber ich bin ein I2C-Noob und kann dir da leider nicht weiterhelfenmit dem I2C Bus hab ich das teil ja auch schon zum laufen bekommen, und zwar direkt über den Mikrocontroller 1.
Gruß
-schumi-
PS: Für Code gibt es Codeblöcke, dann bekommt der auch keine SmileysDie findest du im Editor in der Zweiten Symoblleiste, der 3. Button von rechts (Das Schweinegatter)
Die Dateien kannst du mit dem Arduino Tool hier: http://arduino.googlecode.com/files/arduino-0022.zip öffnen.
Das ganze untergliedert sich in verschiedene Bereiche:
ich hab mal meinen Schaltplan + den Code als Bild angehängt
![]()
Lesezeichen