Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
Operating system
Development tools
Security and connectivity
Important update: Arm Announces End of Life Timeline for Mbed. This site will be archived in July 2026. Read the full announcement.
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
Jan Jongboom.
1 reply
Does the program exit the loop in the control function? With issues like this it'd be worth it to set up a debugging toolchain so you can step through the code.
This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies. If you are not happy with the use of these cookies, please review our Cookie Policy to learn how they can be disabled. By disabling cookies, some features of the site will not work.
After the first run, the program stops responding. This happens after I call the 'void control ()' function, why?
#include "mbed.h" Serial pc(USBTX, USBRX); // tx, rx char stringa[200]; int seq_ph[200]; //vettore in cui salvo gli indici delle immagini dei fonemi trovati nella stringa struct phoneme{ //struct per contenere vari fonemi (matrice) e l'indice dell'immagine associata char poss_ph[25][4]; int lips; }; phoneme vect_ph[20]; //vettore di struct, serve per contenere i vari gruppi di fonemi di una lingua //Questa funzione riempie il vettore di struct vect_ph[] con tutti i fonemi e le immagini associate della lingua italiana void italian_ph() { for (int i=0; i<20; i++) //inizializzo il vettore { for (int j=0; j<25; j++) for (int k=0; k<4; k++) { vect_ph[i].poss_ph[j][k]='\0'; //carico tutti caratteri nulli nelle matrici in cui salverò i fonemi } vect_ph[i].lips=0; //pongo uguali a 0 tutti gli indici delle immagini } //Fonema 1 vect_ph[0].poss_ph[0][0]='a'; //carico tutti i fonemi della lingua vect_ph[0].lips=1; //Fonema 2 vect_ph[1].poss_ph[0][0]='o'; vect_ph[1].poss_ph[1][0]='u'; vect_ph[1].poss_ph[2][0]='h'; vect_ph[1].poss_ph[3][0]='q'; vect_ph[1].poss_ph[3][1]='u'; vect_ph[1].lips=2; //Fonema 3 vect_ph[2].poss_ph[0][0]='e'; vect_ph[2].poss_ph[1][0]='i'; vect_ph[2].lips=3; //Fonema 4 vect_ph[3].poss_ph[0][0]='c'; vect_ph[3].poss_ph[1][0]='d'; vect_ph[3].poss_ph[2][0]='g'; vect_ph[3].poss_ph[3][0]='n'; vect_ph[3].poss_ph[4][0]='s'; vect_ph[3].poss_ph[5][0]='t'; vect_ph[3].poss_ph[6][0]='z'; vect_ph[3].poss_ph[7][0]='g'; vect_ph[3].poss_ph[7][1]='n'; vect_ph[3].poss_ph[8][0]='f'; vect_ph[3].poss_ph[9][0]='v'; vect_ph[3].poss_ph[10][0]='s'; vect_ph[3].poss_ph[10][1]='c'; vect_ph[3].poss_ph[11][0]='c'; vect_ph[3].poss_ph[11][1]='h'; vect_ph[3].poss_ph[12][0]='s'; vect_ph[3].poss_ph[12][1]='t'; vect_ph[3].lips=4; //Fonema 5 vect_ph[4].poss_ph[0][0]='l'; vect_ph[4].poss_ph[1][0]='r'; vect_ph[4].lips=5; //Fonema 6 vect_ph[5].poss_ph[0][0]='m'; vect_ph[5].poss_ph[1][0]='b'; vect_ph[5].poss_ph[2][0]='p'; vect_ph[5].lips=6; //Fonema 7 vect_ph[6].poss_ph[0][0]='-'; vect_ph[6].poss_ph[1][0]='.'; vect_ph[6].lips=7; return; } //Questa funzione a partire dalla stringa di ingresso genera un vettore con tutti gli indici delle immagini associate ai fonemi trovati void control () { int z=0; bool ok3=false, ok2=false, ok1=false; char temp[4]; //uso una stringa temporanea in cui salvo i caratteri prelevati dalla stringa in ingresso da confrontare con i fonemi della lingua scelta for (int q=0; q<4; q++) temp[q]='\0'; int index_seq=0; while (stringa[z]!='\0') //fino a che non trovo il carattere di terminazione della stringa { if (ok3==false && z<197) //controllo sillabe da 3 { for (int j=0; j<3; j++) { temp[j]=stringa[z+j]; } for (int k=0; k<20 && ok3==false; k++) { for (int h=0; h<25 && ok3==false; h++) { if (temp[0]==vect_ph[k].poss_ph[h][0]) if (temp[1]==vect_ph[k].poss_ph[h][1]) if (temp[2]==vect_ph[k].poss_ph[h][2]) { ok3=true; //se i 3 caratteri prelevati corrispondono ad un fonema seq_ph[index_seq]=vect_ph[k].lips; //allora salvo l'indice dell'immagine associata al fonema nel vettore pc.printf("%d",(seq_ph[index_seq])); index_seq++; //mi sposto di una posizione avanti nel vettore z=z+3; //mi sposto di 3 posizioni avanti nella stringa di ingresso } } } } if (ok3==false && ok2==false && z<198) //controllo sillabe da 2 se non c'è corrispondenza con quelle da 3 { for (int j=0; j<2; j++) { temp[j]=stringa[z+j]; } for (int k=0; k<20 && ok2==false; k++) { for (int h=0; h<25 && ok2==false; h++) { if (temp[0]==vect_ph[k].poss_ph[h][0]) if (temp[1]==vect_ph[k].poss_ph[h][1]) { ok2=true; //se i 2 caratteri prelevati corrispondono ad un fonema seq_ph[index_seq]=vect_ph[k].lips; //allora salvo l'indice dell'immagine associata al fonema nel vettore pc.printf("%d",(seq_ph[index_seq])); index_seq++; //mi sposto di una posizione avanti nel vettore z=z+2; //mi sposto di 2 posizioni avanti nella stringa di ingresso } } } } if (ok3==false && ok2==false && ok1==false && z<199) //controllo sillabe da 1 { temp[0]=stringa[z]; for (int k=0; k<20 && ok1==false; k++) { for (int h=0; h<25 && ok1==false; h++) { if (temp[0]==vect_ph[k].poss_ph[h][0]) { ok1=true; //se il carattere prelevato corrisponde ad un fonema seq_ph[index_seq]=vect_ph[k].lips; //allora salvo l'indice dell'immagine associata al fonema nel vettore pc.printf("%d",(seq_ph[index_seq])); index_seq++; //mi sposto di una posizione avanti nel vettore z=z+1; //mi sposto di una posizione avanti nella stringa di ingresso } } } } ok3=false; ok2=false; ok1=false; } return; } void insert() { int i=0; char ch=0; do { if (pc.readable()) // if there is an character to read from the device { ch = pc.getc(); // read it if (i<200) // just to avoid buffer overflow stringa[i++]=ch; // put it into the value array and increment the index } } while (ch!='\n'); // loop until the '\n' character stringa[i]=0; pc.printf(stringa); } int main() { pc.baud(115200); italian_ph(); while(1){ insert(); control(); } }