Da un po' cerco informazioni su Arduino. Non ho ancora acquistato nulla e volevo prima di tutto capire alcune cose a livello di funzionamento sw.
Questa è la situazione ipotetica:
devo gestire alcune uscite (p.es. luci, led, ecc.)
le uscite hanno un proprio tempo di funzionamento: "ON" per x millisec, poi spegne
i vari carichi sono attivati da altrettanti ingressi (pulsanti)
Ci saranno quindi vari cicli, oppure delay, ognuno per ogni azione di un pulsante.
Domande:
come viene gestita la sovrapposizione di questi tempi? Cioè, se premo un secondo pulsante mentre il primo carico è ancora "ON" e in loop (o delay), cosa succede?
immagino che non si parli di multithreading...
le eventuali funzioni richiamate alla pressione del relativo pulsante, chiamate in successione, lavorano indipendentemente oppure ogni volta Arduino aspetta la fine di un "processo", prima di iniziare il successivo?
Ovvio che la #3 mi sembrerebbe assurda, però parlando per ora in via del tutto teorica, non si sa mai!
Grazie e perdonate eventuali (mie) banalità per questioni per voi ovvie!
Prima cosa benvenuto, c'è l'apposito topic per le presentazioni sarebbe bello che tu ti presentassi a tutti.(ps complimenti per aver usato le sezioni quasi nessuno all'inizio le usa )
Finita questa piccola parentesi vediamo un pò come fare a spiegarti come funziona un arduino
come viene gestita la sovrapposizione di questi tempi? Cioè, se premo un secondo pulsante mentre il primo carico è ancora "ON" e in loop (o delay), cosa succede?
Il loop esegue il tuo codice all'infinito ora se passa la prima volta mette on, se passa la seconda mette off, se metti un delay il codice si blocca e quello che dovrebbe essere eseguito dopo non viene eseguito.
Se invece usi un pulsante puoi fare che quando legge lo stato del pulsante accende o spegne LED e Luci, altrimenti se vuoi che sia a tempo usi la funzione mills che non blocca il codice e ti permette di fare logica sul tempo trascorso(ES accendere un led per 4 secondi).
immagino che non si parli di multithreading...
Se intendi il multitasking,no non esiste però fare un giro di loop di solito impiega molto meno di un secondo quindi esegui velocemente molte operazioni al secondo.
le eventuali funzioni richiamate alla pressione del relativo pulsante, chiamate in successione, lavorano indipendentemente oppure ogni volta Arduino aspetta la fine di un "processo", prima di iniziare il successivo?
Arduino aspetta la fine del processo,ma non vedo quale processo possa essere cosi lungo da bloccare il codice di arduino.
Se hai altre domande chiedi pure,spero nel mio piccolo di essere stato abbastanza esaustivo,comunque riceverai sicuramente altre risposte forse anche più chiare
Ho scritto un paio di librerie che aiutano a gestire processi in "background". Per background non intendo un multitasking effettivo come quello dei PC desktop ma in modo indipendente dall'utente.
Queste librerie sono schedulatori che possono eseguire delle funzioni predefinite ad intervalli regolari oppure dopo un periodo determinato dall'utente (nel tuo esempio, accendere la luce e poi spengerla dopo X secondi).
Si chiamano looper e leOS: il primo è un semplice schedulatore software, che è legato all'esecuzione del loop principale, il secondo si basa sui timer interni ed opera in maniera del tutto indipendente dal loop.
Madwriter:
Prima cosa benvenuto, c'è l'apposito topic per le presentazioni sarebbe bello che tu ti presentassi a tutti.(ps complimenti per aver usato le sezioni quasi nessuno all'inizio le usa )
Finita questa piccola parentesi vediamo un pò come fare a spiegarti come funziona un arduino
come viene gestita la sovrapposizione di questi tempi? Cioè, se premo un secondo pulsante mentre il primo carico è ancora "ON" e in loop (o delay), cosa succede?
Il loop esegue il tuo codice all'infinito ora se passa la prima volta mette on, se passa la seconda mette off, se metti un delay il codice si blocca e quello che dovrebbe essere eseguito dopo non viene eseguito.
Se invece usi un pulsante puoi fare che quando legge lo stato del pulsante accende o spegne LED e Luci, altrimenti se vuoi che sia a tempo usi la funzione mills che non blocca il codice e ti permette di fare logica sul tempo trascorso(ES accendere un led per 4 secondi).
immagino che non si parli di multithreading...
Se intendi il multitasking,no non esiste però fare un giro di loop di solito impiega molto meno di un secondo quindi esegui velocemente molte operazioni al secondo.
le eventuali funzioni richiamate alla pressione del relativo pulsante, chiamate in successione, lavorano indipendentemente oppure ogni volta Arduino aspetta la fine di un "processo", prima di iniziare il successivo?
Arduino aspetta la fine del processo,ma non vedo quale processo possa essere cosi lungo da bloccare il codice di arduino.
Se hai altre domande chiedi pure,spero nel mio piccolo di essere stato abbastanza esaustivo,comunque riceverai sicuramente altre risposte forse anche più chiare
Grazie, provvederò a presentarmi!
Credo che la parola chiave sia proprio millis! Parlavo di multithreading perchè in VB.NET sto cercando di imparare e risolvere alcune cose proprio con delegate ecc., da cui il dubbio amletico su Arduino.
Quindi, volendo per esempio stare sulla domotica, se alcuni carichi sono "a tempo", essi dovrebbero essere gestiti ognuno da una variabile "timer" valorizzata con la durata scelta e controllata ad ogni loop del micro.
leo72:
Ho scritto un paio di librerie che aiutano a gestire processi in "background". Per background non intendo un multitasking effettivo come quello dei PC desktop ma in modo indipendente dall'utente.
Queste librerie sono schedulatori che possono eseguire delle funzioni predefinite ad intervalli regolari oppure dopo un periodo determinato dall'utente (nel tuo esempio, accendere la luce e poi spengerla dopo X secondi).
Si chiamano looper e leOS: il primo è un semplice schedulatore software, che è legato all'esecuzione del loop principale, il secondo si basa sui timer interni ed opera in maniera del tutto indipendente dal loop.
Molto interessante, grazie! Credo che risolva proprio la questione dei vari "processi" simultanei. Non sono riuscito a trovarli probabilmente perchè mi mancano le giuste parole chiave.
Madwriter:
Prima cosa benvenuto, c'è l'apposito topic per le presentazioni sarebbe bello che tu ti presentassi a tutti.(ps complimenti per aver usato le sezioni quasi nessuno all'inizio le usa )
Finita questa piccola parentesi vediamo un pò come fare a spiegarti come funziona un arduino
come viene gestita la sovrapposizione di questi tempi? Cioè, se premo un secondo pulsante mentre il primo carico è ancora "ON" e in loop (o delay), cosa succede?
Il loop esegue il tuo codice all'infinito ora se passa la prima volta mette on, se passa la seconda mette off, se metti un delay il codice si blocca e quello che dovrebbe essere eseguito dopo non viene eseguito.
Se invece usi un pulsante puoi fare che quando legge lo stato del pulsante accende o spegne LED e Luci, altrimenti se vuoi che sia a tempo usi la funzione mills che non blocca il codice e ti permette di fare logica sul tempo trascorso(ES accendere un led per 4 secondi).
immagino che non si parli di multithreading...
Se intendi il multitasking,no non esiste però fare un giro di loop di solito impiega molto meno di un secondo quindi esegui velocemente molte operazioni al secondo.
le eventuali funzioni richiamate alla pressione del relativo pulsante, chiamate in successione, lavorano indipendentemente oppure ogni volta Arduino aspetta la fine di un "processo", prima di iniziare il successivo?
Arduino aspetta la fine del processo,ma non vedo quale processo possa essere cosi lungo da bloccare il codice di arduino.
Se hai altre domande chiedi pure,spero nel mio piccolo di essere stato abbastanza esaustivo,comunque riceverai sicuramente altre risposte forse anche più chiare
Grazie, provvederò a presentarmi!
Credo che la parola chiave sia proprio millis! Parlavo di multithreading perchè in VB.NET sto cercando di imparare e risolvere alcune cose proprio con delegate ecc., da cui il dubbio amletico su Arduino.
Quindi, volendo per esempio stare sulla domotica, se alcuni carichi sono "a tempo", essi dovrebbero essere gestiti ognuno da una variabile "timer" valorizzata con la durata scelta e controllata ad ogni loop del micro.
Ok, ora studio meglio, grazie!
Esattamente studia un pò il millis che ti sarà utile,se poi ti scocci usa il leOS e non ci pensare più,per qualsiasi cosa c'è mastercard ops volevo dire il forum