Edge Inserito: 1 aprile 2010 Segnala Share Inserito: 1 aprile 2010 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 More sharing options...
Livio Orsini Inserita: 1 aprile 2010 Segnala Share Inserita: 1 aprile 2010 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 More sharing options...
Edge Inserita: 1 aprile 2010 Autore Segnala Share Inserita: 1 aprile 2010 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 More sharing options...
Livio Orsini Inserita: 1 aprile 2010 Segnala Share Inserita: 1 aprile 2010 (modificato) 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: 1 aprile 2010 da Livio Orsini Link al commento Condividi su altri siti More sharing options...
Edge Inserita: 2 aprile 2010 Autore Segnala Share Inserita: 2 aprile 2010 Ok, ho capito. Ci sono riuscito. Grazie Livio.Mi stavo perdendo in un bicchier d'acqua.Ciao,Marco Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora