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