Salve,
premetto che è la prima volta che scrivo in questo forum, e la prima volta che provo a scrivere un programma per Arduino .....ovviamente non funziona; o meglio: non funzionacome vorrei.
Ringrazio in anticipo chi avrà la pazienza di darmi delle dritte per questo mio primo progetto.
Quello che vorrei fare con arduino è questo:
In presenza di segnale alto su un ingresso ( pin 13) ( al rilevamento del fronte di salita oppure al rilevamento della presenza di tale segnale anche per un breve periodo di tempo, per esempio 0.3 sec.), dovrebbe partire un ciclo che mette a livello alto 4 uscite ( pin 2, 3, 4, 5 ) una dopo l' altra in sequenza per un periodo di tempo regolabile tra 0 secondi e circa 2 secondi.
Il tempo di permanenza allo stato alto delle uscite viene regolato da 4 potenziometri collegati ad altrettanti ingressi analogici ( A0, A1, A2, A3); ovviamente ogni potenziometro deve regolare la rispettiva uscita ( A0 -> pin 2 , A1 -> pin 3 ecc. ).
La scheda è Arduino uno rev 3.
Sostanzialmente il tutto funziona, nel senso che il compilatore non restituisce errori, e le uscite vengono attivate per un tempo impostato dal relativo potenziometro.
Quello che mi aspettavo da questo programma è che ( visto l' utilizzo del ciclo DO ...WHILE ) al rilevamento del segnale alto ( 5 V) sull' ingresso pin 13 ( che ho chiamato " enable") di durata circa 0.1 - 0.5 sec. venissero attivate per una volta sola le uscite secondo la sequenza sopra descritta fino al rilevamento del sucessivo segnale "enable" che avrebbe nuovamente innescato il ciclo.
Invece quando ho collegato il tutto, le 4 uscite vengono attivate una dopo l' altra in un loop infinito indipendentemente dal segnale di innesco sul pin 13.
Non capisco il perché.
Questo è lo sketch:
( i commenti del codice servono più che altro a me).
// dichiarazione variabili globali
int AnalogPins[] = {A0, A1, A2, A3};
// numeri dei pin ingressi analogici ai qiali sono collegati i potenziometri che determinano la durata delle uscite a livello alto
int outPins[] = {2, 3, 4, 5}; // numeri dei pin di uscita
const int enablePin = 13; // segnale di inizio ciclo
const int outCount = 4; // numero delle uscite che si vogliono utilizzare
void setup()
{
for (int i = 0; i < outCount; i++)
{
pinMode(outPins[i], OUTPUT); // settaggio / assegnazione della serie di pin nell' array outPins come uscite
}
pinMode(enablePin, INPUT);
};
void loop()
{
// uso il ciclo do-while affinchè al rilevamento del segnale sul pin 13 anche per un breve periodo di tempo, venga attivata
//almeno una volta la sequenza delle uscite a livello alto
int enable = digitalRead(enablePin);
do
{
int enable = digitalRead(enablePin);
digitalWrite ( outPins[2,3,4,5], LOW );
for (int i = 0; i < outCount; i++)
{
int t= analogRead ( AnalogPins[i]); // t è il tempo proporzionale alla posizione del potenziometro letto sugli ingressi analogici
digitalWrite ( outPins[i], HIGH ); // ----sintassi: digitalWrite(ledPin, HIGH); x = mySensVals[4]; ---
delay(t*2);
digitalWrite(outPins[i], LOW);
// digitalWrite ( outPins[2,3,4,5], LOW );
}
}
while (enable == HIGH);
}