Salve a tutti mi presento sono Edoardo, vorrei porvi un quesito da neofita:
Vorrei controllare due led attraverso un modulo Bluetooth, fino a qui tutto bene, ma se io volessi che alla ricezione del segnale uno dei due led inizi a lampeggieare si può fare in modo che l'altro continui a lavorare in modo indipendente ovvero:
1-led spenti
2-invio il segnale e uno dei due led inizia a lampeggiare
3-invio un segnale diverso e l'altro led o si accende o spenge(in base allo stato precedente)
4- invio un altro segnale che mi fa spengere il led che lapeggia
tutto questo in modo separato ovvero controllarne uno solo o entrambi come spiegato prima.
Ti segnalo che, nella sezione in lingua Inglese, si può scrivere SOLO in Inglese ... quindi, per favore, la prossima volta presta più attenzione in quale sezione metti i tuoi post; questa volta esso è stato spostato, da un moderatore della sezione di lingua Inglese, nella sezione di lingua Italiana ... la prossima volta potrebbe venire direttamente eliminato. Grazie.
... cortesemente, come prima cosa, leggi attentamente il REGOLAMENTO della sezione Italiana del forum, (prestando sempre molta attenzione al punto 15), dopo di che, come da suddetto regolamento, fai la tua presentazione NELL'APPOSITA DISCUSSIONE spiegando bene quali esperienze hai in elettronica e programmazione, affinché noi possiamo conoscere la tua esperienza ed esprimerci con termini adeguati.
Grazie,
Guglielmo
P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposita discussione, nel rispetto del succitato regolamento nessuno ti risponderà (eventuali risposte o tuoi ulteriori post, verrebbero temporaneamente nascosti), quindi ti consiglio di farla al più presto.
const int led = 13;
const int led2 = 8;
int ledState = LOW;
int ledState2 = LOW;
unsigned long previousMillis = 0;
unsigned long currentMillis = 0;
const long interval = 700;
int stato = 0;
void setup() {
Serial.begin(9600);
pinMode(led, OUTPUT);
}
void loop() {
char c = Serial.read();
if(c == 'a'){
currentMillis = millis();
if(currentMillis - previousMillis >= interval){
if (ledState == LOW) {
ledState = HIGH;
}
else{
ledState = LOW;
}
digitalWrite(led,ledState);
}
}
c = Serial.read();
if(c == 'b'){
digitalWrite(led,LOW);
}
}
else if (c=='d'){
if (ledState2 == LOW) {
ledState2 = HIGH;
}
else{
ledState2 = LOW;
}
digitalWrite(led2,ledState);
}
}
Ecco questo è quello che ho buttato giù.
@Claudio_FF ho provato a ragionare sulla tua idea ma non riesco a capire come fare ad applicarla perché per esempio se io do il comando "X" per far lampeggiare il led e poi volessi invertire lo stato dell'altro led uscirei dalla condizione di lampeggio, sicuramente sto sbagliando qualcosa nella comprensione
Infatti il lampeggio non deve stare dentro quella condizione, ma fuori dagli if che riconoscono i comandi in arrivo. Dentro quella condizione si deve semplicemente dare l'abilitazione al lampeggio, impostando una apposita variabile che resta impostata fino a comando contrario.
Il processo di lampeggio (fuori dalle condizioni di ricezione) legge quella variabile ed agisce di conseguenza, se vogliamo "in parallelo" al processo di ricezione/riconoscimento comandi.
Serve una variabile di stato: lamp_on=1 o 0 (o HIGH e LOW). A ogni giro di loop, se è 1 o HIGH, controlla quanto tempo è trascorso e, al momento giusto, inverte lo stato del LED. Se è 0 o LOW, spegne il LED.
se usi LOW, HIGH, false, true per coerenza devi usare una variabile di tipo bool, pur essendo associati nell'ambiente di Arduino a LOW e false il valore 0 e a HIGH e true il valore 1.
LOW e HIGH solitamente si usano per fare confronti con digitalRead o per assegnare uno stato con digitalWrite; negli altri casi si usano false e true, ma funziona comunque: Interchanging HIGH/LOW with true/false - #7 by system
per convenzione, le costanti hanno nomi maiuscoli:
const byte PIN_LED1=12; const byte PIN_LED2=8;
le variabili int sono a 16 bit, ma per piccoli valori tra 0 e 255 o tra -127 e +127 puoi usare byte e char. Più chiaramente puoi usare
int8_t
uint8_t
int16_t
uint16_t
int32_t
uint32_t
che sono con segno o senza segno (u=unsigned, senza segno) a 8, 16 o 32 bit.