Vai al contenuto
PLC Forum


Interpretare Stringa Inviata Al Microprocessore


Edge

Messaggi consigliati

Salve,

ho il seguente problema e vorrei chiedere un suggerimento se possibile.

Sto programmando un microprocessore (un PIC18F48) in mikroC .

Nel programma, a cadenze prestabilite, arriva un interrupt che segnale che un sms è arrivato al modem collegato al micro.

Il micro, tramite seriale, interroga il modem e legge la stringa.

Ora, la stringa letta è di tipo alfanumerico tipo "ABCD1234efgh". La stringa cambia sempre, però capita che ogni tanto nel messaggio inviato compaia un codice che inizia con le lettere KM seguito da tre cifre numeriche (es. KM945).

Le 3 cifre successive cambiano sempre, ma le due letter "KM" non cambiano.

Quindi via sms mi può arrivare una stringa alfanumerica del tipo: ABCdfKM233987mfR.

Volevo sapere, come faccio ad estrarre da questa stringa i 3 valori interi che seguono le due lettere KM (nell'esempio sopra i valori sono 233) ed a memorizzarli quindi in una variabile per essere successivamente letti?

Avevo iniziato a fare una routine che una volta attivo il flag di segnalazione di ricezione dato via RS232 avviava una procedura di switch/case per individuare se c'erano due lettere KM vicine. E fin qui è a posto. Ma poi come faccio ad estrarre le 3 cifre dopo KM? Non pensate all'utilizzo di getchar perchè non è compreso nelle librerie di mikroC.

Se qualche programmatore riesce a darmi un suggerimento ne sarei grato perchè mi sono bloccato.

Saluti

Link al commento
Condividi su altri siti


La stringa la ricevi in ASCII? Se è così è semplice le cifre numeriche sono confinate entro una gamma ben precisa. Non ho sottomano la tabella ASCII e non mi fido della memoria, ma se dai un'occhiata alla tabella ti accorgi che è sufficiente eseguire un ciclo di test con una comparazione ">X and <T" per riconoscere le cifre numeriche.

Link al commento
Condividi su altri siti

Si, esattamente, le ricevo in ASCII.

Ok, ho capito cosa vuoi dire. Ho giusto la tabella qui davanti a me. Però così facendo non rischio di leggere qualsiasi numero dopo le due lettere KM? Io voglio solo leggere i primi 3 valori successiva alla parola KM.

Saluti

Link al commento
Condividi su altri siti

Esegui il test di ricerca per il primo carattere compreso tra 30h e 39h; se riconosci una cifra verifichi che i due caratteri immediatamente precedenti siano 4Bh e 4Dh.

Ti faccio un esempio solo indicativo.

   i = 0
  do while endbuffer {
      
       if (char(i) < 3Ah && > 2fh) 
              if i > 1  {
                  if (char(i-2) == 4bh && char(i-1) == 4dh){
                   memchar(0) = char(i);
                   memchar(1) = char(i+1);
                   memchar(2) = char(i+2);                
                   endbuffer = false;
                }
            }
         else 
              i++;
    }

Modificato: da Livio Orsini
Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...