.: HosiriS :.

Informatica e non solo

Multithreading con Arduino

Pubblicato da hosiris su ottobre 20, 2011

E’ possibile eseguire operazioni in multithread con arduino? Diciamo di no! Perché il nostro piccolo amico non è dotato di scheduler. Allora bisogna trovare il modo di supplire a questa mancanza.

Utilizzaremo il seguente schema:

la resistenza ha il valore di 470ohm. Di seguito il risultato reale.

Facciamo una prima applicazione in cui semplicemente faremo lampeggiare i led:


void setup(){
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
}

void loop(){
  digitalWrite(13, HIGH);
  digitalWrite(12, HIGH);
  delay(500);
  digitalWrite(13,LOW);
  digitalWrite(12,LOW);
  delay(500);
}

Vediamo che i led saranno costretti a lavorare in maniera sincrona:

Sostituiamo adesso quel codice con il seguente:


#define ledPin1 12
#define ledPin2 13

#define led1Cycle 500U
#define led2Cycle 750U

unsigned long led1LastMillis = 0;
unsigned long led2LastMillis = 0;

boolean led1State = false;
boolean led2State = false;

boolean cycleCheck(unsigned long *lastMillis, unsigned int cycle)
{
  unsigned long currentMillis = millis();
  if(currentMillis - *lastMillis >= cycle)
  {
    *lastMillis = currentMillis;
    return true;
  }
  else
    return false;
}

void setup()
{
  pinMode(ledPin1, OUTPUT);
  pinMode(ledPin2, OUTPUT);
}

void loop()
{
  if(cycleCheck(&led1LastMillis, led1Cycle))
  {
    digitalWrite(ledPin1, led1State);
    led1State = !led1State;
  }
  if(cycleCheck(&led2LastMillis, led2Cycle))
  {
    digitalWrite(ledPin2, led2State);
    led2State = !led2State;
  }
}

In questo modo, grazie al check sul valore restituito da millis() riusciamo a gestire più processi separatamente:

Buon divertimento!

FONTE ORIGINALE

About these ads

Una Risposta a “Multithreading con Arduino”

  1. [...] Multithreading con Arduino ::: HosiriS [...]

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

 
Iscriviti

Ricevi al tuo indirizzo email tutti i nuovi post del sito.

%d blogger cliccano Mi Piace per questo: