Ich experimentiere gerade mit einem HC-06 Bluetoothmodul herum. Zunächst geht es mir noch nicht darum, konkrete Anwendungen umzusetzen, ich will erstmal grundsätzliches Verständnis aufbauen.
Dafür habe ich ein LC-Display angeschlossen und möchte mit der Smartphone-App "Ardudroid" einzelne Zeichnen an den Arduino senden, der das dann auf dem LCD darstellen soll.
Pro Schleifendurchlauf lese ich ein Zeichen aus dem Arduino Serialbuffer aus. Wenn ich mit ArduDroid ein "e" sende, scheint es so, dass er nicht nur das das Zeichen "e" sendet, sondern noch jede Menge Inofs mit, die dort auf dem Display erscheint. Kann mir jemand sagen, was das soll? Andere Fertig-Arduino-Bluetooth-Apps scheinen diese Funktionalität nicht zu haben und schicken einfach nur ein einzelnes Zeichen.
Ein weiteres Problem ergibt sich, wenn ich mit einer anderen Bluetooth-App arbeite, die lediglich das eine beabsichtigte Zeichen sendet. Mein Code soll einfach jeden Schleifendurchlauf gucken, ob ein Zeichen im Serial.Buffer steckt, dass dann ggf. auslesen und auf das LC-display drucken. Den Cursor bzw. die Zeile für das Display setze ich manuell mit Variablen i und d (dass das nicht wirklich notwendig ist, ist mir klar, aber sollte auch nicht zum Problem führen). Das Problem ist, dass es pures Glück zu sein scheint, ob auf dem Display meine per Handy gesendeten Zeichen ankommen, oder irgendwelche anderen Zeichen, wie z.B. Summenzeichen, oder andere Sonderzeichen. Mal klappt es und wenn ich dann manchmal nur eine Leerzeile in meinen Code ändere und den Code auf den Arduino spiele, klappt es nicht mehr und es kommt nur Müll an. Also es kommt schon noch ein Zeichen auf dem Display an, wenn ich ein Zeichen sende. Es ist nur ein vollkommen anderes. Oft nicht mal ein Buchstabe, sondern irgendwelche Sonderzeichen. Hat jemand eine Idee, woran das liegen könnte?
Hier mein Code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 6, 5, 4, 3);
//Globals
int i; //Cursor-Variable
int d; //Zeilen-
void setup() {
Serial.begin(9600);
Serial.flush();
pinMode(13, OUTPUT);
lcd.begin(16, 2);
i = 0;
d = 0;
}
void loop()
{
Serial.flush();
if (Serial.available() > 0)
{
lcd.write(Serial.read());
i++;
}
if(i>16)
{
d=1;
i=0;
}
if(d>0 && i>16)
{
d=0;
i=0;
}
lcd.setCursor(i, d);
delay(20);
}