L'hardware
L'anodo del LED è collegato al pin fisico 11 del GPIO, mediante un resistore di limitazione R1 da 330 Ω ; il catodo è collegato alla massa del Raspberry (pin fisico 6). Il LED si accende quando si manda sul pin un bit 1 (corrispondente a circa 3,3V) e si spegne inviando un bit zero (circa 0V).
Per il calcolo della resistenza R1 di limitazione, si è assunta una tensione diretta del LED rosso pari a 1,8V. Per la corrente di uscita di un pin GPIO è bene mantenersi fra i 3mA e i 5mA; con 5mA il LED ha una luminosità sufficiente. Dunque, la resistenza di limitazione sarà facilmente calcolabile come:
Il software
Il programma in linguaggio C, usa le estensioni wiringPi, che consentono di facilitare le comuni operazioni di lettura, scrittura sul GPIO di Raspberry Pi
BLINK.C
#include <wiringPi.h> #define LED_PIN 0 // LED rosso (0 WiringPI, GPIO17, pin 11) int main (void) { // --- Init wiringPiSetup() pinMode (LED_PIN, OUTPUT); // configura LED_PIN come pin di uscita // --- Loop while (1) { digitalWrite (LED_PIN, HIGH) ; // Accendi LED delay (500) ; // Tienilo acceso per 500ms digitalWrite (LED_PIN, LOW) ; // Spegni LED delay (500) ; // Tienilo spento per 500ms } return 0 ; }
Analizziamo il programma.
#include <wiringPi.h>Ogni programma che usi
wiringPi
ovviamente dovrà prevedere la direttiva di inclusione del file header.
#define LED_PIN 0
#define LED_PIN 0
è una direttiva al processore. Tutte le successive occorrenze di LED_PIN
verranno sostituite con il numero 0
.
Per i pin si può seguire il seguente schema di commento:
// Descrizione del pin (numero_pin WiringPI, GPIOxx, numero_pin_fisico)ossia
// Led rosso 1 (0 WiringPI, GPIO17, pin 11)In questo modo, di ciascun pin si saprà sempre la numerazione secondo i tre modi: wiringPi, GPIO e pin fisico, agevolando così la fase di montaggio e di debug.
// --- Init if (wiringPiSetup() == -1) exit(1); pinMode (LED_PIN, OUTPUT); // configura LED_PIN di uscitaIl primo gruppo di istruzioni che troviamo nella
main()
sono quelle raggruppate dal commento Init
.
Esse vanno a inizializzare la libreria
WiringPi
e a configurare i pin utilizzati, se di ingresso o uscita mediante la funzione pinMode()
.
L'istruzione
pinMode (LED_PIN, OUTPUT);
consente di configurare il nostro LED_PIN
, come pin di uscita sul quale potremo dunque inviare bit 0 e 1.
La chiamata alla funzione
wiringPiSetup()
va fatta una sola volta, comunque prima che si inizino a invocare le estensioni wiringPi
, quindi è bene collocarla come prima istruzione in assoluto della main()
.
// --- Loop while (1) { digitalWrite (LED, HIGH) ; // Accendi LED delay (500) ; // Tienilo acceso per 500ms digitalWrite (LED, LOW) ; // Spegni LED delay (500) ; // Tienilo spento per 500ms }Il ciclo
while(1){}
è il classico "loop senza fine" dei sistemi embedded: le istruzioni contenute nel corpo del while
verranno eseguite ripetutamente, finché non si spegne/resetta il computer ovvero si interrompe in qualche modo l'esecuzione del programma (vedi pagina successiva). E' del tutto equivalente a for(;;)
. La funzione
digitalWrite()
manda sul pin desiderato (specificato nel primo parametro) un bit 0 (LOW
) o un bit 1 (HIGH
).
Per mantenere/acceso il LED si usa la funzione delay()
che genera un ritardo pari al valore (espresso in ms
) passato come argomento; quindi, nel nostro caso, il LED rimarrà acceso/spento per mezzo secondo.
La fase successiva sarà quella di generazione dell'eseguibile e della sua esecuzione ovviamente dopo aver installato la libreria WiringPi.
> Raspberry Pi - Installare WiringPi e compilare il primo programma
Risorse e strumenti utilizzati: [0] Fritzing [1] Editor online LaTeX [2] Google Pretty Print [3] FidoCadJ
Nessun commento:
Posta un commento