Show Posts
Pages: [1]
1  Products / Arduino Due / Re: "Hypethreading" on: December 17, 2012, 03:40:54 am
Hey maui,

Protothreads could be what you are looking for.

http://dunkels.com/adam/pt/

Quote
"Protothreads provide sequential flow of control without complex state machines or full multi-threading." -- Adam Dunkles

2  Using Arduino / Networking, Protocols, and Devices / Re: nRF24L01 serial like synchronous bi-directional communication on: December 12, 2012, 07:09:55 am
The meta Information is a good idea and I'm already working on it, but I've still got the feeling there is much simpler solution out there  smiley-mr-green.

Do you know any settings which have to be set so a shield could work the way it should?

I use the ITEAD BT Shield v2.2, based on the Bluetooth HC-05 modem transceiver.
3  Using Arduino / Networking, Protocols, and Devices / Re: nRF24L01 serial like synchronous bi-directional communication on: December 12, 2012, 03:35:04 am
Hey robvoi,

I'm looking for a protocol for send/recieve messages over Bluetooth. Atm I'm using Serial.read()/write(bytearray,lengt) to get/post messages and my scetch is working well but sometimes some bytes are twisted, different or just missing.

Does your scetch work with Bluetooth?
Or do you know any protocol which would solve my problem?
4  International / Deutsch / Re: Bluetooth: Fehler in Nachrichten on: December 06, 2012, 03:03:09 am
Mensch! dass die genialen Lösungen auch immer einfach sein müssen    smiley-mr-green

Die Idee mit dem Delay hatte ich bereits, damals hatte ich aber wohl einen zu großen Wert genommen, diesen obendrein mit in die Schleife gebaut und kam bei größeren Datenmengen auf ewige Wartezeiten. Heute bin ich darauf gekommen, wie man dies evtl. optimieren und auch mehr, als 30 Byte erlauben kann. Vielleicht kann es einem anderen Suchenden helfen:

Code:
int i, len = 0;
byte data[64];
for (i = 0; mySerial.available(); i++) {
data[i] = mySerial.read();
len++;
if (mySerial.available() == 0)
delay(2);
}

Für alle anderen Fehler wird wohl ein Sicherungsverfahren herhalten müssen  smiley-grin

Danke an mkl0815 und  michael_x
5  International / Deutsch / Re: Bluetooth: Fehler in Nachrichten on: December 05, 2012, 09:35:03 am
Die Sache mit dem len++ setze ich bei der Ausgabe wieder auf 0, um beim nächsten Lesen wieder bei 0 anzufangen.

Dass Arduino gar nicht so langsam ist, ist mir erst vor einigen Tagen klar geworden, als ich als häufigsten Fehler eine 255 Ausgegeben bekommen hatte.
Später hatte ich gelesen, dass read(), im Falle, dass noch keine Bytes da sind, -1 liefert -> diese wird aber beim konvertieren zum byte zu 255.
Zu diesem Zeitpunkt waren auch ca 40% aller Nachrichten fehlerbehaftet

Macht es eigentlich einen Unterschied, ob man stop bit und parity nutzt? Im Moment nutze ich folgende Einstellung : AT+UART=38400,0,0 - und somit weder stop, noch parity bit.

Als ich gestern Abend mit dem UART befehl rumgespielt habe, ist mir aufgefallen, dass mit dem stopbit (38400,1,0) deutlich mehr Fehler aufgekommen sind, als ohne diesen bit.

Und noch etwas: kann man mit Bluetooth eig. gleichzeitig senden und empfangen? Ich meine ich schicke dand einem Thread alle 50 msec ein Datenpaket raus, empfange diese mit dem Arduino auf mySerial, gebe diese auf Serial aus und schicke das gleiche Paket über mySerial wieder ans Telefon, wo diese wieder angezeigt werden - kann es sein, dass das eintreffende Paket vom gerade losgeschickten gestört wird?
6  International / Deutsch / Bluetooth: Fehler in Nachrichten on: December 05, 2012, 07:55:09 am
Hallo,
für mein Projekt nutze ich diesen BT-Shield von ITEAD STUDIO:
http://blog.iteadstudio.com/arduino-bluetooth-shield-upgrade-to-v2-2/

Ziel des Projekts:
Ich möchte Nachrichten, bzw Befehle vom Arduino zu einer Android App und wieder zurück schicken können.
Nach dem Durcharbeiten von vielen Anleitungen und Foren habe ich eine Kommunikation auch zustande bekommen. Nun habe ich aber folgendes Problem:

Was ich genau mache:
Im Java Code nutze ich folgenden Befehl: void java.io.OutputStream.write(byte[] buffer)

Code:
public void write(byte[] buffer) {
try {
mmOutStream.write(buffer);
} catch (IOException e) {
Log.e(TAG, "Exception during write", e);
}
}

Das Objekt mmOutStream ist eine OutputStream Klasse und schickt mit write(bytearray) für mich ein Bytepaket raus. Dabei ist die Länge der Pakete zwischen 3 und 30 Byte. Hingegen kann die Zeit zwischen 2 Paketen variieren, Mindestabstand ist jedoch 15 msec.
 Zum Lesen benutze ich:
Code:
int len, i; // len = anzahl bytes, i = counter
byte data[64]; // zum Speichern der Werte

for( i = 0 ; mySerial.available(); i++) {
data[i] = (byte) mySerial.read();
len++;
}

Mein Problem:
ca. 95% aller versandten Bytes der App kommen richtig beim Arduino an. Die restlichen 5% hingegen sind fehlerhaft: die angekommenen Bytes haben föllig falsche Werte. Das nächste ankommende Paket ist hingegen ganz richtig. Deutlich seltener kommt es vor, dass ein Byte ausgelassen/vergessen wird.

Zur Frage:
Nutzt das BT-Shield irgendwelche Protokolle, um Nachrichten gegen Fehler abzusichern? Denn wen dies so ist, liegt der Fehler einzig und allein in meinem Programm. Irgendwie habe ich noch keine Forumfrage gesehen, die Fehler in verschickten Daten behandeln - weiß jemand, was ich falsch mache?
Pages: [1]