LED e interruttori in C

Un LED collegato al RaspBerry Pi

Attenzione

Questa pagina l'ho scritta molto tempo fa e contiene materiale obsoleto

L'uso è sconsigliato e non posso più fornire alcun supporto

Un classico: scrivere un programma che fa lampeggiare un LED! Ed il seguito (quando la fantasia domina!): accendere un LED quando si preme un pulsante. Verrà qui descritto come ottenere questo risultato usando il compilatore C e, opzionalmente, le librerie wirngPi (nota 1)

Accendere il LED

Le procedure preliminari necessarie e lo schema elettrico sono descritti in questa pagina. Se volete utilizzare NetBeans leggere inoltre questa pagina.

Un modo per interagire con GPIO è semplicemente l'inserimento delle opportune chiamate di sistema all'interno del codice C. Di seguito la "traduzione" del programma blink.sh.

pi@raspberrypi:~ $ nano blink.c

#include <unistd.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
 system ("echo 17 > /sys/class/gpio/export");
 usleep(200000);
 system ("echo out > /sys/class/gpio/gpio17/direction");

 while(1)
 {
  system ("echo 0 > /sys/class/gpio/gpio17/value"); usleep(500000);
  system ("echo 1 > /sys/class/gpio/gpio17/value"); usleep(500000);
 }

 return 0;
}

pi@raspberrypi:~ $ gcc -Wall -o blink blink.c
pi@raspberrypi:~ $ ./blink

Usare wiringPi

In alternativa, è possibile l'uso delle librerie wiringPi, in particolare delle funzioni pinMode() e digitalWrite() dall'ovvio significato. La documentazione è disponibile sul sito ufficiale.

pi@raspberrypi:~/wiringpi $ nano blink.c

#include <wiringPi.h>
int main (void)
{
 wiringPiSetup () ;
 pinMode (0, OUTPUT) ;
 for (;;)
 {
  digitalWrite (0, HIGH) ; delay (500) ;
  digitalWrite (0, LOW) ; delay (500) ;
 }
 return 0 ;
}

pi@raspberrypi:~/wiringpi $ gcc -Wall -o blink blink.c -lwiringPi

L'esecuzione del codice come utente normale potrebbe produrre su macchine non aggiornate un errore:

pi@raspberrypi:~/wiringpi $ ./blink
wiringPiSetup: Must be root. (Did you forget sudo?)

Per evitare ciò, solo se viene mostrato l'errore precedente, è necessario impostare la variabile d'ambiente WIRINGPI_GPIOMEM:

pi@raspberrypi:~/wiringpi $ export WIRINGPI_GPIOMEM=1
pi@raspberrypi:~/wiringpi $ ./blink

L'alternativa (sconsigliata) è quella di eseguire il codice come root, suggerimento presente nel messaggio di errore:

pi@raspberrypi:~/wiringpi $ sudo ./blink

Note

  1. Per utilizzare questa possibilità è necessario utilizzare una versione recente di Raspbian con supporto di gpiomem. Per verificare:
    pi@raspberry:~ $ ls -l /dev/gpiomem
    crw-rw---- 1 root gpio 244, 0 Mar 6 08:59 /dev/gpiomem


Prima di creazione di questa pagina: gennaio 2016
Ultima modifica: 15 gennaio 2018


Licenza "Creative Commons" - Attribuzione-Condividi allo stesso modo 3.0 Unported


Pagina principaleAccessibilitàNote legaliPosta elettronicaXHTML 1.0 StrictCSS 3

Vai in cima