Aplicación final: luces centelleantes

Finalmente realizaremos una bonita aplicación que consiste en que se enciendan sucesivamente los LEDs en secuencia. Para ello realizaremos un programa en el espacio de usuario (el normal) con el que escribiremos al dispositivo /dev/puertopar un sólo bit de forma sucesiva.

  <<luces.c>>=

#include <stdio.h>
#include <unistd.h>


int main() { 
  unsigned char byte,dummy;
  FILE * PUERTOPAR;

  /* Abrimos el dispositivo puertopar */
  PUERTOPAR=fopen("/dev/puertopar","w");
  /* Eliminamos el buffer del fichero */
  setvbuf(PUERTOPAR,&dummy,_IONBF,1);

  /* Iniciamos la variable a uno */
  byte=1;

  /* Realizamos el bucle indefinido */
  while (1) { 
    /* Escribimos al puerto paralelo */
    /* para encender un LED */
    printf("Byte vale %d\n",byte);
    fwrite(&byte,1,1,PUERTOPAR);
    sleep(1);

    /* Actualizamos el valor de byte */
    byte<<=1;
    if (byte == 0) byte = 1;
  }

  fclose(PUERTOPAR);

}

Lo compilamos de la forma habitual

$ gcc -o luces luces.c

y lo ejecutamos con el comando

$ luces

¡Las luces se encenderán una por una secuencialmente!