You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

150 lines
4.0 KiB

  1. # Control de LED Beagle Bone Black
  2. ## Este programa permite encender, apagar o hacer parpadear los LED de la Beagle Bone Black con un script en C++.
  3. ![](leds.png)
  4. ## Archivo led.h
  5. 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.
  6. ```cpp
  7. class CLED{
  8. private:
  9. std::string path;
  10. int ledNumber;
  11. virtual void WriteLED(std::string filename, std::string value);
  12. virtual void RemoveTrigger();
  13. public:
  14. CLED(int ledNumber); //class creator
  15. virtual void TurnOn();
  16. virtual void TurnOff();
  17. virtual void blink();
  18. virtual ~CLED(); //class deconstructor
  19. };
  20. ```
  21. ## Archivo led.cpp
  22. 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
  23. manipular los LEDs.
  24. ```cpp
  25. /* led.cpp */
  26. #include"led.h"
  27. #include<iostream>
  28. #include<fstream>
  29. #include<string>
  30. #include<sstream>
  31. #define LED_PATH "/sys/class/leds/beaglebone:green:usr"
  32. ```
  33. El método para poder escribir a los LED es el siguiente:
  34. ```cpp
  35. void CLED::WriteLED(std::string filename, std::string value){
  36. std::ofstream fs;
  37. fs.open((path+filename).c_str());
  38. fs << value;
  39. fs.close();
  40. }
  41. ```
  42. El método para poder eliminar el trigger es el siguiente:
  43. ```cpp
  44. void CLED::RemoveTrigger(){
  45. WriteLED("/trigger", "none");
  46. }
  47. ```
  48. Los métodos para encender, apagar y parpadear son los siguientes:
  49. ```cpp
  50. void CLED::TurnOn(){
  51. std::cout << "LED" << ledNumber << "on" << std::endl;
  52. RemoveTrigger();
  53. WriteLED("/brightness", "1");
  54. }
  55. void CLED::TurnOff(){
  56. std::cout << "LED" << ledNumber << "off" << std::endl;
  57. RemoveTrigger();
  58. WriteLED("/brightness","0");
  59. }
  60. void CLED::blink(){
  61. std::cout << "LED" << ledNumber << "blinking" << std::endl;
  62. WriteLED("/trigger", "timer");
  63. WriteLED("/delay_on", "50");
  64. WriteLED("/delay_off", "50");
  65. }
  66. ```
  67. Se inicia el main, donde se indica cómo ejecutar la aplicación, también se manda
  68. un mensaje indicando que comienza la aplicación,
  69. asimismo, se hace una comparación de los argumentos de entrada para
  70. determinar si se enciende, se apaga o parpadea los LED.
  71. ```cpp
  72. int main(int argc, char* argv[]){
  73. if(argc!=2){
  74. std::cout << "Para usarse es: makeLEDS <comand>" << std::endl;
  75. std::cout << "los comandos son on, off y blink" << std::endl;
  76. }
  77. std::cout << "Starting app" << std::endl;
  78. std::string cmd(argv[1]);
  79. // se crean 4 objetos de LED y se ponen en el array para controlar todos los LEDS.
  80. CLED leds[4]= {CLED(0), CLED(1), CLED(2), CLED(3) };
  81. ````
  82. Si se desea controlar un solo LED simplemente se remplaza la letra "i" por el número del LED que se quiere controlar.
  83. ```cpp
  84. for(int i=0; i<=3; i++){
  85. if(cmd=="on")leds[i].TurnOn();
  86. else if(cmd=="off")leds[i].TurnOff();
  87. else if(cmd=="blink")leds[i].blink();
  88. else{std::cout << "comando invalido" << std::endl;
  89. std::cout << "Para encender el LED utilice: ./leds on" << std::endl;
  90. std::cout << "Para apagar el LED utilice: ./leds off" << std::endl;
  91. std::cout << "Para hacer parpadear el LED utilice: sudo ./leds blink" << std::endl;
  92. }
  93. }
  94. std::cout << "programa terminado" << std::endl;
  95. return 0;
  96. }
  97. ```
  98. ## Compilación y ejecución.
  99. Se creó un archivo que se puede ejecutar para compilar, eliminar archivos antiguos de led
  100. y para hacer un debug, este archivo se llama mkefile.
  101. ```cpp
  102. all:
  103. g++ main.cpp -o led led.cpp
  104. clean:
  105. rm led
  106. debug:
  107. g++ -g main.cpp -o led led.cpp
  108. ```
  109. También se puede compilar desde la terminal con el siguiente comando:
  110. ```sh
  111. sudo g++ led.cpp -o leds
  112. ```
  113. 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:
  114. ```sh
  115. sudo ./leds blink
  116. ```
  117. Para encender el LED utilice:
  118. ```sh
  119. ./leds on
  120. ```
  121. Para apagar el LED utilice:
  122. ```sh
  123. ./leds off
  124. ```