|
|
@ -0,0 +1,135 @@ |
|
|
|
#Control de LED Beagle Bone Black |
|
|
|
|
|
|
|
##Este programa permite encender o apagar todos los LED de la Beagle Bone Black con |
|
|
|
un script en C++. |
|
|
|
|
|
|
|
Se comienza por importat librerías y declarar el path a seguir para |
|
|
|
manipular los LEDs. |
|
|
|
```C++ |
|
|
|
/* led.cpp */ |
|
|
|
#include"led.h" |
|
|
|
#include<iostream> |
|
|
|
#include<fstream> |
|
|
|
#include<string> |
|
|
|
#include<sstream> |
|
|
|
#define LED_PATH "/sys/class/leds/beaglebone:green:usr" |
|
|
|
``` |
|
|
|
Se creó un archivo de libreria llamado led.h, donde se declara CLED como una clase |
|
|
|
y también se declaran los distinto métodos que puede utilizar. |
|
|
|
```C++ |
|
|
|
class CLED{ |
|
|
|
private: |
|
|
|
std::string path; |
|
|
|
int ledNumber; |
|
|
|
virtual void WriteLED(std::string filename, std::string value); |
|
|
|
virtual void RemoveTrigger(); |
|
|
|
public: |
|
|
|
CLED(int ledNumber); //class creator |
|
|
|
virtual void TurnOn(); |
|
|
|
virtual void TurnOff(); |
|
|
|
virtual void blink(); |
|
|
|
virtual ~CLED(); //class deconstructor |
|
|
|
}; |
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
El método para poder escribir a los LED es el siguiente: |
|
|
|
```C |
|
|
|
void CLED::WriteLED(std::string filename, std::string value){ |
|
|
|
std::ofstream fs; |
|
|
|
fs.open((path+filename).c_str()); |
|
|
|
fs << value; |
|
|
|
fs.close(); |
|
|
|
} |
|
|
|
|
|
|
|
``` |
|
|
|
|
|
|
|
El método para poder eliminar el trigger es el siguiente: |
|
|
|
```C++ |
|
|
|
void CLED::RemoveTrigger(){ |
|
|
|
WriteLED("/trigger", "none"); |
|
|
|
} |
|
|
|
|
|
|
|
``` |
|
|
|
Los métodos para encender, apagar y parpadear son los siguientes: |
|
|
|
```C++ |
|
|
|
void CLED::TurnOn(){ |
|
|
|
std::cout << "LED" << ledNumber << "on" << std::endl; |
|
|
|
RemoveTrigger(); |
|
|
|
WriteLED("/brightness", "1"); |
|
|
|
} |
|
|
|
|
|
|
|
void CLED::TurnOff(){ |
|
|
|
std::cout << "LED" << ledNumber << "off" << std::endl; |
|
|
|
RemoveTrigger(); |
|
|
|
WriteLED("/brightness","0"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void CLED::blink(){ |
|
|
|
std::cout << "LED" << ledNumber << "blinking" << std::endl; |
|
|
|
WriteLED("/trigger", "timer"); |
|
|
|
WriteLED("/delay_on", "50"); |
|
|
|
WriteLED("/delay_off", "50"); |
|
|
|
|
|
|
|
} |
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Se inicia el main, donde se indica cómo ejecutar la aplicación, también se manda |
|
|
|
un mensaje indicando que comienza la aplicación, |
|
|
|
asimismo, se hace una comparación de los argumentos de entrada para |
|
|
|
determinar si se enciende, se apaga o parpadea los LED. |
|
|
|
|
|
|
|
```C++ |
|
|
|
int main(int argc, char* argv[]){ |
|
|
|
if(argc!=2){ |
|
|
|
std::cout << "Para usarse es: makeLEDS <comand>" << std::endl; |
|
|
|
std::cout << "los comandos son on, off y blink" << std::endl; |
|
|
|
} |
|
|
|
std::cout << "Starting app" << std::endl; |
|
|
|
std::string cmd(argv[1]); |
|
|
|
|
|
|
|
// se crean 4 objetos de LED y se ponen en el array para controlar todos los LEDS. |
|
|
|
CLED leds[4]= {CLED(0), CLED(1), CLED(2), CLED(3) }; |
|
|
|
|
|
|
|
for(int i=0; i<=3; i++){ |
|
|
|
if(cmd=="on")leds[i].TurnOn(); |
|
|
|
else if(cmd=="off")leds[i].TurnOff(); |
|
|
|
else if(cmd=="blink")leds[i].blink(); |
|
|
|
else{std::cout << "comando invalido" << std::endl;} |
|
|
|
} |
|
|
|
std::cout << "programa terminado" << std::endl; |
|
|
|
return 0; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
``` |
|
|
|
Se creó un archivo que se puede ejecutar para compilar, eliminar archivos antiguos de led |
|
|
|
y para hacer un debug, este archivo se llama mkefile. |
|
|
|
|
|
|
|
|
|
|
|
```C++ |
|
|
|
|
|
|
|
all: |
|
|
|
g++ main.cpp -o led led.cpp |
|
|
|
|
|
|
|
clean: |
|
|
|
rm led |
|
|
|
|
|
|
|
debug: |
|
|
|
g++ -g main.cpp -o led led.cpp |
|
|
|
``` |
|
|
|
|
|
|
|
También se puede compilar desde la terminal con el siguiente comando: |
|
|
|
|
|
|
|
```sh |
|
|
|
sudo g++ led.cpp -o leds |
|
|
|
``` |
|
|
|
Finalmente para ejecutar el archivo en la Beagle Bone se utiliza el siguiente comando, en este ejemplo se le da el argumento para que los LED prenda y apague: |
|
|
|
|
|
|
|
```sh |
|
|
|
sudo ./leds blink |
|
|
|
``` |