sono alle prime armi avrei bisogno di risolvere un problema con while
praticamente invio un comando con monitor arduino verifica stato sensore attende che il sensore sia alto e avvia motore a destra ,
quando il sensore torna basso il motore si ferma .
mi sto arrovellando ,perche quando invio per la stessa esecuzione per motore a destra non succede nulla.
Grazie per l'attenzione invio sketch
Ti consiglio prima di tutto di usare il tasto CTRL+T sul tuo codice, te lo indenta in automatico.
Secondo, hai inserito una serie strana e spropositata di while e if uno dentro l'altro. Sinceramente non capisco il senso.
Dovresti riscrivere cosa vuoi fare perchè, per me almeno, non è chiaro.
Hai 2 comandi (1 e 2) e a seconda del comando vuoi far partire il controllo su uno dei 2 sensori e quindi ad uno dei due motori?
I due comandi sono indipendenti, giusto ?
Se si, intanto mi concentrerei solo su 1 comando/sensore/motore. Poi se quello risolvi duplichi la cosa per l'altro.
Inoltre non capisco perchè se lavori con sensore1 (pin e status) usi il comando '2' e per sensore2 usi comando '1'.
Incasina solo la logica.
Le parentesi graffe abituati a metterle sempre su riga da sola e non dopo a if/while. Così con tasto CTRL+T è più semplice verificare nella colonna la corrispondenza tra aperta graffa e chiusa graffa.
grazie per la risposta immediata seguendo il tuo sketch ti invio la modifica da me apportata ,comunque sono punto accapo il secondo comando non funziona ,il senso del tutto è un motore due sensori uno dx uno sx , invio comando seriale 1 apetta che il sensore sia high e va fino a che il sensore è low, stessa cosa comando 2 .il comando due non viene accettato. spero di essere stato chiaro . Addesso mi presento nel forum Grazie
Nel tuo codice (che non posso provare, non ho il tuo hardware) c'e' questa istruzione: while (1);
Quella crea un BLOCCO da cui Arduino NON ne esce più.
Inoltre, se il tuo codice è corretto per uno dei motori, a me sembra di vedere che il codice del secondo comando NON è simile, fa cose diverse.
RImando il codice non funziona comando 2,non so forse non esce da comando 1 ,il motore è uno, ilcomando 1 lo fa andare in un senso controllato da sensore 1 ; il comando 2 lo fa andare nell'altro controllato da sensore 2. in pratica se serial 1 easpetta sensore alto e ruota in un senso fino aquando lo stesso sensore non va in loW. altrettanto con comando 2 altro senso di rota zione altro sensore . il problema è che il mio sketch accetta solola il primo comando se in verto e per primo metto comando 2 acctta solo comando due. L'hardware è costituito da arduino uno e driver motor ,con un arduino e un driver motor comando un motore che fa muovere un modulo ho diversi moduli che si muovono e quindi interagiscono . se riesco a avere comando 2 è perfetto.
Per il resto comunico con i moduli da pc con xbee con software creato con vb express.rimando sketch con descrizione
piccolo passo avanti mettendo serial read alla fine di dui cicli while ,arduino le esegue indifferentemente uno dei due cicli, (prima eseguiva solo il primo)
ma poi si ferma eno accetta piu comando seriale credo basti fare in modo che dopo una esecuzione lo shetch rini zi da capo come si fa?
Grazie della pazienza
bellissimo forum grazie a tutti,
di seguito sketch
const byte md = 13;
const byte SensorPin1 = 6;
const byte SensorPin2 = 7;
const byte ms = 12;
int SensorState1 = 0;
int SensorState2 = 0;
char val = '0';
void setup()
{ delay(1000);
Serial.begin (9600);
pinMode (md, OUTPUT);
pinMode (ms, OUTPUT);
pinMode (SensorPin1, INPUT);
pinMode (SensorPin2, INPUT);
}
void loop() {
val = Serial.read ();
if (val == '2' ) // invio comando
while (SensorState2 == 0)// Aspetto sensore alto
{
SensorState2 = digitalRead(SensorPin2);
if ( SensorState2 == 1)
{
digitalWrite(md, LOW);
digitalWrite(ms, HIGH);
delay(200);
while ( SensorState2 == 1 )
{
SensorState2 = digitalRead(SensorPin2);
if ( SensorState2 == 0 )
{
digitalWrite(ms, LOW);
delay(100); // fino qui perfetto
val = Serial.read ();
}
}
}
}
// comando 2 non prende comando non so perche forse non esce da while
//precedente
if ( val == '1')
while ( SensorState1 == 0 )
{
SensorState1 = digitalRead(SensorPin1);
if ( SensorState1 == 1)
{
digitalWrite(ms, LOW);
digitalWrite(md, HIGH);
delay(200);
while ( SensorState1 == 1 )
{
SensorState1 = digitalRead(SensorPin1);
if ( SensorState1 == 0 )
{
digitalWrite(md, LOW);
val = Serial.read ();
}
}
}
}
}
@ gegia : come da REGOLAMENTO (... che dovresti aver letto), punto 7, il codice DEVE essere racchiuso tra i tag CODE (... che, in fase di edit, ti inserisce il bottone # ... terzultimo della seconda fila).
Cortesemente edita il tuo post e correggi. Grazie.