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