|
@ -0,0 +1,93 @@ |
|
|
|
|
|
#Control de LED Beagle Bone Black |
|
|
|
|
|
|
|
|
|
|
|
##Este programa permite encender o apagar el LED 3 de la Beagle Bone Black con |
|
|
|
|
|
un script en C. |
|
|
|
|
|
|
|
|
|
|
|
Se comienza por importat librerías y declarar el path a seguir para |
|
|
|
|
|
manipular el LED 3. |
|
|
|
|
|
```C |
|
|
|
|
|
#include<stdio.h> |
|
|
|
|
|
#include<stdlib.h> |
|
|
|
|
|
#include<string.h> |
|
|
|
|
|
#include<time.h> |
|
|
|
|
|
#define LED3_PATH "/sys/class/leds/beaglebone:green:usr3" |
|
|
|
|
|
``` |
|
|
|
|
|
Se deben definir los path de los registros a manipular. |
|
|
|
|
|
```C |
|
|
|
|
|
#define bled "/brightness" |
|
|
|
|
|
#define tled "/trigger" |
|
|
|
|
|
#define en "/delay_on" |
|
|
|
|
|
#define ap "/delay_off" |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Se generan los prototipos. |
|
|
|
|
|
```C |
|
|
|
|
|
//Protypes: |
|
|
|
|
|
void writeLED(char fileName[], char value[]); |
|
|
|
|
|
void removeTrigger(); |
|
|
|
|
|
``` |
|
|
|
|
|
Se inicia el main, donde se indica cuando comienza la aplicación, |
|
|
|
|
|
asimismo, se hace una comparación de los argumentos de entrada para |
|
|
|
|
|
determinar si se enciende, se apaga o parpadea el LED. Para el parpadeo se utilizaron |
|
|
|
|
|
los registros de timer, delay_on y delay_off. |
|
|
|
|
|
|
|
|
|
|
|
```C |
|
|
|
|
|
int main(int argc, char* argv[]){ |
|
|
|
|
|
printf("Starting app\n"); |
|
|
|
|
|
if(strcmp(argv[1],"on")==0){ |
|
|
|
|
|
printf("encendiendo LED\n"); |
|
|
|
|
|
removeTrigger(); |
|
|
|
|
|
writeLED(bled,"1"); |
|
|
|
|
|
} |
|
|
|
|
|
else if(strcmp(argv[1], "off")==0){ |
|
|
|
|
|
printf("apagando LED\n"); |
|
|
|
|
|
removeTrigger(); |
|
|
|
|
|
writeLED(bled,"0"); |
|
|
|
|
|
} |
|
|
|
|
|
else if(strcmp(argv[1],"blink")==0){ |
|
|
|
|
|
printf("blink\n"); |
|
|
|
|
|
writeLED(tled,"timer"); |
|
|
|
|
|
writeLED("en","50"); |
|
|
|
|
|
writeLED("ap","50"); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
else{ |
|
|
|
|
|
printf("comando invalido"); |
|
|
|
|
|
} |
|
|
|
|
|
printf("programa finalizado"); |
|
|
|
|
|
return 0; |
|
|
|
|
|
} |
|
|
|
|
|
``` |
|
|
|
|
|
La función que se utilizó para poder escribir a los registros del LED es la siguiente. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```C |
|
|
|
|
|
void writeLED(char fileName[], char value[]){ |
|
|
|
|
|
FILE* fp; |
|
|
|
|
|
char fullName[150]; |
|
|
|
|
|
sprintf(fullName, LED3_PATH "%s", fileName); |
|
|
|
|
|
fp = fopen(fullName, "w+"); |
|
|
|
|
|
fprintf(fp, "%s", value); |
|
|
|
|
|
fclose(fp); |
|
|
|
|
|
} |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
También fue necesario hacer una función para poder remover el trigger, la función es la siguiente. |
|
|
|
|
|
|
|
|
|
|
|
```C |
|
|
|
|
|
void removeTrigger(){ |
|
|
|
|
|
writeLED(tled, "none"); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
``` |
|
|
|
|
|
Después de esto se guarda el archivo y se le dan permisos de ejecución con el comando: |
|
|
|
|
|
|
|
|
|
|
|
```sh |
|
|
|
|
|
sudo chmod u+x Nombre_del_archivo.c |
|
|
|
|
|
``` |
|
|
|
|
|
Finalmente para ejecutar el archivo en la Beagle Bone se utiliza el siguiente comando, en este ejemplo se le da el argumento para que el LED prenda y apague: |
|
|
|
|
|
|
|
|
|
|
|
```sh |
|
|
|
|
|
sudo ./Nombre_del_archivo.c blink |
|
|
|
|
|
``` |