diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..3d70cb0 --- /dev/null +++ b/Readme.md @@ -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 +#include +#include +#include +#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 " << 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 +```