codice non funziona con case o if con esp8266

Buongiorno, sto cercando di creare un progetto che è molto simile ad un broadlink, in pratica ho il google home che mi manda dei dati su adafruit tramite ifttt e questi dati vengono letti da arduino che si collega ad internet tramite un esp8266. Il compito dell’esp è soltanto quello di inviarmi la lettura dei dati inviati ad adafruit sull’arduino uno tramite seriale(nel mio caso ho utilizzato la libreria software serial per aggiungere una seriale). L’arduino deve leggere quello che viene inviato sulla softwareSerial e trasmetterlo sulla seriale del pc, se i dati ricevuti corrispondono ad un comando(es. accendere la tv) allora l’arduino manderà al led ir i codici per far accendere la tv tramite la libreria ir Remote.
Io ho creato un applet su ifttt che quando dico al google home di andare al canale…(e il numero) ifttt mi manda a adafruit “chan_” e il numero del canale, a questo punto l’aduino riceve il codice, fa delle substring e va in un for in cui associa ogni singolo numero ad un codice corrispondente al telecomando, tramite dei case.
l’errore è qui, se io metto tutti i case tranne uno(quindi sono 9) il codice funziona, se io aggiungo quest’ultimo case il codice si blocca e non scrive più niente sulla seriale ne fa altro qualunque esso sia.
qualcuno sa dirmi il motivo? magari qualche limite o qualcosa del genere?
vi ringrazio anticipatamente.

unsigned int  Fok[57] = {2600, 900, 450, 500, 350, 500, 400, 900, 400, 900, 850, 500, 400, 450, 400, 500, 400, 500, 400, 450, 400, 500, 400, 500, 350, 500, 850, 950, 350, 500, 400, 500, 350, 500, 400, 450, 450, 450, 850, 900, 850, 900, 400, 500, 450, 450, 800, 950, 850, 500, 350, 500, 400, 900, 400, 500, 400}; // UNKNOWN 49C9E9F9
unsigned int  Fpause[59] = {2700, 900, 450, 400, 450, 450, 450, 850, 450, 850, 900, 450, 450, 400, 450, 450, 450, 450, 450, 350, 500, 450, 400, 450, 500, 400, 900, 850, 450, 450, 450, 400, 500, 400, 450, 400, 500, 400, 900, 850, 900, 850, 500, 400, 450, 450, 450, 400, 900, 450, 400, 450, 450, 450, 450, 400, 500, 850, 450}; // RC6 C008143E
unsigned int  Facc[59] = {2600, 950, 400, 450, 400, 500, 400, 900, 400, 950, 800, 500, 400, 500, 350, 500, 400, 500, 350, 500, 400, 450, 450, 450, 400, 500, 850, 900, 400, 500, 400, 500, 350, 500, 400, 500, 350, 500, 850, 500, 350, 950, 850, 900, 400, 500, 350, 500, 400, 500, 400, 500, 800, 500, 400, 900, 400, 450, 500}; // UNKNOWN 524567F6
unsigned int  Fsky[59] = {2600, 950, 400, 450, 400, 500, 400, 950, 350, 900, 850, 500, 400, 500, 400, 500, 350, 500, 400, 500, 350, 500, 400, 500, 400, 450, 850, 900, 400, 500, 400, 500, 350, 500, 450, 400, 450, 500, 800, 500, 400, 900, 850, 900, 850, 950, 350, 500, 400, 500, 350, 500, 450, 450, 400, 500, 350, 500, 400}; // UNKNOWN 7EA1C62A
//...



void ok(){irsend.sendRaw(Fok, 57, freq_sky);}
void pause(){irsend.sendRaw(Fpause, 59, freq_sky);}
void acc(){irsend.sendRaw(Facc, 59, freq_sky);}
void sky(){irsend.sendRaw(Fsky, 59, freq_sky);}
void forward(){irsend.sendRaw(Fforward, 57, freq_sky);}
void backword(){irsend.sendRaw(Fbackword, 57, freq_sky);}
void su(){irsend.sendRaw(Fsu, 57, freq_sky);}
void giu(){irsend.sendRaw(Fgiu, 55, freq_sky);}
void destra(){irsend.sendRaw(Fdestra, 55, freq_sky);}
void sinistra(){irsend.sendRaw(Fsinistra, 55, freq_sky);}
//...






#include <SoftwareSerial.h>
#include "IRremote.h"
IRsend irsend;


#define BT_TX_PIN 11
#define BT_RX_PIN 10

SoftwareSerial bt =  SoftwareSerial(BT_RX_PIN, BT_TX_PIN);
void setup() {

  //definisco modalità pin
  pinMode(BT_RX_PIN, INPUT);
  pinMode(BT_TX_PIN, OUTPUT);

  //inizializzo comunicazione Seriale
  Serial.begin(9600);

  //inizializzo comunicazione Bluetooth
  bt.begin(115200);
  delay(100);
  Serial.println("Pronto");
}
void loop() {
  String stringa;
  char c;
  if (bt.available()) {
    stringa = "";
    do {
      if (bt.available()) {
        c = bt.read();
        if (c != '\n' and c != ".") { //l'esp mi manda un . a fine comando così che l'arduino sappia dove effettuare la substring per togliere i disturbi
          stringa += c;
        }
      }
    } while (c != '\n' and c != ".");
    String str = stringa.substring(0, stringa.indexOf("."));
    Serial.println(str);
    if (str == "off1" or str == "on1") { //comandi inviati da ifttt per accendere la tv
      Serial.println("tv off");
      acc();

    } else if (str.substring(0, 5) == "chan_") {
      Serial.println("ok");
      int n;
      String com = str.substring(5);
      for (int x = 0; x < com.length(); x++) {
        n = com.substring(x, x + 1).toInt();
        Serial.println("chan");
        Serial.println(n);
// se io tolgo una di queste funzioni(che inviano codici al led infrarossi)il codice funziona
        switch (n) {
          case 0:
            n0();
            break;
          case 1:
            n1();
            break;
          case 2:
            n2();
            break;
          case 3:
            n3();
            break;
          case 4:
            n4();
            break;
          case 5:
            n5();
            break;
          case 6:
            n6();
            break;
          case 7:
            n7();
            break;
          case 8:
            n8();
            break;
          case 9:
            n9();
            break;
          
        }
        delay(500);
      }
    }
  }
}

>matteo123: prima di tutto ti segnalo che, nella sezione in lingua Inglese, si può scrivere SOLO in Inglese ... quindi, per favore, la prossima volta presta più attenzione in quale sezione metti i tuoi post ...

... poi, essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione il su citato REGOLAMENTO ... Grazie.

Guglielmo

P.S.: Il tuo post è già stato spostato nell'opportuna sezione del forum "Italiano”dove puoi proseguire la discussione.
P.P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink: