Seguimi su Youtubue
Iscriviti
Se desideri, puoi effettuare un'iscrizione gratuita al forum per entrare nella nostra community.
Accedi

Recuperare la parola d'ordine

Ricerca Avanzata
Pubblicità Google AdSense
Answers
Se necessiti di aiuto, clicca il pulsante "Cerco Aiuto" (disponibile anche per i non iscritti).
I postatori più attivi del mese
Poderak
 
Ilfalco78
 

Come ragionare per programmare con Arduino

Vedere l'argomento precedente Vedere l'argomento seguente Andare in basso

Come ragionare per programmare con Arduino

Messaggio Da Poderak il Mar Set 29, 2015 2:43 pm


Per comprendere il Wiring (il linguaggio di programmazione di Arduino), è necessario a mio parere iniziare a comprendere il funzionamento del linguaggio C/C++. In questo post andremo a vedere come ragionare per comprendere come funziona l'IDE di Arduino.

Per prima cosa guardiamo bene la struttura di come deve essere il codice:
IN ALTO DICHIARIAMO I LIBRERIE, PIN E LE VARIABILI
void setup () {
}
In questa parte impostiamo i nostri componenti ed attiviamo servizi come il serial monitor. Nella maggior parte delle volte qui troviamo se il nostro componente è un INPUT/OUTPUT
void loop() {
}
In questa funzione andiamo a inserire tutte le istruzioni che devono ripetersi all'infinito

Per quanto riguarda la prima parte non c'è un vero e proprio ordine. Dobbiamo ricordarci solamente di inserire prima di tutto le librerie e poi dichiarare i PIN e le variabili. Per queste ultime due l'ordine è indifferente.

Per quanto riguarda il "setup" inseriamo tutte le impostazioni necessarie per dichiarare INPUT/OUTPUT e per attivare servizi come il "Serial Monitor". In questo caso non è necessario un ordine in quanto è indifferente.

Per la funzione "loop" invece bisogna inserire tutte le istruzioni che Arduino deve eseguire. In questo caso è necessario fare in modo che le istruzioni siano in ordine. Appunto il nostro Arduino leggerà la prima riga di istruzione, la eseguirà, passerà alla prossima e così via.

Facciamo un esempio concreto di due semafori di un incrocio (perpendicolari tra loro). Per realizzarlo ci serviranno 6 LED (tralasciando gli altri componenti elettronici e facendo finta di avere già collegato tutto ad Arduino).
NB: Il codice è commentato. Tutto quello che segue a "//" è un commento.

Codice:

//Come spiegato nella guida, dichiariamo tutti i PIN
//necessari per "battezzarli" con un nome.
int ledv1=2; //Il PIN 2 corrisponde al led verde del semaforo 1.
int ledg1=3; //Il PIN 3 corrisponde al led giallo del semaforo 1.
int ledr1=4; //Il PIN 4 corrisponde al led rosso del semaforo 1.
int ledv2=5; //Il PIN 5 corrisponde al led verde del semaforo 2.
int ledg2=6; //Il PIN 6 corrisponde al led giallo del semaforo 2.
int ledr2=7; //Il PIN 7 corrisponde al led rosso del semaforo 2.

void setup() { //Impostiamo i nostri PIN come Output/Input.
pinMode(ledv1, OUTPUT); //Dichiariamo questo LED come OUTPUT
pinMode(ledg1, OUTPUT); //Dichiariamo questo LED come OUTPUT
pinMode(ledr1, OUTPUT); //Dichiariamo questo LED come OUTPUT
pinMode(ledv2, OUTPUT); //Dichiariamo questo LED come OUTPUT
pinMode(ledg2, OUTPUT); //Dichiariamo questo LED come OUTPUT
pinMode(ledr2, OUTPUT); //Dichiariamo questo LED come OUTPUT
//Perché i led sono output? Perché non inviano dati
//ad Arduino ma avviene esattamente il contrario.
//Arduino invia dati al led per accendersi.
}

void loop() { //Indichiamo ad Arduino la sequenza delle istruzioni
  //Blocco 1 di istruzioni da eseguire.
  digitalWrite(ledr1, HIGH); //Il semaforo 1 ha il rosso attivato.
  digitalWrite(ledv2, HIGH);//Il semaforo 2 ha il verde attivato.
  //Fine blocco istruzioni.
  delay(5000); //Tempo di attesa per eseguire il primo blocco.
  //Blocco 2 di istruzioni da eseguire.
  digitalWrite(ledv2, LOW); //Il semaforo 2 disattiva verde.
  digitalWrite(ledg2, HIGH); //Il semaforo 2 attiva giallo.
  delay(2000); //Tempo di attesa per eseguire il secondo blocco.
  digitalWrite(ledg2, LOW); //Il semaforo 2 disattiva giallo.
  digitalWrite(ledr1, LOW); //Il semaforo 1 disattiva rosso.
  digitalWrite(ledr2, HIGH); //Il semaforo 2 accende rosso.
  digitalWrite(ledv1, HIGH); //Il semaforo 1 attiva verde.
  delay(5000); //Tempo di attesa per eseguire il terzo blocco.
  digitalWrite(ledv1, LOW); //Il semaforo 1 disattiva verde.
  digitalWrite(ledg1, HIGH); //Il semaforo 1 attiva giallo.
  delay(2000); //Tempo di attesa per eseguire il quarto blocco.
  digitalWrite(ledg1, LOW); //Il semaforo 1 disattiva giallo.
  digitalWrite(ledr2, LOW); //Il semaforo 1 disattiva rosso.

//Arduino ritorna a eseguire nuovamente il blocco uno di istruzioni
//per poi passare al successivo.
}


Poderak
♔ Amministratore

Messaggi Messaggi : 4117
Crediti Crediti : 11595
Reputazione Reputazione : 185
Data d'iscrizione Data d'iscrizione : 08.03.11
Età Età : 18
Località Località : Brescia

Vedere il profilo dell'utente http://www.wikiinfo.net

Tornare in alto Andare in basso

Vedere l'argomento precedente Vedere l'argomento seguente Tornare in alto


 
Permesso di questo forum:
Non puoi rispondere agli argomenti in questo forum