Pages: 1 ... 4 5 [6]   Go Down
Author Topic: looper - un semplice schedulatore senza timer/interrupt  (Read 6712 times)
0 Members and 1 Guest are viewing this topic.
ivrea (to)
Offline Offline
Faraday Member
**
Karma: 57
Posts: 3527
miaaao ^-^
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Non ti sbagli per nulla. Effettivamente il nome è ambiguo.
Se al posto del if, mettiamo while, forse la risolviamo, ma mica c'era intenzione di fare una libreria  smiley-mr-green
Per me è stata solo una pensata fatta più per gioco/sfida. Se poi @Testa la vuol usare... però bisogna adeguarla.
Code:
#define MACRO_CONCAT( x, y ) x##y
#define IFDELAY(t,v) { static unsigned long MACRO_CONCAT(prev,v)=0; unsigned long timeHidden123=millis(); if(timeHidden123-MACRO_CONCAT(prev,v)>(t)) { MACRO_CONCAT(prev,v)=timeHidden123;
#define WHILEDELAY(t,v) { unsigned long MACRO_CONCAT(prev,v)=millis(); while(millis()-MACRO_CONCAT(prev,v)<(t)) {
#define ENDDELAY }}

void setup()
{ delay(2000);
  Serial.begin(9600);
}

void loop()
{ Serial.println("prima di if");
  IFDELAY(1000,1)
     Serial.println("--------- dentro la if");
  ENDDELAY
  Serial.println("dopo la if");

/*  commentato per provare il pezzo sopra senza questo sotto
  Serial.println("inizio while");
  WHILEDELAY(500,2)
     Serial.println("==== dentro la while");
  ENDDELAY
  Serial.println("fine while");
*/
 }

*** Edit: ho aggiustato il codice e provato con Arduino. Ora mi sembra okay, anche se è solo una cosa accademica, non pretende di essere una libreria o chissà che.
Ci sono 2 tipi di delay, anche se NON è corretto chiamarli delay. E' stato solo un modo per cercare di nascondere l'uso della millis() che non per tutti è semplice da capire.
« Last Edit: April 05, 2013, 06:59:31 am by nid69ita » Logged

my name is IGOR, not AIGOR

0
Offline Offline
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

con la while così hai creato un loop infinito, e anche se la correggi hai un sistema per esegiore la stessa cosa per un tot di tempo e poi eseguire altro..

che è un'altra cosa ancora.

Secondo me è più intuitiva la storia dei Task, se visto come un calendario; all'inizio fissi degli appuntamenti, che possono essere eseguiti con un certo ritardo e poi eventualmente ripetuti con un altro ritardo.

La libreria di leo è il calendario, le funzioni cosa fare all'appuntamento, e schedule() il modo per dire all'arduino di controllare se c'è qualche appuntamento in questo momento (o qualche appuntamento scaduto, che arduino porterà comunque a termine.. non è che se oggi non porti fuori la spazzatura non lo farai mai più, quando te ne ricordi provvedi il prima possibile)
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Roma (RM)
Offline Offline
God Member
*****
Karma: 3
Posts: 634
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Io direi di ripulire il topic e separare le discussioni.
Logged


Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21624
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Se Testato vuol portare avanti la questione della newDelay come la intende lui lo faccio senza problemi.
Per me può altrimenti restare tutto qui, si tratta sempre di una discussione inerente il modo di eseguire determinati compiti con uno scadenzario.
Logged


Roma (RM)
Offline Offline
God Member
*****
Karma: 3
Posts: 634
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bè però non centra nulla col titolo della discussione.
Ma visto che l'hai aperto tu decidi tu.  smiley-grin
Logged


Pages: 1 ... 4 5 [6]   Go Up
Jump to: