invio dati separati tramite HC-05 da arduino nano ad arduino uno

Buonasera a tutti,
avrei bisogno di un aiuto.
quello che dovrei fare in pratica è leggere due potenziometri differenti (magari piu in la volendo vorrei aggiungere quelche pulsante anche) con arduino nano,inviarli tramite bluetooth ad un arduino uno che poi andra ad azionare dei motorini separati.
ora, un comando riesco ad inviarlo ma se devo mandarne piu di uno come faccio?

Aspetta,aspetta,aspetta,!!!

o non ho capito una mazza io o non mi sono spiegato bene :stuck_out_tongue:
allora questa specie di progetto altro non è che il NANO che funge da telecomando e quindi con due joystick,
e l UNO che funge da macchinina radiocomandata e quindi mi controlla un motore e un servo.

ora io leggo i joy con il nano e li invio sulla seriale BT e con l UNO li leggo e comando i motori.
sullo sketch che invia ho fatto cosi
(non picchiarmi :stuck_out_tongue: )

#include <SoftwareSerial.h>

SoftwareSerial BT = SoftwareSerial(10,11);
int acc = A1;
int sterzo = A0;
int valacc , valster , s ;

void setup() {
  BT.begin(9600);
  Serial.begin(38400);
  pinMode(acc , INPUT);
  pinMode(sterzo , INPUT);

}

void loop() {
  valacc=  analogRead(acc);
  s=map(valacc , 0 , 1023 , 0 , 255);
  valster= analogRead(sterzo);
  Serial.println("acc: ");
  Serial.println(s );
  Serial.println("sterzo: ");
  Serial.println(valster );

  BT.write(s);
  BT.write(valster);

}

il problema me lo trovo sull UNO a ricevere i due dati separati!

ciao,

la lettura "secca" puoi farla con:

      while (bt.available() > 0){
        var = bt.read();
etc etc...
      }

se invece intendi, vedendo il tuo loop() che invia continuamente s e valster, una cosa del tipo: "come faccio a distinguere dove inizia e dove finisce una variabile all'interno di un flusso di dati"...devi essere tu che li rendi distinguibili...ad esempio...ragruppando tutti i dati in un pacchetto che avrà una intestazione predefinita...e dal lato ricevente, che sà quanti byte attendere, ricerchi questa intestazione per sincronizzare il pacchetto e poi ti gestisci i byte seguenti...se l'intestazione non corrisponde scarti tutto e ricerchi nuovamente.

Essendo abbastanza inesperto e proprio quello che non riesco a fare, cioe a dividere i dati , l invio e la lettura secca e semplice, piu dati da separare non so dove partire, potresti darmi un punto di partenza gentilmente?

nel codice che hai scritto il loop invia a raffica i valori, forse se metti una pausa tra un invio e l'altro hai un riferimento da poter sfruttare anche sulla ricevente per sincronizzarlo.

Ok diciamo che al momento capisco molto poco quello che hai scritto :stuck_out_tongue_closed_eyes: Sembra un rebus :stuck_out_tongue_closed_eyes:

Comunque ok stasera quando torno a casa ci ragiono su e ti faccio sapere cosa ne viene fuori :P

seguirei anch'io la via segnata da docsavage... decidi un prefisso per ogni valore (per esempio 'a' per accelerazione e 's' per sterzo), così sai cosa stai ricevendo. aggiungerei anche un terminatore (per esempio ';'), per sapere quando hai finito di ricevere. quindi, nell'invio oltre alle 2 variabili devi inviare prima e dopo ciascun valore anche il relativo prefisso e terminatore. poi ti smazzi la decodifica lato ricezione.

Buongiorno ragazzi, scusatemi ieri sera non sono riiscito a metter mani su arduino

Quindi vediamo se ho capito,intendete una cosa del genere?

BT.write('a' valacc '#');
BT.write ('s' valster '#');

Questo dal lato del trasmettitore E sul ricevente in teoria mi dovrei leggere una cosa del genere: a 130 # s 55 #

sono riuscito solo a fare una prova veloce, ho provato questo codice sulla trasmittente

valacc=  analogRead(acc);
  a=map(valacc , 0 , 1023 , 0 , 255);
   BT.write("a",a);
   delay(50);

e questo sulla ricevente

void loop() {
  if(BT.available()>0)
  {if(BT.read() == a)
   rec=BT.read();
  Serial.println(rec);}

ma sulla seriale mi viene un casino tutto sballato

ciao...nello sketch del ricevente scrivi:

void loop() {
  if(BT.available()>0)
  {if(BT.read() == a)
   rec=BT.read();
  Serial.println(rec);}

cos'è la "a" nel secondo if...una variabile o un carattere?

detto questo...ma perchè non invii un comando dal "ricevete" per abilitare l'invio dei dati dal "trasmittente"!?...in questo modo sai esattamente quando iniziare a leggere i byte che ti arrivano...e non intasi la seriale...io metterei comunque un'intestazione ed un terminatore al pacchetto dati...giusto per verificare di aver ricevuto quanto mi aspettavo.

Ciao orso! Si hai ragione non ho inserito il codice dall inizio per non "sporcare" troppo il topic pardon :P Comunque si la "a" è un tipo char.

ORSO2001: ..ma perchè non invii un comando dal "ricevete" per abilitare l'invio dei dati dal "trasmittente"!?...in questo modo sai esattamente quando iniziare a leggere i byte che ti arrivano...

Penso sia quello che mi stava dicendo anche frat e doc e non avevo capito!

Quindi invio qualcosa dal ricevente al trasmettitore e programmo il trasmettitore in modo che quando mi arriva invia un dato e se riceve un altra cosa invia un altro dato giusto? La questione dell intestazione dell terminatore non l ho ben capita ancora comunque appena posso faccio altre prove.

Buongiorno ragazzi! Doc scusami per le domande insistenti e stupide (sono un novellino ancora) Ma quel "select case read ()" è un istruzione che funziona tipo lo switch o intendi proprio lo switch?

Ahahaha bhe alle 5 di mattina io avrei scritto in aramaico!!!
Ok perfetro grazie mille faccio un po di prove e ti faccio sapere grazie mille :wink: