Risorse per il Lab. Elettronica |
|
Home Page
CAD/CAE • LTspice • PSpice Sistemi • Arduino • AVR • Raspberry Pi • National Instruments Risorse • Datasheet • Link • Hardware e Software • Misc |
Programmare il GPIO di Raspberry Pi in C (beta) Quest'opera è distribuita con Licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Italia. E' dunque escluso l'utilizzo per scopi di lucro . Autore: Francesco Parisi, fparisi AT gmail DOT com Ultima modifica: 09/08/2021 Il terzo programma: effetto supercar con 5 LED Il terzo programma è un classico: un semplice effetto luci simile a quello della macchina della famosa serie televisiva Supercar: far scorrere un LED in una sola direzione. • L'hardware Gli anodi dei cinque LED sono collegati ai pin sempre mediante un resistore di limitazione da 330Ω (dimensionato nel primo programma). Il LED si accende quando si manda sul relativo pin un bit 1 (ovvero HIGH )
che corrisponde a circa 3,3V e si spegne
inviando un bit zero 1 (oppure LOW ) che corrisponde
a circa 0V. Il software dovrà accendere uno solo LED per volta, mantenerlo acceso
per un breve tempo a piacere, e quindi accendere il successivo, posizionato alla
sinistra, come descritto dall'immagine seguente:
• Il software Passando al codice, bisogna come sempre tradurre i pin fisici in pin virtuali secondo la convenzione WiringPi (vedi Panoramica del GPIO). Per quanto riguarda il programma, viene creato un vettore di interi ( led[] )
in cui ciascun elemento corrisponde a un pin di un LED:
il primo elemento del vettore sarà dunque rappresentato dal pin a cui è collegato il primo LED,
il secondo elemento dal pin che fa capo al secondo LED e così via, fino al quinto LED.
Si ricorda che in C il primo elemento di un vettore è accessibile mediante l'indice 0 ,
mentre l'ultimo tramite l'indice n-1 ove n
è il massimo numero di elementi (dimensione del vettore), in questo caso rappresentato dal numero di LED (NLED ).
for (j=0; j<NLED; j++) { digitalWrite ( led[j], 1 ); delay (TON); digitalWrite ( led[j], 0 ); } Mediante una struttura for si scandisce l'array led[]
facendone variare l'indice di accesso (rappresentato dalla variabile j )
da 0 fino a NLED-1 .
A ogni ciclo, mediante la funzione digitalWrite (led[j], 1) viene inviato un bit 1
(equivalente a HIGH ) sul pin definito come j-simo elemento.
Il successivo ritardo delay(TON) mantiene acceso il LED per circa mezzo secondo, che viene quindi successivamente spento.
Viene lasciato allo studente, come esercizio, l'aggiunta dei commenti alle #define dei pin e alle istruzioni.
LEDSUPERCAR.C
#include <wiringPi.h> #define LED1_PIN 0 // LED1 (0 WiringPi, GPIO17, pin 15) #define LED2_PIN 1 // LED2 ... #define LED3_PIN 2 // LED3 ... #define LED4_PIN 3 // LED4 ... #define LED5_PIN 4 // LED5 ... #define NLED 5 // Totale LED usati #define TON 500 // Durata accensione LED [ms] int main (void) { // --- Init wiringPiSetup(); pinMode (LED1_PIN, OUTPUT); pinMode (LED2_PIN, OUTPUT); pinMode (LED3_PIN, OUTPUT); pinMode (LED4_PIN, OUTPUT); pinMode (LED5_PIN, OUTPUT); int led[NLED]; // Crea un vettore di NLED elementi di tipo int led[0] = LED1_PIN; led[1] = LED2_PIN; led[2] = LED3_PIN; led[3] = LED4_PIN; led[4] = LED5_PIN; int j; // --- Loop while (1) { for (j=0; j<NLED; j++) { digitalWrite ( led[j], 1 ); // Accende LED collegato al j-simo pin delay (TON); digitalWrite ( led[j], 0 ); // Spegne LED } } return 0 ; } |
|
Informativa estesa sui Cookie
|
|
Realizzazione a cura di Francesco Parisi (2002 ÷ 2024) | Contatti