Bluetooth Modul Serieller Monitor

Guten Morgen

Ich versende Nummern an meinen Arduino MEGA 2650 über eine Android-App via Bluetooth. Ich besitze das Bluetooth-Modul HC-05. Meine App schickt verschiedene Zahlen. Aber der Arduino erhält nur 3 verschiedene Dezimalzahlen, die so aussehen:

0
248
128
Diese Zahlen sollten eigentlich die 52 in der ASCII-Tabelle sein.

Wie kann ich die Zahlen umwandeln? Die Zahlen werden über Serial ausgelesen. Ich möchte, je nachdem, was für eine Zahl empfangen wird, meinem Programm eine Richtung sagen. Ich habe es mit switch-case programmiert.

* LedTable 
* 
 * Written by: Klaas De Craemer, Ing. David Hrbaty, Modified by: Mark Quinn
 *  
 *  
* Main file with common methods and defines, such as button reading from Bluetooth controller 
* or setting pixels on the LED area 
*/ 
#include <SoftwareSerial.h> 
//LED field size
#define  FIELD_WIDTH      16
#define  FIELD_HEIGHT     16
const int NUM_LEDS=FIELD_WIDTH*FIELD_HEIGHT;
#define  ORIENTATION_HORIZONTAL //Rotation of table, uncomment to rotate field 90 degrees 


#include <SPI.h>
#include <SD.h>
#define USE_FAST_LED   // FAST_LED as library to control the LED strips 

#define BLUETOOTH_SPEED 38400 
/* 
 * Some defines used by the FAST_LED library 
 */ 
#define FAST_LED_CHIPSET WS2812B
#define FAST_LED_DATA_PIN 6
#define MAX_BRIGHTNESS 255      // Thats full on, watch the power!
#define MIN_BRIGHTNESS 10       // set to a minimum of 8%
const int brightnessInPin = A0;






#define  NUM_PIXELS    FIELD_WIDTH*FIELD_HEIGHT 


/* *** LED color table *** */ 
#define  GREEN  0x008000 
#define  RED    0xFF0000 
#define  BLUE   0x0000FF 
#define  YELLOW 0xFFFF00 
#define  LBLUE  0x00FFFF 
#define  PURPLE 0xFF00FF 
#define  WHITE  0XFFFFFF
#define  AQUA   0x00FFFF
#define  HOTPINK 0xFF69B4
unsigned int long colorLib[9] = {RED, GREEN, BLUE, YELLOW, LBLUE, PURPLE, WHITE, AQUA, HOTPINK}; 
/* *** Game commonly used defines ** */ 
#define  DIR_UP     1 
#define  DIR_DOWN   2 
#define  DIR_LEFT   3 
#define  DIR_RIGHT  4 


/* *** Bluetooth controller button defines and input method *** */ 
#define  BTN_NONE   0 
#define  BTN_UP     1 
#define  BTN_DOWN   2 
#define  BTN_LEFT   3 
#define  BTN_RIGHT  4 
#define  BTN_START  5 
#define  BTN_EXIT   6 


uint8_t curControl = BTN_NONE; 
// Serial1.begin(38400); 

byte incomingByte; 

void readInput(){ 
  curControl = BTN_NONE; 
 if (Serial1.available() > 0) { 
    // read the incoming byte: 
        incomingByte = Serial1.read(); 
    Serial.println(incomingByte); 
      switch(incomingByte){ 
        case 51: 
          curControl = BTN_LEFT; 
         break; 
        case 52: 
         curControl = BTN_RIGHT; 
          break; 
        case 49: 
          curControl = BTN_UP; 
          break; 
        case 50: 
         curControl = BTN_DOWN; 
          break; 
        case 53: 
         curControl = BTN_START; 
          break; 
        case 54: 
          curControl = BTN_EXIT; 
         break; 
      } 
    }  
} 



/* *********************************** */ 



void setup(){ 
 Serial.begin(115200); 
  //Wait for serial port to connect 
    Serial1.begin(BLUETOOTH_SPEED);
   
} 


void loop(){ 
}

Led_table_neu_test.zip (23.6 KB)

fehlkauf_1234:
... meinem Programm eine Richtung sagen. ...

Also erstens glaube ich nicht, dass Du das Programm geschrieben hast. Schon der Anfang spricht dagegen :wink:

Zweitens solltest Du den Sketch in code-Tags fassen, damit er halbwegs lesbar und vor allem scrollbar ist.

Und drittens ist mir nicht die Bohne klar, woher die von Dir genannte 52 kommt und warum die zu drei (scheinbar Byte-) Werten führen. Soll ich jetzt herausfinden, wo der wahre Programmierer etwas mit irgendwelchen Zahlen anfängt?

Gruß

Gregor, leicht irritiert

gregorss:
Also erstens glaube ich nicht, dass Du das Programm geschrieben hast. Schon der Anfang spricht dagegen :wink:

Zweitens solltest Du den Sketch in code-Tags fassen, damit er halbwegs lesbar und vor allem scrollbar ist.

Und drittens ist mir nicht die Bohne klar, woher die von Dir genannte 52 kommt und warum die zu drei (scheinbar Byte-) Werten führen. Soll ich jetzt herausfinden, wo der wahre Programmierer etwas mit irgendwelchen Zahlen anfängt?

Gruß

Gregor, leicht irritiert

  1. Ich habe nie gesagt das ich den code selber geschrieben habe. 2. Ich bin Forum Anfänger 3. Die 3 Byte Werte sollen zur 52 werden ,da die den Befehl Rechts gibt

fehlkauf_1234:

  1. Ich habe nie gesagt das ich den code selber geschrieben habe. 2. Ich bin Forum Anfänger 3. Die 3 Byte Werte sollen zur 52 werden ,da die den Befehl Rechts gibt

Ich glaube, Du hast mein Posting anders verstanden, als ich es gemeint habe. Was soll's, das nächste Wochenende ist nahe.

Wenn der Code nicht von Dir ist, ist es blöd, es so zu sagen. Und als Anfänger hast Du hier sowieso eine Art Bonus für freundliche Behandlung. Falls ich unfreundlich rüberkam: Mein Kaffee ist leer, das hat zu dieser Tageszeit manchmal seltsame Folgen.

Fasse den Code im Ursprungsposting in code-Tags (Du kannst das auch nachträglich machen). Sobald ich gerade gucken kann (wenn ich wieder Kaffee habe), gucke ich nochmal drauf.

Gruß

Gregor

gregorss:
Ich glaube, Du hast mein Posting anders verstanden, als ich es gemeint habe. Was soll's, das nächste Wochenende ist nahe.

Wenn der Code nicht von Dir ist, ist es blöd, es so zu sagen. Und als Anfänger hast Du hier sowieso eine Art Bonus für freundliche Behandlung. Falls ich unfreundlich rüberkam: Mein Kaffee ist leer, das hat zu dieser Tageszeit manchmal seltsame Folgen.

Fasse den Code im Ursprungsposting in code-Tags (Du kannst das auch nachträglich machen). Sobald ich gerade gucken kann (wenn ich wieder Kaffee habe), gucke ich nochmal drauf.

Gruß

Gregor

Alles ist gut ;)Habe den Code oben in code-tags zusammen gefasst

fehlkauf_1234:
Habe den Code oben in code-tags zusammen gefasst

Gut. Ich habe ihn zunächst mal etwas etwas besser lesbar gemacht, hoffentlich ohne dabei die Arbeitsweise des Codes selbst zu ändern. Da ich gerade einen Systmwechsel mache, kann ich lokal gerade keine Arduino-IDE nutzen. Probiere mal, ob der überarbeitete Code noch immer das macht, was er schon vorher tat.

Gruß

Gregor

gregorss:
Gut. Ich habe ihn zunächst mal etwas etwas besser lesbar gemacht, hoffentlich ohne dabei die Arbeitsweise des Codes selbst zu ändern. Da ich gerade einen Systmwechsel mache, kann ich lokal gerade keine Arduino-IDE nutzen. Probiere mal, ob der überarbeitete Code noch immer das macht, was er schon vorher tat.

Gruß

Gregor

Okay alles klar

gregorss:
Da ich gerade einen Systmwechsel mache, kann ich lokal gerade keine Arduino-IDE nutzen.

OhOh. Du weißt doch: Never touch a running system.

Gruß Tommy

Tommy56:
OhOh. Du weißt doch: Never touch a running system.

Das Blöde war, dass das alte System nicht mehr gepflegt und mit Updates versorgt wurde. Und weil ich kein systemd haben mag, muss ich mich jetzt mit Slackware beschäftigen. Irgendwie verhält sich Slackware zu Debian wie Arduino zu RPi - ich mag die Arduinos lieber.

Gruß

Gregor

gregorss:
Gut. Ich habe ihn zunächst mal etwas etwas besser lesbar gemacht, hoffentlich ohne dabei die Arbeitsweise des Codes selbst zu ändern. Da ich gerade einen Systmwechsel mache, kann ich lokal gerade keine Arduino-IDE nutzen. Probiere mal, ob der überarbeitete Code noch immer das macht, was er schon vorher tat.

Gruß

Gregor

Ja kann ich machen, wo finde ich das umgeschriebene Programm ?

fehlkauf_1234:
Ja kann ich machen, wo finde ich das umgeschriebene Programm ?

Ups, ich habe doch glatt vergessen, den Code in mein Posting einzufügen. Hier ist er:

/* LedTable
 *
 * Written by: Klaas De Craemer, Ing. David Hrbaty, Modified by: Mark Quinn
 *  
 *  
 * Main file with common methods and defines, such as button reading from
 * Bluetooth controller or setting pixels on the LED area
 */

#include <SoftwareSerial.h>
#include <SPI.h>
#include <SD.h>

//LED field size
#define  FIELD_WIDTH      16
#define  FIELD_HEIGHT     16
const int NUM_LEDS=FIELD_WIDTH*FIELD_HEIGHT;
#define  ORIENTATION_HORIZONTAL // Rotation of table, uncomment to rotate
                                // field 90 degrees
#define USE_FAST_LED   // FAST_LED as library to control the LED strips
#define BLUETOOTH_SPEED 38400

/*
 * Some defines used by the FAST_LED library
 */
#define FAST_LED_CHIPSET WS2812B
#define FAST_LED_DATA_PIN 6
#define MAX_BRIGHTNESS 255      // Thats full on, watch the power!
#define MIN_BRIGHTNESS 10       // set to a minimum of 8%
const int brightnessInPin = A0;
#define  NUM_PIXELS    FIELD_WIDTH*FIELD_HEIGHT

/* *** LED color table *** */
#define  GREEN  0x008000
#define  RED    0xFF0000
#define  BLUE   0x0000FF
#define  YELLOW 0xFFFF00
#define  LBLUE  0x00FFFF
#define  PURPLE 0xFF00FF
#define  WHITE  0XFFFFFF
#define  AQUA   0x00FFFF
#define  HOTPINK 0xFF69B4
unsigned int long colorLib[9] = {RED, GREEN, BLUE, YELLOW, LBLUE, PURPLE,
				 WHITE, AQUA, HOTPINK};
/* *** Game commonly used defines ** */
#define  DIR_UP     1
#define  DIR_DOWN   2
#define  DIR_LEFT   3
#define  DIR_RIGHT  4

/* *** Bluetooth controller button defines and input method *** */
#define  BTN_NONE   0
#define  BTN_UP     1
#define  BTN_DOWN   2
#define  BTN_LEFT   3
#define  BTN_RIGHT  4
#define  BTN_START  5
#define  BTN_EXIT   6

uint8_t curControl = BTN_NONE;
// Serial1.begin(38400);

byte incomingByte;

void readInput()
{
  curControl = BTN_NONE;
  if (Serial1.available() > 0)
  {
    // read the incoming byte:
    incomingByte = Serial1.read();
    Serial.println(incomingByte);
    switch(incomingByte)
    {
      case 51: curControl = BTN_LEFT;  break;
      case 52: curControl = BTN_RIGHT; break;
      case 49: curControl = BTN_UP;    break;
      case 50: curControl = BTN_DOWN;  break;
      case 53: curControl = BTN_START; break;
      case 54: curControl = BTN_EXIT;  break;
    }
  }
}

void setup()
{
  Serial.begin(115200);
  //Wait for serial port to connect
   Serial1.begin(BLUETOOTH_SPEED); 
}

void loop()
{
}

Gruß

Gregor

gregorss:
Ups, ich habe doch glatt vergessen, den Code in mein Posting einzufügen. Hier ist er:

/* LedTable
  • Written by: Klaas De Craemer, Ing. David Hrbaty, Modified by: Mark Quinn

    *
  • Main file with common methods and defines, such as button reading from
  • Bluetooth controller or setting pixels on the LED area
    */

#include <SoftwareSerial.h>
#include <SPI.h>
#include <SD.h>

//LED field size
#define  FIELD_WIDTH      16
#define  FIELD_HEIGHT    16
const int NUM_LEDS=FIELD_WIDTH*FIELD_HEIGHT;
#define  ORIENTATION_HORIZONTAL // Rotation of table, uncomment to rotate
                                // field 90 degrees
#define USE_FAST_LED  // FAST_LED as library to control the LED strips
#define BLUETOOTH_SPEED 38400

/*

  • Some defines used by the FAST_LED library
    /
    #define FAST_LED_CHIPSET WS2812B
    #define FAST_LED_DATA_PIN 6
    #define MAX_BRIGHTNESS 255      // Thats full on, watch the power!
    #define MIN_BRIGHTNESS 10      // set to a minimum of 8%
    const int brightnessInPin = A0;
    #define  NUM_PIXELS    FIELD_WIDTH
    FIELD_HEIGHT

/* *** LED color table *** /
#define  GREEN  0x008000
#define  RED    0xFF0000
#define  BLUE  0x0000FF
#define  YELLOW 0xFFFF00
#define  LBLUE  0x00FFFF
#define  PURPLE 0xFF00FF
#define  WHITE  0XFFFFFF
#define  AQUA  0x00FFFF
#define  HOTPINK 0xFF69B4
unsigned int long colorLib[9] = {RED, GREEN, BLUE, YELLOW, LBLUE, PURPLE,
WHITE, AQUA, HOTPINK};
/
*** Game commonly used defines ** */
#define  DIR_UP    1
#define  DIR_DOWN  2
#define  DIR_LEFT  3
#define  DIR_RIGHT  4

/* *** Bluetooth controller button defines and input method *** */
#define  BTN_NONE  0
#define  BTN_UP    1
#define  BTN_DOWN  2
#define  BTN_LEFT  3
#define  BTN_RIGHT  4
#define  BTN_START  5
#define  BTN_EXIT  6

uint8_t curControl = BTN_NONE;
// Serial1.begin(38400);

byte incomingByte;

void readInput()
{
  curControl = BTN_NONE;
  if (Serial1.available() > 0)
  {
    // read the incoming byte:
    incomingByte = Serial1.read();
    Serial.println(incomingByte);
    switch(incomingByte)
    {
      case 51: curControl = BTN_LEFT;  break;
      case 52: curControl = BTN_RIGHT; break;
      case 49: curControl = BTN_UP;    break;
      case 50: curControl = BTN_DOWN;  break;
      case 53: curControl = BTN_START; break;
      case 54: curControl = BTN_EXIT;  break;
    }
  }
}

void setup()
{
  Serial.begin(115200);
  //Wait for serial port to connect
  Serial1.begin(BLUETOOTH_SPEED);
}

void loop()
{
}




Gruß

Gregor

Vielen dank, ich habe den Code in mein Programm eingefügt. Nun besteht das Problem dennoch.

lg

fehlkauf_1234:
Vielen dank, ich habe den Code in mein Programm eingefügt. Nun besteht das Problem dennoch.

Dann ist alles in Ordnung :slight_smile:

Ich hatte den Code ja nur umformatiert, um ihn besser lesbar zu machen. Wenn der Code läuft und den gleichen Fehler zeigt, heißt das, dass ich dabei keine Fehler gemacht habe.

In den nächsten Stunden gucke ich noch einmal drüber und versuche, den Fehler zu finden.

Gruß

Gregor

PS: Bitte poste mal den vollständigen Sketch (ggf. alle Tabs). Also das, was Du hochlädst.

sendest du denn auch nur das eine byte, oder ggf. noch weitere bytes wie zeilenumbruch usw.?

Im anhang ist das ganze Programm mit allen Tabs. Das Programm wurde nicht von mir selbst geschrieben.

LED Table 5.12.2018.zip (23.6 KB)

harryberlin:
sendest du denn auch nur das eine byte, oder ggf. noch weitere bytes wie zeilenumbruch usw.?

Das Bluetooth Modul sendet bis zu 3 bytes mit Zeilenumbruch also so z.B.

120
248
128

Hallo,

ich hatte gerade noch einmal das OP auf dem Schirm und frage mich, ob die Ursache des Problems vielleicht auf der Seite des Senders liegt. Kannst Du dort eine Sendekodierung einstellen? Hast Du einen Link zur App?

Gruß

Gregor

Ich denke nicht das der Sender das Problem ist. Ich habe 2 verschiedene Apps genommen und bei beiden kam das selbe raus. Könnte es vielleicht an meinem HC-05 Modul liegen? Dass das Modul die empfangenen Zahlen falsch verarbeitet?

Hier der Link zu der App

lg

fehlkauf_1234:
Ich denke nicht das der Sender das Problem ist. Ich habe 2 verschiedene Apps genommen und bei beiden kam das selbe raus. Könnte es vielleicht an meinem HC-05 Modul liegen? Dass das Modul die empfangenen Zahlen falsch verarbeitet?

Hier der Link zu der App

lg

Danke für den Link zur App. Die scheint tatsächlich nicht das Problem zu sein. Und was Du schreibst, spricht auch dagegen.

Ich habe mal schnell geguckt, was das HC-05-Ding genau ist, habe aber nichts gefunden. Zumindest ist es nicht bei den Arduino-Produkten aufgeführt. Bitte gib mir auch noch hierzu einen Link und gib nochmal ein Beispiel für eine Eingabe und dessen Ergebnis beim Empfänger. Auf das, was ich bislang weiß, kann ich mir keinen Reim machen.

Fehlersuche ist eine Strafe. Du kannst hoffentlich fluchen :slight_smile:

Gruß

Gregor

Guten Morgen,

Hier ist der Link zum Modul und hier zum Datenblatt des Modules.

Wenn ich z.B. die Taste "Hoch" in der App mit der 1 hinterlege und die "Hoch" Taste dann drücke, kommen in meinem Seriellen Monitor auf dem PC die Zahlen:
120
128

Die vorgesehende Zahl die ich in meinem Seriellen Monitor sehen müsste, wäre laut der ASCII Tabelle die 49. Bei jeder Nummer kommen unterschiedliche Varianten der Zahlen, aber es sieht immer wie folgt aus:

Nummer 2 "Runter":
128
128
128

Nummer 3 "Links":
248
128
128

Nummer 4 "Rechts":
0
248
128

Leider kann ich mir auch nicht ausmalen wie diese Zahlen enstehen, aber ich hoffe ich konnte Dir ein grobes Bild von meinem Problem geben.

Beste Grüße und Frohes neues :smiley: