Skip to content
Snippets Groups Projects
Select Git revision
  • 5760fde8e979a743509a41815e79e5fa2e7212cf
  • master default protected
  • patch-2
  • patch-1
  • PRETASKSCHED
5 results

FanLoop.ino

Blame
  • Forked from SistemiEmbedded / 2019-2020
    Source project has a limited visibility.
    FanLoop.ino 2.07 KiB
    //#define SENSORE 4  // sulla board Arduino UNO solo 2,3
    #define SENSORE 2
    #define ATTUATORE 12
    
    // TODO 'volatile' (vedere se si può creare un esperimento ad-hoc, non banale)
    
    volatile long timestamp=0;
    volatile long durata=0;
    volatile boolean updated=false;
    float duty=.5; // %
    int periodpwm=1000; //millis
    
    //boolean fai=true; // per il "monitor"
    
    void setup() {
        Serial.begin(115200);
        pinMode(SENSORE,INPUT); // c'è qualcosa che non va? ;)
        pinMode(ATTUATORE,OUTPUT);
    
        // CONFIGURAZIONE
        attachInterrupt(
            digitalPinToInterrupt(SENSORE),
            rispostaInterrupt,
            RISING);
    }
    
    void loop() {
        //boolean scattato=digitalRead(SENSORE); // non serve più
        if(updated) {
            //Serial.print(timestamp);
            //Serial.print(F(","));
            Serial.print(durata);
            Serial.print(F(","));
            Serial.println(duty*100);
            //Serial.print(",");
            //Serial.println(scattato);
            updated=false;
        }
        // a questo punto posso permettermi tranquillamente di "dormire" anche a lungo... o no?
        delay(periodpwm*(1.0-duty));
        digitalWrite(ATTUATORE,HIGH);
        delay(periodpwm*(duty));
        digitalWrite(ATTUATORE,LOW);
    
        /* versione "grande"
        	LOW  800
        	HIGH 250 non meno, se no non fa nemmeno in tempo a partire
        	minima durata circa 20ms, max circa 60
    
           versione "piccola", ad esempio
            LOW  500
            HIGH 500
        */
    
    }
    
    void rispostaInterrupt() {
        //noInterrupts(); // non si può invocare da dentro, non ha effetto, va usata fuori per marcare sezioni critiche, qui dentro parte già a interrupt disabilitati
    
        /* versione "monitor" (dei poveri)
        if (fai) {
        	fai=false;
        	durata=millis()-timestamp;
        	timestamp=millis();
        	//scattato=true;
        	fai=true;
        }
        */
    
        //Serial.println("int!"); //da non fare...