controllo led rgb tramite applicazione bluetooth

buon giorno.
ho tentato di creare una applicazione tramite MIT app inventor 2 che controlli un led rgb. impratica l'app si collega a un modulo bluetooth e quando i valori delle slider (tre per ogni componente) cambiano l'app invia al modulo una stringa di 9 numeri che rapresentano i valori attuali dei colori (esempio xxxxxxxxx ).arduino prende questa stringa via seriale. poi mette i valori in un array e ricrea i valori per poi usarli per modulare un segnale analogico. credo che come idea non sia sbagliata, ma non funziona.
pultroppo non ho capito come si postano le immagini, pertanto non riesco a mettere gli screenshot dei blocchi logici di app inventor :roll_eyes:
comunque il codice di arduino è questo:

int colori[9];
char ch;
int Prosso=6;
int Pverde=5;
int Pblu=3;
int rosso;
int verde;
int blu;
void setup(){
Serial.begin(9600);
pinMode(Prosso,OUTPUT);
pinMode(Pverde,OUTPUT);
pinMode(Pblu,OUTPUT);
}

void loop(){
  if( Serial.available()){

  for(int i=0;i==9;i++){
    colori[i]=ch;}}
rosso=cal(1,2,3);
verde=cal(4,5,6);
blu=cal(7,8,9);
analogWrite(Prosso,rosso);
analogWrite(Pverde,verde);
analogWrite(Pblu,blu);
}

int cal(int n1,int n2,int n3){
  return colori[n1]*100+colori[n2]*10+colori[n3];}

dove ho sbagliato?
grazie comunque in anticipo per l'aiuto

Attendo, normalmente sulla seriale i numeri vengono inviati codificati in ASCI, da cui ...
... il numero 1 (0x01) diventa il carattere '1' (0x31) ... e quindi i tuoi conti saltano tutti :wink:

Guglielmo

ah, non lo sapevo! quindi come bisogna fare?

Ci sono varie tecniche …

… dal creare una funzione per la conversione della stringa di 3 caratteri in numero usando le apposite funzioni che mette a disposizione la AVR libc (libreria sempre inclusa automaticamente dall’IDE) in <stdlib.h>, ed in particolare la atoi() che converte un “char array” in integer,

… al giocare un po’ con i bit ricordando che i NUMERI nella codifica ASCII vanno da 0x30 per lo ‘0’ a 0x39 per il ‘9’ e che quindi, se dal carattere ricevuto si sottrae 0x30 … si ha esattamente il valore numerico di quel carattere XD XD XD

Vedi tu …

Guglielmo

..cmq da Appinventor puoi inviare direttamente byte :stuck_out_tongue:

scusate la mia totale ignoranza(questo è il mio primo progetto " complicato" tra due dispositivi) ma che vantaggi avrei a inviare direttamente byte? dovrei convertire la stringa nel mio numero di 9 cifre e poi continuare come ho fatto?