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