diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..7d8e524 --- /dev/null +++ b/Readme.md @@ -0,0 +1,104 @@ +# Control de LED de usuario por medio de script en Python + +El objetivo de este script en Python es controlar uno de los LED's de usuario +integrados en la BeagleBone Black por medio de los registros del sistema. + +![BeagleBone Black y sus LED's de usuario](bbled.png) + +## Header + +En la primera línea de nuestro script se añade una línea con la dirección de los binarios +de Python, al momento en que se lea esta línea, sabrá como debe ejecutar el script +sin que lo indiquemos en la terminal, junto con la librería para reconocer los +argumentos de entrada en al terminal. De igual forma, se define la dirección del LED 3 +dónde se encuentran los registros a modificar. + +```python +#!/usr/bin/python +import sys #reconocer lo que hay en la terminal +LED_PATH = "/sys/class/leds/beaglebone:green:usr3" +``` +## Funciones + +Se tienen dos funciones: *writeLED* y *removeTrigger*. writeLED utiliza la función *open* +para abrir el archivo en el directorio definido anteriormente, como Python es un +lenguaje interpretado no es necesario definir el puntero como en C o C++. Los métodos +*.write()* y *.close()* escriben el valor que indiquemos y cierran los archivos de los registros. + +La función removeTrigger utiliza a la función writeLED para desactivar el trigger. + +```python +def writeLED(fileName, value, path=LED_PATH): + """ + Ayuda de la rutina + writeLED(fileName, value, path=LED_PATH) + """ + fo = open(path + fileName, "w") + fo.write(value) + fo.close() + return + +def removeTrigger(): + writeLED("/trigger","none") + return +``` + +## Main +Para tener accesso a los argumentos de la terminal usamos *sys*, junto con *argv* para obtener la cantidad y el valor de los mismos. + + +Al obtener la longitud de argv, sabemos si el usuario ingresó el número correcto de argumentos +el cuál es 1. + +```python +print("Starting App") + +if len(sys.argv)!=2: + print("Incorrect number of arguments") + sys.exit(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*. + +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. + +```python +if sys.argv[1] == "on": + print("LED on \n") + removeTrigger() + writeLED("/brightness", "1") + print("LED3 on \n") +elif sys.argv[1] == "off": + print("LED off \n") + removeTrigger() + writeLED("/brightness", "0") + print("LED3 off \n") +elif sys.argv[1] == "blink": + print("LED blinking \n") + writeLED("/trigger", "timer") + writeLED("/delay_on", "500") + writeLED("/delay_off", "500") +else: + print("Wrong command!!!") + +print("Script done") +``` + +## Ejecución + + +Se cambian los permisos de nuestro script. + +```bash +sudo chmod u+x led.py +``` + +Y se ejecuta con cualquiera de los arguemntos mencionados anteriormente. + +```bash +sudo ./led.py blink +``` \ No newline at end of file diff --git a/bbled.png b/bbled.png new file mode 100644 index 0000000..c7b2208 Binary files /dev/null and b/bbled.png differ