| @ -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 | |||
| ``` | |||