Invio parametri via bluetooth

Buongiorno a tutti,

premesso che le mie conoscenze sono abbastanza limitate in ambito di programmazione, volevo chiedere indicazioni su come poter controllare Arduino utilizzando la connessione seriale via bluetooth.

Fino ad ora sono riuscito a inviare dati e ricevere comandi correttamente dalla periferica collegata (sia il PC che un telefono android) e Arduino si comporta come deve.

(non riesco a postare il programma senza dilungare il post, scusate se non sono in grado di inserire lo scorrimento, quindi lo allego).

Per poter inviare oltre ai comandi i parametri ho letto che un altro utente estero (http://forum.arduino.cc/index.php?topic=91707.0),da quanto ho capito, ha creato una sequenza di funzioni che crea una stringa con i dati ricevuti, poi la spezza e assegna i valori alle loro variabili (il tutto aiutato da caratteri speciali per facilitare il lavoro).

Ho provato a seguire questa opzione ma, tra inglese tecnico e ignoranza in programmazione, come dire, non va una ciolla.

Non riesco a collegare la prima parte (quella di collezione dei dati) con la seconda (quella di manipolazione).

Qualcuno ha qualche idea su un programma o dove almeno trovare una guida for dummies?

Grazie già da ora,

Aleurghi.

Aleurghi:
(non riesco a postare il programma senza dilungare il post, scusate se non sono in grado di inserire lo scorrimento, quindi lo allego).

… è descritto nel regolamento (… che ti consiglio di leggere con attenzione), punto 7 … in pratica lo devi racchiudere entro i tag CODE che sono quelli che in edit inserisce il bottone fatto così: </>, tutto a sinistra :wink:

Guglielmo

P.S.: Comunque, il codice … non lo hai allegato … ::slight_smile:

Grazie per la risposta, ho gia imparato qualcosa!

#include <Stepper.h>
#include <SoftwareSerial.h>

const int stepsPerRevolution = 200;
Stepper myStepper(stepsPerRevolution, 9, 11, 10, 12);
int stepCount = 0;
const int sx = 6;
const int dx = 5;

SoftwareSerial BT(7, 8); 
// creates a "virtual" serial port/UART
// connect BT module TX to D7
// connect BT module RX to D8
// connect BT Vcc to 5V, GND to GND

int lettura = 0;
float volt = 0.0;
float voltaggio = 0.0;

void setup() {
  pinMode(sx, OUTPUT);
  pinMode(dx, OUTPUT);
  digitalWrite(dx, LOW);
  digitalWrite(sx, LOW);
  myStepper.setSpeed(30);
  BT.begin(9600);
}

char a; // stores incoming character from other device

int b = 20;
int c = 1;
int d = 0;
int e = 0;
int f = 0;
int g = 0;
int h = 0;
int pwm = 50;

unsigned long previousMillis = 0;
const long interval = 50;
unsigned long previousMillis1 = 0;
const long interval1 = 100;
unsigned long previousMillis2 = 0;
const long interval2 = 499;

void loop() {
  
    unsigned long currentMillis = millis();
    unsigned long currentMillis1 = millis();
    unsigned long currentMillis2 = millis();
    
    if (currentMillis1 - previousMillis1 >= interval1) {
      previousMillis1 = currentMillis1;
      lettura = analogRead (A0);
      volt = lettura * (5.1 / 1023.0);
      voltaggio = volt / (99.4/(297.9+99.4));
    }
    if (currentMillis - previousMillis >= interval) {
      previousMillis = currentMillis;
    }
    
    if (BT.available()){ // if text arrived in from BT serial...
    a=(BT.read());
    
    if (a=='b'){
      h= 1 - h;
    }
    
    if (a=='s'){
      g= 1 - g;
    }
   
    if (a=='c'){
      g = 0;
      h = 0;
      analogWrite(dx, 0);
      analogWrite(sx, 0);
      myStepper.step(-stepCount);
      stepCount = 0;
    }
    
    if (a=='d'){
      d = 1 - d;
      e = 0;
      f = 0;    
    }
    
    if (a=='q'){
      e = 1 - e;
      d = 0;
      f = 0;
    }
    
    if (a=='w'){
      f = 1 - f;
      d = 0;
      e = 0;
    }
    
    if (a=='j'){
      b = 1 - b;
      
    }
    
    if (a=='k'){
      d = 0;
      e = 0;
      f = 0;
    }
  }
  if (currentMillis2 - previousMillis2 >= interval2) {
      previousMillis2 = currentMillis2;     
      BT.print(d);
      BT.print("|");
      BT.print(e);
      BT.print("|");
      BT.print(f);
      BT.print("|");
      BT.print(voltaggio);
      BT.print("|");
      BT.print(stepCount);
      BT.print("|");
      BT.println(pwm);
    } 
    if (h == 1){
        myStepper.step(1);
        stepCount += 1;
        g = 0;
      }
    if (g == 1){
        myStepper.step(-1);
        stepCount -= 1;
        h = 0;
      }
      if (d == 1){
        analogWrite(dx, pwm);
        analogWrite(sx, 0);
      } else if (f == 0){
        analogWrite(dx, 0);
      }
       if (e == 1){
        analogWrite(sx, pwm);
        analogWrite(dx, 0);
      }else if (f == 0){
        analogWrite(sx, 0);
      }
     if (f == 1){
      analogWrite(dx, pwm);
      analogWrite(sx, pwm);
      }
}

Questo è il codice che attualmente uso, che fa il suo lavoro.
Magari è un pò grezzo, ma pian piano lo sto rifinendo.

Ed è proprio per questo che volevo inserire la possibilità di ricevere istruzioni dettagliate, oltre che singoli comandi, come ad esempio poter controllare la velocità dei motori da remoto o posizionare lo stepper in maniera più precisa e diretta.

Grazie!

kuso_no_kami.ino (3.02 KB)