Variablen trennen bei bluetooth

Hey an alle,

Hab mal das Beispiel : Bluetooth_Shield_Demo_Code/examples at master · Seeed-Studio/Bluetooth_Shield_Demo_Code · GitHub (Master_button und Slave_led) ausprobiert.
Soweit alles klar, aber wenn ich jetzt mehrere LEDs mit mehreren Buttons schalten möchte,
wie kann ich die variablen im Mastercode erstellen das ich sie im Slavecode nicht als eine Variable habe.

Vielen dank schon im Vorraus

MFG Hansbeder

Du machst es uns einfacher, wenn du den von dir eingesetzten Code hier direkt in Code-Tags zeigst.
Und dann evtl. noch die von dir beschriebenen Variablen nennst. Ohne das, stochern wir im trüben und können nicht helfen.

Master_Code

#include <SoftwareSerial.h>                         // Software Serial Port

int RxD =        7;
int TxD =        6;

int PINBUTTON = 9;                               // pin of button

int DEBUG_ENABLED = 1;

String retSymb   = "+RTINQ=";                       // start symble when there's any return
String slaveName = ";SeeedBTSlave";                 // caution that ';'must be included, and make sure the slave name is right.

int nameIndex = 0;
int addrIndex = 0;

String recvBuf;
String slaveAddr;

String connectCmd = "\r\n+CONN=";

SoftwareSerial blueToothSerial(RxD,TxD);

void setup()
{
    Serial.begin(9600);
    pinMode(RxD, INPUT);
    pinMode(TxD, OUTPUT);
    pinMode(PINBUTTON, INPUT);
    
    setupBlueToothConnection();
    //wait 1s and flush the serial buffer
    delay(1000);
    Serial.flush();
    blueToothSerial.flush();
}

void loop()
{
    
    static unsigned char state = 90;             // led off
    
   
       
        blueToothSerial.print(state);
        
        delay(10);
        
        
        
        Serial.println("button off");
    
}


void setupBlueToothConnection()
{
    blueToothSerial.begin(38400);                               // Set BluetoothBee BaudRate to default baud rate 38400
    blueToothSerial.print("\r\n+STWMOD=1\r\n");                 // set the bluetooth work in master mode
    blueToothSerial.print("\r\n+STNA=SeeedBTMaster\r\n");       // set the bluetooth name as "SeeedBTMaster"
    blueToothSerial.print("\r\n+STAUTO=0\r\n");                 // Auto-connection is forbidden here
    delay(2000);                                                // This delay is required.
    blueToothSerial.flush();
    blueToothSerial.print("\r\n+INQ=1\r\n");                    //make the master inquire
    Serial.println("Master is inquiring!");
    delay(2000); // This delay is required.

    //find the target slave
    char recvChar;
    while(1)
    {
        if(blueToothSerial.available())
        {
            recvChar = blueToothSerial.read();
            recvBuf += recvChar;
            nameIndex = recvBuf.indexOf(slaveName);             //get the position of slave name
            
                                                                //nameIndex -= 1;
                                                                //decrease the ';' in front of the slave name, to get the position of the end of the slave address
            if ( nameIndex != -1 )
            {
                //Serial.print(recvBuf);
                addrIndex = (recvBuf.indexOf(retSymb,(nameIndex - retSymb.length()- 18) ) + retSymb.length());//get the start position of slave address
                slaveAddr = recvBuf.substring(addrIndex, nameIndex);//get the string of slave address
                break;
            }
        }
    }
    
    //form the full connection command
    connectCmd += slaveAddr;
    connectCmd += "\r\n";
    int connectOK = 0;
    Serial.print("Connecting to slave:");
    Serial.print(slaveAddr);
    Serial.println(slaveName);
    //connecting the slave till they are connected
    
    do
    {
        blueToothSerial.print(connectCmd);//send connection command
        recvBuf = "";
        while(1)
        {
            if(blueToothSerial.available()){
                recvChar = blueToothSerial.read();
                recvBuf += recvChar;
                if(recvBuf.indexOf("CONNECT:OK") != -1)
                {
                    connectOK = 1;
                    Serial.println("Connected!");
                    blueToothSerial.print("Connected!");
                    break;
                }
                else if(recvBuf.indexOf("CONNECT:FAIL") != -1)
                {
                    Serial.println("Connect again!");
                    break;
                }
            }
        }
    }while(0 == connectOK);
}

Slave_Code

#include <SoftwareSerial.h>   //Software Serial Port

int RxD = 7;
int TxD = 6;

int PINLED = 9;

#define LEDON()     digitalWrite(PINLED, HIGH)
#define LEDOFF()    digitalWrite(PINLED, LOW)

int DEBUG_ENABLED = 1;

SoftwareSerial blueToothSerial(RxD,TxD);

void setup()
{
    Serial.begin(9600);
    pinMode(RxD, INPUT);
    pinMode(TxD, OUTPUT);
    pinMode(PINLED, OUTPUT);
    LEDOFF();
    
    setupBlueToothConnection();
}

void loop()
{
    char recvChar;
    
    while(1)
    {
        if(blueToothSerial.available())
        {//check if there's any data sent from the remote bluetooth shield
            recvChar = blueToothSerial.read();
            Serial.println(recvChar);
            
            
        }
    }
}

void setupBlueToothConnection()
{
    blueToothSerial.begin(38400);                           // Set BluetoothBee BaudRate to default baud rate 38400
    blueToothSerial.print("\r\n+STWMOD=0\r\n");             // set the bluetooth work in slave mode
    blueToothSerial.print("\r\n+STNA=SeeedBTSlave\r\n");    // set the bluetooth name as "SeeedBTSlave"
    blueToothSerial.print("\r\n+STOAUT=1\r\n");             // Permit Paired device to connect me
    blueToothSerial.print("\r\n+STAUTO=0\r\n");             // Auto-connection should be forbidden here
    delay(2000);                                            // This delay is required.
    blueToothSerial.print("\r\n+INQ=1\r\n");                // make the slave bluetooth inquirable
    Serial.println("The slave bluetooth is inquirable!");
    delay(2000);                                            // This delay is required.
    blueToothSerial.flush();
}

So also des is der Grundcode vom master und vom slave.

Im Master Code wird die Variable “state” erzeugt und an den Slave übermittelt.

Im Slave Code wird die übermittelte Variable zu “recvChar”.

Des is alles kein Problem, weil im Mastercode nur eine Variable erzeugt wird.

Also z.B. ein Taster der eine LED schaltet.

Wenn im Mastercode zwei oder mehr Variablen für mehr Taster erzeugt werden, wie kann ich diese dann im

Slave code wieder “aufdrößeln”, da bei meinem Code die mehreren Variablen zusammengewürfelt werden würde.

Kann mir jemand sagen wie ich das lösen kann.

Mfg Hansbeder

Jurs, Serenifly, einige andere und die Suchfunktion :wink:

ElEspanol... in der Suchfunktion habe ich nix gefunden leider :frowning:

unter den anderen 2 Begriffen kann ich mir nichts vorstellen, kannst du mir

diese erläutern.

Hansbeder:
Kann mir jemand sagen wie ich das lösen kann.

Jurs und Serenifly sind fähige und hilfsbereite Jungs hier im Forum.

Das übertragen mit Bluetooth ist genauso wie seriell, nur mit ohne Kabel. Da gibt es genau für dein Problem etliche Threads hier. Ich werd mal was suchen.

edit:

Oder:

Etwas besser als das Beispiel mit dem Aquarium

So also des is der Grundcode vom master und vom slave.

Im Master Code wird die Variable "state" erzeugt und an den Slave übermittelt.

Im Slave Code wird die übermittelte Variable zu "recvChar".

Des is alles kein Problem, weil im Mastercode nur eine Variable erzeugt wird.

Also z.B. ein Taster der eine LED schaltet.

Wenn im Mastercode zwei oder mehr Variablen für mehr Taster erzeugt werden, wie kann ich diese dann im

Slave code wieder "aufdrößeln", da bei meinem Code die mehreren Variablen zusammengewürfelt werden würde.

Kann mir jemand sagen wie ich das lösen kann

Nur kurz zu Erklärung:
Die Variable "state oder recvChar" wird nicht im Master bzw. Slave erzeugt sondern zur Weitergabe der Daten mit der Information gefüllt.

Du must für deine verschiedenen Schalter und Led's auch nicht genau so viele Variablen anlegen und füllen, sondern kannst die Daten zusammensetzen und in eine Variable (hier state) übergeben und dann senden.

Im Client (Empfänger) werden die Daten dann wieder aus der Variable (hier recvChar) entnommen und mit einer entsprechenden Funktion getrennt, damit diese die zugehörigen Led's zum Leuchten bringen.

Diese Prozedur wirst du auch in den von ElEspanol und Serenifly geposteten Links wiederfinden.