Browse Source

Readme.me modified

master
Gustavo Martinez 2 years ago
parent
commit
c17a388ad1
1 changed files with 130 additions and 3 deletions
  1. +130
    -3
      Readme.md

+ 130
- 3
Readme.md View File

@ -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<stdio.h>
#include<stdlib.h>
#include<string.h>
```
### 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
```

Loading…
Cancel
Save