Go Down

Topic: Arduino Nano via HC-05 Module zu Arduino Nano (Read 189 times) previous topic - next topic

Pieschie

Hallo Forum,

in einem anderen Topic hab ich dankbar ein Code gefunden um zwei Arduino Nano via HC05-Bluetooth-Modulen zu verbinden. Ich möchte von einem Nunchuck die ausgelesen Werte an einen Empfänger Arduino übertragen. Nun bekomme ich auf der Empfängerseite wirre, zufällige Werte die ich mir nicht erklären kann. Habt Ihr eine Idee was ich falsch mache? Ich finde den Fehler einfach nicht und bräuchte ein Hinweis oder Tipp was ich falsch gemacht habe. Seht jemand den Fehler oder hat eine Tipp für mich?

Danke!



Sender-Nano

Code: [Select]
//                         ___   ___       Draufsicht Stecker
// Version 0.2            | 1 --- 2 |      1 - Clock an A5 weiß      2 - GND an GND rot
// Befehle über Nunchuck  | 3     4 |      3 - 3.3V grün             4 - Data an A4 gelb
// SENDER                  ---------

#include <Wire.h>
#include <wiinunchuck.h>

#include <SoftwareSerial.h>
SoftwareSerial mySerial(11, 10); // RX, TX

byte xpos;
byte ypos;
byte cbutton;
byte zbutton;
int loop_cnt=0;

//Debug ein / ausschalten
//#define Debug

void setup() {
 
 mySerial.begin(38400); // Default communication rate of the Bluetooth module
 
#ifdef Debug
  Serial.begin(9600);
#endif
  // Nunchuk initialisieren und Joystick auf Mittelposition kalibrieren
  nunchuk_init();
  delay(100);
  nunchuk_calibrate_joy();
  delay(100);
}
 
void loop() {


if (loop_cnt > 50) {

 //Daten (6 Byte) vom Nunchuk Controller auslesen
 //Die einzelnen Werte stehen jetzt in Funktionen der WiiNunchuck-Library zur Verfügung
 nunchuk_get_data();
 
#ifdef Debug
  char buffer[25];
  sprintf(buffer, "X:%3d Y:%3d Z:%1d C:%1d", nunchuk_cjoy_x(), nunchuk_cjoy_y(), nunchuk_zbutton(), nunchuk_cbutton());
   // Zusammengesetzten String an den seriellen Monitor schicken
  Serial.println(buffer);
   delay(50);
#endif

  xpos = nunchuk_cjoy_x();
  ypos = nunchuk_cjoy_y();
  zbutton = nunchuk_zbutton();
  cbutton = nunchuk_cbutton();

mySerial.print((byte)xpos,DEC);
mySerial.print(";");
mySerial.print((byte)ypos,DEC);
mySerial.print(";");
mySerial.print((byte)zbutton,DEC);
mySerial.print(";");
mySerial.print((byte)cbutton,DEC);
mySerial.println("*");

}//if

loop_cnt++;
delayMicroseconds(1);

 
}//loop



Empfänger-Nano

Code: [Select]
// Version 0.2
// Befehle über Nunchuck und Bluetooth
// EMPFÄNGER

#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX

//Sonstige Hardware


//Kommunikation via Bluetooth
char current = 0;           //Einzelzeichen über serial
char data[15] = "";         //Zeichenpuffer Gesamtdaten
int incount = 0;            //Zähler für Pufferzeiger
bool lineComplete = false;  //Merker ob Zeilenende erreicht wurde
char *X = 0;                //x-Wert vom Nunchuck aus "data"
int xpos = 0;               //integer X-Wert nach atoi Operation
char *Y = 0;                //y-Wert vom Nunchuck aus "data"
int ypos = 0;               //integer Y-Wert nach atoi Operation
char *Z = 0;                //Z-Button vom Nunchuck aus "data"
int zbutton = 0;            //Z Button gedrückt = 1
char *C = 0;                //C-Button vom Nunchuck aus "data"
int cbutton = 0;            //C Button gedrückt = 1

//Debug ein / ausschalten
#define Debug

void setup() {
 mySerial.begin(38400); // Default communication rate of the Bluetooth module
#ifdef Debug
  Serial.begin(9600);
#endif
 
}//setup
 
void loop(){

while((mySerial.available() > 0) & (incount < 15) & (!lineComplete)){
    Serial.println("Bin in der while");
    current = mySerial.read();

        //solange Zeichen lesen bis das * den Datensatz abschließt 
        if (current !=42) {

            data[incount] = current;
            incount++;
         
        }//if

          else{

              data[incount] = '\0';     //Puffer mit NULL Zeichen abschließen, damit das Ende der Zeichenkette durch string Operationen erkannt wird
              lineComplete = true;
           
          }//else
 
}//while
    Serial.println("Bin nicht in der while");
//Wenn der volle Datensatz gelesen wurde
if (lineComplete){

  daten_auswerten();
  //werte_beurteilen();
  //werte_einstellen();
  lineComplete = false;
  incount = 0;
 
}//if

  else if (incount <= 15){

    incount = 0;
    lineComplete = false;
   
  }//else if

}//loop

void daten_auswerten(){

    X = strtok (data, ";");       //X = alle Zeichen vor dem ersten ";"
    Y = strtok (NULL, ";");       //Y = alle Zeichen bis zum nächsten ";"
    Z = strtok (NULL, ";");       //Z = alle Zeichen bis zum nächsten ";"
    C = strtok (NULL, "*");       //C = alle Zeichen bis zum "*"
    xpos = atoi (X);              //Umwandeln in int
    ypos = atoi (Y);              //Umwandeln in int
    zbutton = atoi (Z);              //Umwandeln in int
    cbutton = atoi (C);              //Umwandeln in int

#ifdef Debug
Serial.println(X);
Serial.print("Xpos ");
Serial.println(xpos);
Serial.println(Y);
Serial.print("Ypos ");
Serial.println(ypos);
Serial.println(Z);
Serial.print("ZButton ");
Serial.println(zbutton);
Serial.println(C);
Serial.print("ZButton ");
Serial.println(cbutton);
#endif 

}//void daten_auswerten

void werte_beurteilen()
{

}

void werte_einstellen()
{


Tommy56

Warum schreibst Du den Kram nochmal? Du hast doch bereits eine Antwort erhalten.

@Mod bitte löschen.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

Go Up