Hallo,
der gefundene Code von Serenifly funktioniert nur vom Arduino aus in alle Richtungen.
Dann habe Code gefunden der auch vom Smartphone aus funktioniert.
Allerdings hat der keine Endezeichen bzw. Endeerkennung.
Das äußerst sich dann darin, dass ich zum Bsp. "Hallo" mehrfach senden muß bevor das erkannt wird, scheinbar bis der Empfangspuffer voll ist und dann wird Hallo mehrfach hintereinander ausgegeben. Das ist natürlich blöd.
Dann habe ich irgendwie zufällig herausgefunden das man vom Smartphone aus mit dem HC-06 kein LF oder CR senden kann. Warum nicht?
Nun dachte ich mir, okay, dann hänge ich an meine Zeichen zum Bsp. ein @ ran als Endeerkennung. Sende dann also "Hallo@".
Das Problem von oben bleibt jedoch bestehen. Es werden erst Zeichen erkennt/empfangen wenn scheinbar der Puffer voll ist.
Wie kann man das Problem lösen?
von mir angepaßter Code von Serenifly
#include <SPI.h>
#include <DogLcdSPI.h> // für Hardware SPI angepaßte DogLcd.h
const int SERIAL_BUFFER_SIZE = 15;
char serialBuffer[SERIAL_BUFFER_SIZE];
DogLcdSPI lcd(26, 27); // Pins für RS und CSB
void setup() {
Serial.begin(57600);
Serial1.begin(57600);
SPI.begin();
// set up the LCD type and the contrast setting for the display
lcd.begin(DOG_LCD_M163); // EA-DOGM Display 3 zeilig
lcd.noCursor(); // Cursor nicht sichtbar
lcd.print(F("MEGA")); // Print a message to the LCD.
} // Ende setup
void loop(void) {
if( read_Serial_0() ) {
ShowSerialData();
lcd.print(serialBuffer);
}
if( read_Serial_1() ) {
ShowSerialData();
lcd.print(serialBuffer);
}
} // Ende loop
/* ------------------------------------------------------------------------------------------------ */
boolean read_Serial_0()
{
static unsigned int index;
if (Serial.available() > 0) {
char c = Serial.read();
if (c >= 32 && index < SERIAL_BUFFER_SIZE - 1)
{
serialBuffer[index++] = c;
}
else if(c == '\n' || '\r') // Endeerkennung, LineFeed oder CarrierReturn
{
serialBuffer[index] = '\0';
index = 0;
return true;
}
}
return false;
}
boolean read_Serial_1() // vom Smartphone über Bluetooth
{
static unsigned int index;
if (Serial1.available() > 0) {
char c = Serial1.read();
if (c >= 32 && index < SERIAL_BUFFER_SIZE - 1)
{
serialBuffer[index++] = c;
}
else if(c == '@') // Endeerkennung @ Zeichen
{
serialBuffer[index] = '\0';
index = 0;
return true;
}
}
return false;
}
void ShowSerialData ()
{
Serial.print(serialBuffer);
Serial1.print(serialBuffer);
}
das ist der Bsp. Code aus dem www, dadurch kam ich drauf das vom Smartphone/BT kein LF/CR geschickt wird.
void loop(void) {
// read from port 1, send to port 0:
if (Serial1.available() ) {
int inByte = Serial1.read();
if(inByte) {
Serial1.write(inByte);
}
Serial.write(inByte);
}
// read from port 0, send to port 1:
if (Serial.available() ) {
int inByte = Serial.read();
if(inByte) {
Serial.write(inByte);
}
Serial1.write(inByte);
}
Das Problem ist also, wie bekommt man vom Smartphone / HC-06 eine ordentliche Endeerkennung hin?