Pagina 1 di 2

Arduino e Input da seriale

MessaggioInviato: 19 nov 2012, 12:59
da VRI
Salve :D
Smanettando un po' sono riuscito a far compiere ad Arduino ciò che volevo utilizzando un input da tastiera:
la pressione di un determinato tasto della tastiera faceva stampare sul monitor seriale la temperatura letta da un sensore.

Mi piacerebbe cambiare il tipo di input ovvero, passare dalla pressione di un solo pulsante a, per esempio, l'input "leggi" al posto che la sola pressione del tasto "L".
è possibile?
Mi sono spiegato bene?
:D
Grazie!

Re: Arduino e Input da seriale

MessaggioInviato: 19 nov 2012, 13:42
da simo85
Se hai usato la EUSART per leggere un carattere alla volta, modifica la funzione di ricezione e quando hai letto N caratteri fai quello che devi fare.

Re: Arduino e Input da seriale

MessaggioInviato: 19 nov 2012, 19:01
da VRI
EUSART? :shock:
Mi sa che non è cosa alla mia portata :shock:

Re: Arduino e Input da seriale

MessaggioInviato: 19 nov 2012, 19:18
da TardoFreak
Ma stai scherzando, vero?
Hai aperto la discussione dicendo che usi l' input da seriale ed ora vieni a dire che l' EUSART (o USART o UART chiamala come vuoi) è fuori dalla tua portata? :shock:

Re: Arduino e Input da seriale

MessaggioInviato: 19 nov 2012, 23:30
da VRI
Non so che cosa significa quella sigla :(

Re: Arduino e Input da seriale

MessaggioInviato: 28 nov 2012, 17:34
da dario
Ciao,

devi creare un ciclo while per memorizzare tutti i caratteri provenienti dalla seriale in un buffer di memoria. A questo punto dovrai implementare una funzione che legga tutto il buffer e se trova i caratteri che compongono la stringa "leggi" in sequenza a partire da un determinato indice del buffer, compiano l'azione desiderata.

Per iniziare cerca del codice per la gestione delle code circolari, se capisci come funziona una coda, saprai anche come procedere per il resto del tuo programma.

Saluti,
Dario.

Re: Arduino e Input da seriale

MessaggioInviato: 29 nov 2012, 14:21
da aduri
Questo è uno stralcio di codice in Mikrobasic con cui ho letto da una seriale di un GPS (crea buffer) e poi filtrato secondo il protocollo NMEA183.
Se ti può essere utile.....

ciao
Antonio

Codice: Seleziona tutto
'esempio stringa da analizzare
'$GPGGA,204620.999,4530.6671,N,00916.9484,E,0,00,5 0.0,101.9,M,,,,0000*32

if USART_Data_Ready=1 then
rxDataGarbage = USART_Read
end if

'filtro frase "$GPGGA,"

rxDone = 0
rxIndex = 0
while rxDone=0
if USART_Data_Ready=1 then
     rxGPSData = USART_Read
       if (rxGPSData="$") then    'riconoscimento carattere $
             rxDone = 1
        else goto inizio
       end if
end if
wend

rxDone = 0
rxIndex = 0
while rxDone=0
if USART_Data_Ready=1 then
      rxGPSData = USART_Read
       if (rxGPSData="G") then     'riconoscimento carattere G
           rxDone = 1
       else goto inizio
       end if
end if
wend

rxDone = 0
rxIndex = 0
while rxDone=0
    if USART_Data_Ready=1 then
         rxGPSData = USART_Read
         if (rxGPSData="P") then
            rxDone = 1
          else goto inizio
          end if
    end if
wend

rxDone = 0
rxIndex = 0
while rxDone=0
if USART_Data_Ready=1 then
     rxGPSData = USART_Read
       if (rxGPSData="G") then
             rxDone = 1
        else goto inizio
       end if
end if
wend

rxDone = 0
rxIndex = 0
while rxDone=0
if USART_Data_Ready=1 then
      rxGPSData = USART_Read
       if (rxGPSData="G") then
           rxDone = 1
       else goto inizio
       end if
end if
wend

rxDone = 0
rxIndex = 0
while rxDone=0
    if USART_Data_Ready=1 then
         rxGPSData = USART_Read
         if (rxGPSData="A") then
            rxDone = 1
          else goto inizio
          end if
    end if
wend

rxIndex = 0
rxdone = 0
while rxDone=0
if USART_Data_Ready=1 then
   rxGPSData = USART_Read
   UTC[rxIndex] = rxGPSData ' UTC (ora)
                if (rxGPSData=44) then
                   rxdone=1
                end if
inc(rxIndex)
end if
wend

rxIndex = 0
rxdone = 0
while rxDone=0
if USART_Data_Ready=1 then
   rxGPSData = USART_Read
   Latitudine[rxIndex] = rxGPSData ' Latitudine
if (rxGPSData=44) then
   rxdone = 1
end if
inc(rxIndex)
end if
wend



Re: Arduino e Input da seriale

MessaggioInviato: 29 nov 2012, 18:20
da VRI
Purtroppo non è molto comprensibile per me :(

Re: Arduino e Input da seriale

MessaggioInviato: 29 nov 2012, 19:06
da TardoFreak
Il suggerimento di Foto Utentedario è ottimo.
Io penso che dovresti lasciar perdere lo smanettamento per iniziare a studiare bene il C.
Di buoni libri e tutorial ben fatti ne trovi parecchi.
Purtroppo se non hai buone basi di programmazione non puoi andare oltre il semplice giochicchiare.

Re: Arduino e Input da seriale

MessaggioInviato: 29 nov 2012, 19:51
da VRI
Spezziamo una lancia in mio favore...In un anno, con qualche esercizio di rpatica alla sera e qualche appunto di linguaggio C insegnato ad un elettrotecnico, ho imparato a gestire input, output, analogiche (a livello base) ecc. su Arduino...
I prossimi passi per me sono la gestione di un display (con le librerie apposite) e far lavorare l'ATMega 328 in stand alone...
Non facendo tutto ciò di mestiere non ho molto tempo da dedicargli e per ora sono soddisfatto dei progressi che ho compiuto :D