Io vorrei interrompere parte del ciclo loop per non perdere tempo nel fare operazioni inutili.
Mi spiego meglio: nel ciclo loop ci sono diversi comandi che mando in input dal monitor seriale. Ce n'è uno in particolare che richiede tempi molto piccoli (27ms) per funzionare, quindi ho bisogno che se mando quel comando, ignori tutto il resto del loop e si concentri su quel comando e basta. Non so se mi sono spiegata bene...
void setup(){
Serial.begin(9600);
}
void loop(){
String stringOne = "";
if (Serial.available()){
while (Serial.available()>0){
char a = Serial.read(); // Stores current byte
stringOne += String(a); // Append current Byte to message String
delay(10);
}
altri comandi....
while (stringOne == "ST"){
do something....;
}
}
Per me non è molto chiaro.
Comunque una soluzione è avere il codice condizionato, dentro ad if
Variabile booleana, vero/falso che tu piloti, con if booleana == vero fai comando, altrimenti non fai
No non devo seguirla una sola volta, devo eseguirla ogni 27ms, ignorando il resto
Cioè una volta che entra nel loop voglio che vada direttamente a quel comando, senza farlo passare da tutto il resto... Oddio non so come spiegarmi meglio...
Allora tutto il resto è condizionato, se vero la booleana fai solo quel comando, saltando il resto.
Non sò però come e quando vuoi mettere a vero la booleana per far scattare quel comando
Forse se posti il programma per intero riusciamo a capire meglio. E se spieghi cosa deve fare il programma.
Soprattutto non capisco il perchè se invia dati con quel comando non deve fare "il resto".
Capisci che a domanda "generica" come da titolo, possiamo rispondere solo in maniera generica, se invece entri nei dettagli allora possiamo essere più specifici.
Quello che chiedi pare ad intuito essere la selezione di porzioni di codice da eseguire nel loop. Una soluzione è il comando switch.
Un prototipo di switch è il seguente:
byte nCase = 0;
void loop() {
switch (nCase) {
case 0:
// tuo codice case 0
break;
case 1:
// tuo codice
break;
case 2:
// tuo codice
break;
}
}
Ci sono tre porzioni di codice, ognuna è selezionata tramite il valore che assume la variabile nCase che inizialmente vale
zero pertanto verrà eseguito // tuo codice case 0, all'interno di questo quando lo ritieni opportuno assegni alla variabile
nCase il valore 1 o 2 e al prossimo ciclo verrà eseguito il case selezionato.
Trova un modo per postare del codice che si comporta come il tuo della tesi, mi spiego meglio scrivi un altro scketch, cambia il nome delle variabili, così non ci sono problemi.
Domanda: Il comando che invi tramite seriale da pc verso arduino deve per forza essere una stringa o può bastare un byte 0÷255?
No so in che modo ti possa fornire aiuto. Interrupt? si o anche no, più no che si, solitamente un interrupt intercetta un eventoe lo lega ad una porzione di codice detta ISR "Interrupt Service Request" e non mi sembra il tuo caso.
Ciao
Mi sembra che ti stia ponendo il problema opposto: non devi saltare il resto del loop, ma eseguire periodicamente la funzione che ti serve! Usa millis(): con unsigned long t,
Oppure, quando deve fare quella cosa salta a una funzione che la fa e non ne esce finché non l'ha finita. Puoi usare un interrupt per impostare una variabile volatile che, rilevata poco dopo nel loop, fa saltare alla funzione quando si verifica un evento.
Thread chiuso ...
... prima di tutto, vedo che l'OP NON si è mai presentato (come richiesto da REGOLAMENTO), ma, cosa ben più grave (per cui chiudo), aveva già iniziato la discussione nella sezione di lingua inglese, dove la stanno aiutando e ... il cross-posting è proibito dal regolamento (anche in sezioni di lingua diversa).