From c17a388ad17f4048ac6c0f5d882d387dbc2385e4 Mon Sep 17 00:00:00 2001 From: Gustavo Martinez Date: Sat, 14 May 2022 14:29:40 -0500 Subject: [PATCH] Readme.me modified --- Readme.md | 133 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 130 insertions(+), 3 deletions(-) diff --git a/Readme.md b/Readme.md index 6e72606..d489ca1 100644 --- a/Readme.md +++ b/Readme.md @@ -1,7 +1,134 @@ -# Control de LED de usuario por medio de script en Control de LED de usuario por medio de script en +# Control de LED de usuario por medio de script en C El objetivo de este script en lenguaje C es controlar uno de los LED's de usuario -integrados en la BeagleBone Black por medio delos registros del sistema. +integrados en la BeagleBone Black por medio de los registros del sistema. -![BeagleBone Black y sus LED's de usuario](/bbled.png) +![BeagleBone Black y sus LED's de usuario](bbled.png) +## Header +### Librerías +En el encabezado de nuestro script se importan las librerías necesarias para +realizar las operaciones de entrada y salida en la terminal de la Beaglebone, manejo de archivos, +así como otras operaciones estandar y el manejo de strings. + +```C +#include +#include +#include +``` + +### Registros del LED 3 de usuario +Se define la dirección dónde se encuentran los registros del LED 3 +que modificaremos para controlar su estado. + +```C +#define LED3_PATH "/sys/class/leds/beaglebone:green:usr3" +#define bled "/brightness" +#define tled "/trigger" +``` +### Prototipos de funciones +Se establecen los prototipos de las funciones que usaremos: +la función que modificará los registros del LED y la que deshabilitará +el trigger. + +```C +void writeLED(char fileName[], char value[]); +void removeTrigger(); +``` + +## Main + +En nuestro ciclo principal las argumentos serán *argc* y *argv*, dónde argc cuenta el número de argumentos en la terminal, +mientras argv almacena el valor de los argumentos. + +argc nos ayudará a determinar si el usario ingresó el número correcto de argumentos +a nuestra función siendo este 1. + +```C +int main(int argc, char* argv[]){ + printf("Starting app \n"); + + if(argc!=2){ + printf("Incorrect number of arguments"); + return 2; + } +``` + +Se utiliza un ciclo if para seleccionar la acción del LED, comparando el valor +de argumento en la terminal con unos comandos definidos: ***on***, ***off*** y ***blink*** + +Para prender o apagar el LED, se deshabilita el trigger y se modifica el registro de *brightness*. + +```C + if(strcmp(argv[1], "on")==0){ + printf("LED on \n"); + removeTrigger(); + writeLED(bled, "1"); + printf("Done"); + } + + else if (strcmp(argv[1], "off")==0){ + printf("LED off \n"); + removeTrigger(); + writeLED(bled, "0"); + printf("Done"); + } +``` +En el caso del parpadeo del LED, el trigger se modifica para activar el timer +y se utilizan los registro de *delay_on* y *delay_off* para establecer +el tiempo de encendido y apagado. + +```C + else if (strcmp(argv[1], "blink")==0){ + printf("LED blinking \n"); + writeLED(tled, "timer"); + writeLED("/delay_on", "500"); + writeLED("/delay_off", "500"); + } + + else + printf("Invalid command!\n"); + + return 0; +} +``` + +## Funciones +Se desarrollan las funciones anterior mente mencionadas, para esto se +necesita un puntero de archivo fp y la función fopen de las librerías +que importamos, el argumento de la función será el directorio y los +registros que definimos en el encabezado. + +```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); +} + +void removeTrigger(){ + writeLED(tled, "none"); +} +``` + +## Ejecución + +Se compila el archivo main.c + +``` +gcc main.c -o led +``` + +Se cambian los permisos de nuestro ejecutable. +``` +sudo chmod u+x led +``` + +Y se ejecuta con cualquiera de los arguemntos mencionados anteriormente. + +``` +sudo ./led blink +```