multitasking con Arduino

Parlando in questi giorni nel post di paverik è emerso il tema del multitasking.
Girovagando per il forum di arduino sono capitato in un post dove, secondo me si vedono due concetti fondamentali nella programmazione di arduino.
Il primo è “la creazione di funzioni”, il secondo è il “timing” la cui diretta conseguenza è il “multitasking” con arduino di cui parlavo al cafè castalia (spero si scriva così…) e al OHL presso idea solidale la scorsa volta.

Il post è questo: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1194451744
Particolarmente significativo l’ultimo intervento di westfw di cui riporto il codice di seguito:

int ledPin = 13;                 // LED connected to digital pin 13
int fadePin = 3;
unsigned long nextBlink, nextFade;
int fadeBrightness = 0;
char ledState = LOW, fadeDir = 10;

void setup()
{
    pinMode(ledPin, OUTPUT);      // sets the digital pin as output
    pinMode(fadePin, OUTPUT);
    ledState = LOW;
    nextBlink = millis();
    nextFade = millis();
}

/*
 * This checks whether it's time to change the state of the LED, and
 * does the write if so.  But it doesn't execute delay(), so in either
 * case it takes essentially no time to execute.
 */
void blink(void)
{
    unsigned long now;
    now = millis();
    if (now >= nextBlink) {
        nextBlink = now + 1000;    // Next change in one second
        if (ledState == LOW) {
            digitalWrite(ledPin, HIGH);
            ledState = HIGH;
        }
        else {
            digitalWrite(ledPin, LOW);
            ledState = LOW;
        }
    }
}

void fade(void)
{
    unsigned long now;
    now = millis();
    if (now >= nextFade) {
        nextFade = now + 200;    // Next change in one second
        if (fadeDir > 0) {
            if (fadeBrightness > (255 - fadeDir)) {
                fadeDir = - fadeDir;
            }
        }
        else {
            if (fadeBrightness < (-fadeDir)) {
                fadeDir = - fadeDir;
            }
        }
        fadeBrightness += fadeDir;
        analogWrite(fadePin, fadeBrightness);
    }
}

void loop()
{
    blink();
    fade();
}

grande Vittorio. il caffé é Basaglia. Si vede cha andavi in discoteca negli anni '90 a torino! Ciao D

Grazie nathanvi :) devo dire che non avevo mai pensato di gestire cosi il codice :(

thx!

Mmm… non ho capito… :frowning:

ciao Vittorio,

sto studiando e ... applicando.

grandi progressi per il mio progettino park-sensor, non funzionava per degli errori sintattici (da spararsi ore ore di spremitura cerebrale per un punto e virgola), è ancora da mettere a punto su dei particolari ma avrai presto mie notizie.

grazie per il post , ma devo dirti la verità non ci capisco non gran che. il mio livello è ancora troppo basso.

ciao a tutti. riccardo :)