|
|
- # Control de LED Beagle Bone Black
-
- ## Este programa permite encender, apagar o hacer parpadear los LED de la Beagle Bone Black con un script en C++.
- ![](leds.png)
-
- ## Archivo led.h
- Para este proyecto se creó un archivo header llamado led.h, donde se declara CLED como una clase, se declara el class creator y el class desconstructor y también se declaran los distintos métodos que puede utilizar.
- ```cpp
- 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
- };
- ```
-
- ## Archivo led.cpp
- El archivo led.cpp es el archivo que contiene el código principal. Se comienza por importat librerías y declarar el path a seguir para
- manipular los LEDs.
- ```cpp
- /* led.cpp */
- #include"led.h"
- #include<iostream>
- #include<fstream>
- #include<string>
- #include<sstream>
- #define LED_PATH "/sys/class/leds/beaglebone:green:usr"
- ```
-
-
-
- El método para poder escribir a los LED es el siguiente:
- ```cpp
- 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:
- ```cpp
- void CLED::RemoveTrigger(){
- WriteLED("/trigger", "none");
- }
-
- ```
- Los métodos para encender, apagar y parpadear son los siguientes:
- ```cpp
- 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.
-
- ```cpp
- 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) };
- ````
- Si se desea controlar un solo LED simplemente se remplaza la letra "i" por el número del LED que se quiere controlar.
- ```cpp
- 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 << "Para encender el LED utilice: ./leds on" << std::endl;
- std::cout << "Para apagar el LED utilice: ./leds off" << std::endl;
- std::cout << "Para hacer parpadear el LED utilice: sudo ./leds blink" << std::endl;
- }
- }
- std::cout << "programa terminado" << std::endl;
- return 0;
-
- }
- ```
- ## Compilación y ejecución.
- 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.
-
- ```cpp
-
- 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
- ```
- Para encender el LED utilice:
- ```sh
- ./leds on
- ```
- Para apagar el LED utilice:
- ```sh
- ./leds off
- ```
|