Ciao a tutti,
sono un super newbie come programmatore e utilizzatore di arduino. Sto facendo dei test con dei motori passo passo, però ho un dubbio: arduino può gestire in modo indipendente parti di programma? Mi spiego meglio: quello che sto tentando di fare è far muovere i motori a velocità diversa tra di loro ma come si può vedere nel listato sotto le velocità dei motori interferiscono tra loro (perchè il programma viene "letto" sequenzialmente).
// Stepper motor: random speed, direction & round. 3310 lcd display.
int step_a_ = 5;
int step_b_ = 10;
int speed_a_;
int speed_b_;
int round_a_;
int round_b_;
int direction_a_;
int direction_b_;
int a = 1000;
int b = 1000;
void setup(void)
{
pinMode(step_a_, OUTPUT);
pinMode(step_a_ + 1, OUTPUT);
pinMode(step_a_ + 2, OUTPUT);
pinMode(step_a_ + 3, OUTPUT);
pinMode(step_b_, OUTPUT);
pinMode(step_b_ + 1, OUTPUT);
pinMode(step_b_ + 2, OUTPUT);
pinMode(step_b_ + 3, OUTPUT);
randomSeed(analogRead(0));
}
void loop(void)
{
if (a >= (round_a_ * 200) ) {
speed_a_ = random (1, 6); round_a_ = random (1, 6); direction_a_ = random (1,3); if (direction_a_ == 2) direction_a_ = -1; a = 0;
}
if (b >= (round_b_ * 48) ) {
speed_b_ = random (4, 9); round_b_ = random (1, 6); direction_b_ = random (1,3); if (direction_b_ == 2) direction_b_ = -1; b = 0;
}
digitalWrite(step_a_, LOW);
step_a_ = step_a_ + direction_a_;
a++;
if (step_a_ < 5) step_a_ = 8;
if (step_a_ > 8) step_a_ = 5;
digitalWrite(step_a_,HIGH);
digitalWrite(step_b_, LOW);
step_b_ = step_b_ + direction_b_;
b++;
if (step_b_ < 10) step_b_ = 13;
if (step_b_ > 13) step_b_ = 10;
digitalWrite(step_b_,HIGH);
delay(speed_b_);
digitalWrite(step_a_, LOW);
Multitasking significa che 2 o piú programmi vengano eseguiti in quasiparalello perché si da a ognuno una parte del tempo e tutte le risorse del Computer. Processori possono essere ottimizzati per questo e il sistema operativo deve prevederlo perché a ogni cambio devono essere memorizzate lo stato del programma da fermare e ricaricato lo stato di esecuzione di quello che incomincia. NElle proprietá condivise si chaiama questo "time sharing".
Arduino non ha un sistema operativo. Non é costruito per un multitasking.
La risposta é nó. Non puoi fare eseguire 2 sketch in quasi-contemporanea.
Devi Tu programmare lo sketch in modo che le 2 cose possano funzionare entrambe e non essere disturbate dal altra funzione.
Non devi usare delay per i ritardi ma millis come descritto nel sketch http://arduino.cc/en/Tutorial/BlinkWithoutDelay