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(){
}
fehlkauf_1234:
... meinem Programm eine Richtung sagen. ...
Also erstens glaube ich nicht, dass Du das Programm geschrieben hast. Schon der Anfang spricht dagegen
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?
gregorss:
Also erstens glaube ich nicht, dass Du das Programm geschrieben hast. Schon der Anfang spricht dagegen
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
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 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.
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.
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.
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.
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()
{
}
//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_WIDTHFIELD_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
fehlkauf_1234:
Vielen dank, ich habe den Code in mein Programm eingefügt. Nun besteht das Problem dennoch.
Dann ist alles in Ordnung
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.
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?
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?
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?
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
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.