salve a tutti, sto provando a fare un pò di pratica con arduino uno.
ho preso degli esempi in rete e cerco di modificarli a piacere.
tramite seriale invio dei caratteri a arduino e con uno switch case esegue delle determinati operazioni e scrive delle cose su seriale.
vorrei provare a usare il "multitasking " di arduino ma non capisco come fare.
allora mentre è in ascolto sulla seriale voglio far lampeggiare un led ho provato con millis e il lampeggìo del led è a tempo però il programma non mi ascolta sulla seriale. mentre con secTimer anche con l'esempio base ho notato che il tempo non corrisponde.
Grazie a tutti delle risposte
#define luce1 11 // led connesso al pin n°10
#define luce2 10
#define luce3 9
#define luce4 8
#define luce5 6
#define luce6 7
byte rx = 0; // variabile per contenere il carattere ricevuto
int stato1=0;
int stato2=0;
int stato3=0;
int stato4=0;
int stato5=0;
int stato6=0;
long previousMillis = 0;
long interval = 5000;
void setup()
{
Serial.begin(9600); // imposto la UART per lavorare a 9600
pinMode(luce1, OUTPUT); // imposto il pin sul quale è collegato il led come uscita
pinMode(luce2, OUTPUT); // imposto il pin sul quale è collegato il led come uscita
pinMode(luce3, OUTPUT); // imposto il pin sul quale è collegato il led come uscita
pinMode(luce4, OUTPUT); // imposto il pin sul quale è collegato il led come uscita
pinMode(luce5, OUTPUT); // imposto il pin sul quale è collegato il led come uscita
pinMode(luce6, OUTPUT); // imposto il pin sul quale è collegato il led come uscita
Serial.flush(); // svuoto il buffer di ricezione seriale
}
void loop()
{
if (Serial.available() >0) // Controllo se il buffer di ricezione contiene qualcosa
{
rx = Serial.read(); // leggo il carattere ricevuto e lo memorizzo in rx
Serial.flush(); // svuoto il buffer di ricezione seriale
switch (rx) {
case '1': // your hand is on the sensor
digitalWrite(luce1,HIGH);
Serial.println("luce1 accesa");
break;
case '2': // your hand is close to the sensor
digitalWrite(luce2,HIGH);
Serial.println("luce2 accesa");
break;
case '3': // your hand is a few inches from the sensor
digitalWrite(luce3,HIGH);
Serial.println("luce3 accesa");
break;
case '4': // your hand is nowhere near the sensor
digitalWrite(luce4,HIGH);
Serial.println("luce4 accesa");
break;
case '5': // your hand is nowhere near the sensor
digitalWrite(luce5,HIGH);
Serial.println("luce5 accesa");
break;
case '6': // your hand is nowhere near the sensor
digitalWrite(luce6,HIGH);
Serial.println("luce6 accesa");
break;
case 'a': // your hand is on the sensor
digitalWrite(luce1,LOW);
Serial.println("luce 1 spenta");
break;
case 'b': // your hand is close to the sensor
digitalWrite(luce2,LOW);
Serial.println("luce 2 spenta");
break;
case 'c': // your hand is a few inches from the sensor
digitalWrite(luce3,LOW);
Serial.println("luce 3 spenta");
break;
case 'd': // your hand is nowhere near the sensor
digitalWrite(luce4,LOW);
Serial.println("luce 4 spenta");
break;
case 'e': // your hand is nowhere near the sensor
digitalWrite(luce5,LOW);
Serial.println("luce 5 spenta");
break;
case 'f': // your hand is nowhere near the sensor
digitalWrite(luce6,LOW);
Serial.println("luce 6 spenta");
break;
case '0':
stato1= digitalRead(luce1);
if (stato1==1){
Serial.println("luce1 accesa");
}
else{
Serial.println("luce1 spenta");
}
stato2= digitalRead(luce2);
if (stato2==1){
Serial.println("luce2 accesa");
}
else{
Serial.println("luce2 spenta");
}
stato3= digitalRead(luce3);
if (stato3==1){
Serial.println("luce3 accesa");
}
else{
Serial.println("luce3 spenta");
}
stato4= digitalRead(luce4);
if (stato4==1){
Serial.println("luce4 accesa");
}
else{
Serial.println("luce4 spenta");
}
}
}
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
stato6^=1;
digitalWrite(luce6, stato6);
}
}