Problema a livello software

Salve a tutti i entro sta sera dovrei consegnare un programma che data una sequenza di mille caratteri ricerchi una combinazione di 4 bit ed una volta trovata accenda un led.
io il programma l'ho impostato così:

int led = 12;
int i = 0;
int x = 0;

//STRUTTURA PER I CARATTERI
typedef struct s_stringhe {
  char c[4];
  char s[1000];
} t_struct1;


t_struct1 t_struct;

String str;



void input();
void funzione(boolean state,boolean date);


void setup() {
  Serial.begin(115200);
  pinMode(led, OUTPUT);

}





void loop() {
  bool  state = false;
 
  input();
  funzione(state);



}















//IMMISIONE DATI
void input() {
  Serial.println("Inserisci i bit da ricercare: ");
  while (Serial.available() == 0);
  delay(500);
  int pin = Serial.read();
  str = String(pin); //converto l'intero in stringa
  str.toCharArray(t_struct.c, 4);  //converto la stringa in Array





  Serial.println("Inserisci la sequenza nella quale dovrà essere ricercata la combinaizone di bit (fino ad un massimo di mille bit): ");
  while (Serial.available() == 0);
  delay(500);
  int sequenza = Serial.read();
  str = String(sequenza);   //converto l'intero in stringa
  str.toCharArray(t_struct.s, 10000); //converto la stringa in Array
  





}





//FUNZIONE PER CERCARE LA COMBINAZIONE SCELTA NELLA SEQUENZA
void funzione(boolean state) {
 
      do {
    if (t_struct.c[i] = t_struct.s[x]) {
      x = +1;
      i = +1;
      if (t_struct.c[i] = t_struct.s[x]) {
        x = +1;
        i = +1;
        if (t_struct.c[i] = t_struct.s[x]) {
          x = +1;
          i = +1;
          if (t_struct.c[i] = t_struct.s[x]) {
            state = true;
            Serial.println("TROVATA LA COMBINAZIONE");
            digitalWrite(led, HIGH);
          } else {
            x = +1;
            i = 0;
          }
        } else {
          x = +1;
          i = 0;
        }
      } else {
        x = +1;
        i = 0;
      }

    } else {
      x = +1;
      i = 0;
    }
  } while (state = false);
  

}

il mio problema e che una volta chiesta la sequenza di bit da ricercare mi accende il led senza chiedermi la sequenza di bit dove ricercarla(la combinazione).

Grazie in anticipo per il supporto che riceverò

Arduino usa linguaggio C/C++ ed nei test il confronto per uguaglianza si fa con == e non =
if (t_struct.c[ i ] = t_struct.s[ x ]) // errato questo assegna !!
if (t_struct.c[ i ] == t_struct.s[ x ])

Vale anche nell'ultimo while.

Ma a prescindere, serial.read legge un byte alla volta.

e io dico:

appunto che legge byte a byte non serve creare una String per poi convertirlo in char *

C1P8:
appunto che legge byte a byte non serve creare una String per poi convertirlo in char *

Ma fosse solo quello... Chiama "bit" i caratteri (char), crea una struttura per metterci solo due variabili (le strutture le crei se hai vari campi correlati tra loro e/o se vuoi riusare certe strutture), usa una do..while quando basterebbe una for e ci mette delle if() inutilmente indentate con incrementi, ed il codice ha una indentazione pessima e piena di righe inutilmente vuote (cose che non sono -solo- per "estetica" ma per poter avere sott'occhio più comodamente la struttura del programma e quindi capire meglio).

ilPanzer:
sono completamente d'accordo con te, ma anche apportando le tue modifiche il problema rimane ovvero che il led mi si accende ancora prima di inserire la stringa di comando dove ricercare la sequenza

Tutto questo puoi iniziare semplificando il discorso ossia inizialmente lascia stare l'input ed imposta le due variabili nel programma (la stringa da cercare e quella nella quale cercare), e quando la cosa ti funziona aggiungi l'input delle due stringhe (cosa che puoi trovare in giro).

Comunque sia, visto che da finire "entro stasera" (ieri), purtroppo la vedo difficile riuscire ad aiutarti in tempo, ma se vuoi e pensi che ti possa servire per il futuro, scrivi qui e cerchiamo di darti una mano sia per i confronti sia per l'input ok?