Mettendo un oscillatore esterno da 18430K riesco a visualizzare più dati ma non tutti perchè tra l'elaborazione itoa e la visualizzazione su display dopo un po "si perde". Per ovviare a questo devo prima memorizzare i dati che voglio visualizzare su un array DATA_RX e voi visualizzare con calma (no real time
).
Ispirandomi al progetto "Progettare sistemi domotici per mezzo di moduli GSM" presente sul sito ho estratto una parte di codice che però non so se è corretta nella paste relativa al puntatore *Stringa_Confronto.
Quando arriva una stringa di caratteri dal modulo ESP8266 con ATE0 (nessun eco) si ha qualcosa del tipo:
\r \n + I P D , 2 : ...............
Quello che vorrei fare è dal ":" in poi memorizzare tutto in un array DATA_RX che poi potrò elaborare a piacimento.
Per fare questo, la stringa Data_Usart di Rx caratteri arrivata e memorizzata (in una funzione a parte) va analizzata per sapere se sono dati (se vi è "+IPD") e per fare questo ho creato una funzione generica chiamata Verifica_Porzione_Stringa.
In pratica la funzione Verifica_Porzione_Stringa deve controllare che, a partire dalla posizione "Inizio" fino a quella "Fine", che i caratteri coincidano tutti con quelli della stringa "Striga_Confronto". Se coincidono tutti restituirà zero, altrimenti restituirà 1 indicando quindi l'errore.
unsigned char Verifica_Posizione_Stringa(char Inizio, char *Stringa_Confronto, char Fine)
{unsigned char posizione_stringa_confronto=0;
unsigned char posizione_carattere=0;
for (posizione_carattere=Inizio; posizione_carattere<=Fine; posizione_carattere++)
{if (Data_Usart[posizione_carattere]!=Stringa_Confronto[posizione_stringa_confronto])
{return(1);
}
posizione_stringa_confronto++;
}
return(0);
}
Questa verrà poi utilizzata per individuare se vi è "+IPD" nel seguente modo:
if (Verifica_Porzione_Stringa (3, (char*) "+IPD", 6) != 1)
{.....
.....
}
Funzionerà in XC8?