Buonasera, ho iniziato ad creare dei programmini con Arduino.
So che una volta chiamata una funzione, le variabili che vivono solo nella funzione quando si ritorna nel main() vengono cancellate)
Prima mi sono messo a fare un progetto base discusso in una guida trovata in internet; leggendo il codice mi sono accorto di un fatto che al momento ho ritenuto un errore, poi però testando il progetto ho visto che funzionava:
Il codice è questo:
byte ledPin[] = {4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
int ledDelay(65); // delay between changes
int direction = 1;
int currentLED = 0;
unsigned long changeTime;
void setup() {
// set all pins to output
for (int x=0; x<10; x++) {
pinMode(ledPin[x], OUTPUT); }
changeTime = millis();
}
void loop() {
// if it has been ledDelay ms since last change
if ((millis() - changeTime) > ledDelay) {
changeLED();
changeTime = millis();
}
}
void changeLED() {
// turn off all LED's
for (int x=0; x<10; x++) {
digitalWrite(ledPin[x], LOW);
}
// turn on the current LED
digitalWrite(ledPin[currentLED], HIGH);
// increment by the direction value
currentLED += direction;
// change direction if we reach the end
if (currentLED == 9) {direction = -1;}
if (currentLED == 0) {direction = 1;}
}
Il mio dubbio è quella variabile currentLED nella funzione; come mai una volta uscito dalla funzione il suo valore rimane "vivo"? cioè non si cancella come avrei pensato io? Fore non ho capito bene come "lavora" il linguaggio di arduino.
Spero di essermi spiegato, grazie.
EDIT
Credo di aver risolto, mi sono dato una rinfrescata di teoria; con Arduino, quando definiamo le variabili all'inizio, esse hanno una visibilità globale, quindi ogni funzione può modificarle, avevo fatto confusione con le variabili locali nelle funzioni. (chiedo a moderatori se è possibile cancellare tutto):