Filtro CPL Polarizado ventajas

Programar Arduino desde editor VIM o NVIM - Makefile

How to program Arduino with VIM or NVIM- Makefile

Bienvenidos a mi nuevo post!


En este apartado les quiero compartir una curiosa manera de programar nuestro Arduino usando el editor de textos Vim o Nvim, cualquera de los dos casos funciona de la misma manera, incluso Vi.
Aparece una pregunta, ¿Porque hacerlo de éste manera, si se puede hacer con el IDE de Arduino?. La respuesta es sencilla, para hacerlo mas divertido y vernos mas interesantes a la hora de estar programando y compilando.

La librería que debemos usar para lograr nuestro objetivo la podemos conseguir en el siguiente Link:
La descargamos y descomprimimos el archivo.
Lo iré explicando con imágenes, daré por hecho que se tienen conocimientos básicos de Linux.


Yo he creado una carpeta en /home/user/Documentos/programming/arduino y dentro de esa carpeta he extraído el archivo descargado, en dicha dirección voy creando carpetas de cada proyecto Arduino, en el caso de matriz_keyboard_LCD y one_arduino.

La carpeta que descargamos debe contener los siguientes archivos:
No debemos modificar nada de los archivos. Sólo debemos copiar la ruta del archivo Arduino.mk, ya que dicho archivo contiene toda la configuración para cumplir nuestra fantasía. 

Cada proyecto que se quiera trabajar recomiendo que se meta dentro de una carpeta, en mi caso mostraré el ejemplo de la carpeta matriz_keyboard_LCD, dicha carpeta debe contener sólo el código y el Makefile, obviamente el código debe tener extensión .ino y los archivos Makefile no tienen extensión. En mi caso tengo una carpeta build_uno y monitor.exe, la carpeta build_uno se crea al momento de compilar el código, y el archivo monitor.txt son notitas de comandos para no olvidarlos. 


El código es sobre la lectura de teclas desde el teclado matriz 4 x 4, dichas teclas se captura y se compara con una contraseña guardada en dicho código y se muestra un mensaje en la pantalla LCD, si es correcta o no. La longitud de la contraseña a comparar es de 5 caracteres.  Como pueden ver se necesitan de tres librerías para el proyecto.

#include <SPI.h>
#include <Keypad.h>
#include <LiquidCrystal.h>

const byte rowsCount = 4;
const byte columsCount = 4;
const char pass[] = "56713";
char pass_enter[] = "00000";

char keys[rowsCount][columsCount] = {
  { '1', '2', '3', 'A' },
  { '4', '5', '6', 'B' },
  { '7', '8', '9', 'C' },
  { '*', '0', '#', 'D' }
};

const byte rowPins[rowsCount] = { 9, 8, 7, 6 };
const byte columnPins[columsCount] = { 5, 4, 3, 2 };

Keypad keypad = Keypad(makeKeymap(keys), rowPins, columnPins, rowsCount, columsCount);

LiquidCrystal lcd(10);

void setup() {
  // set up the LCD's number of columns and rows:
  Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.print("Teclee password>");
  lcd.setCursor(0, 1);
}

int cont = 0;
int verdad = 0;

char uno, dos, tres, cuatro, cinco;
boolean u = false, d = false, t = false, c = false, ci = false;

void loop() {
  char key = keypad.getKey();

  if (key) {
    Serial.print(key);
    if (u == false) {
      uno = key;
      u = true;
    } else if (d == false) {
      dos = key;
      d = true;
    } else if (t == false) {
      tres = key;
      t = true;
    } else if (c == false) {
      cuatro = key;
      c = true;
    } else if (ci == false) {
      cinco = key;
      ci = true;
    }

    if (cont == 5) {
      
      pass_enter[0] = uno;
      pass_enter[1] = dos;
      pass_enter[2] = tres;
      pass_enter[3] = cuatro;
      pass_enter[4] = cinco;
      lcd.setCursor(0, 1);
      for (int i = 0; i < 5; i++) {
        if (pass[i] == pass_enter[i]) {
          verdad++;
        }
      }
      cont = 0;
      if (verdad == 5) {
        lcd.print("Clave Correcta!!");
        delay(1000);
        verdad = 0;
        for(int i = 0; i<17;i++){
          lcd.setCursor(i, 1);
          lcd.print("_");
        }
        
      } else {
        verdad = 0;
        lcd.print("Clave incorrecta!!");
        delay(1000);
        for(int i = 0; i <17;i++){
          lcd.setCursor(i, 1);
          lcd.print("_");
        }
        
      }
      u = false;
      d = false;
      t = false;
      c = false;
      ci = false;
      lcd.setCursor(0, 1);
    } else {
      
      
      cont++;
      lcd.print(key);
    }


  }
} 
Por tanto necesitamos saber la ruta de dichas librerías, también necesitamos saber la ruta de nuestro IDE de Arduino.

Todas las rutas las debemos especificar en nuestro Makefile:

 ARDUINO_DIR  -  Ruta donde está nuestro IDE Arduino
ARDMK_DIR - Ruta de nuestro archivo Arduino.mk ( archivo que descargamos)
BOARD_TAG - indicamos el tipo de placa arudino, en mi caso es UNO
ARDUINO_LIBS - Las librerías de nuestro proyecto separadas por espacios
USER_LIB_PATH - ruta de nuestras librerías
ARDUINO_PLATFORM_LIB_PATH - Ruta de otras librerías 
El último comando es absolutamente necesario, si en su caso no necesitan ninguna librería entonces no es necesario especificar las rutas de las librerías, sólo especificarían el ARDUINO_DIR, ARDMK_DIR, BOARD_TAG y la última instrucción.

Teniendo esto, ya esta listo para compilar. Tenemos los siguientes comandos, dependiendo el caso:
>make - compila el código
>make upload - carga el código a la placa Arduino

Compilamos...
Tendremos la siguiente salida:
Si no tenemos errores, así se verá. 
Posiblemente haya errores que la placa de Arduino no tiene permisos o el dispositivo USB no tiene permisos. El mismo make nos indicará donde está el error. 
Para solucionar el problema de permisos de puerto de Arduino:
> sudo chmod 777 /dev/ttyCM0
En mi caso ttyCM0 es el puerto USB que me da Linux, el de ustedes puede variar.

Ya que lo compilamos lo cargamos a la placa Arduino:
>make upload
Si todo esta bien, nos saldrá algo similar a la imagen anterior. Para este momento ya se estará ejecutando en la placa Arduino. 😎

Si queremos sacar nuestra ventana de Monitor Serial hay que teclear el siguiente comando:

 gnome-terminal -- bash -c "make monitor"

De esta manera se abrirá otra terminal pero Serial. Si en caso nos marque error, seguro es porque no tendrás instalado el programa screen, para instalarlo hay que teclear el siguiente comando:

sudo apt-get install screen

Y nuevamente tecleamos el comando:

gnome-terminal -- bash -c "make monitor"

Esto es todo!
Cualquier duda, sugerencia o comentario dejarlo a: ivanthebest10@gmail.com 

tags:

Programar Arduino desde editor VIM o NVIM 
Arduino con NVIM 
Arduino Makefile Nvim
Nvim Arduino Makefile
Make Arduino

Comentarios

Publicar un comentario