domingo, 19 de agosto de 2018

Definiendo el Sketch

El sketch ó boceto es el programa que vamos a escribir para que lleve a cabo las operaciones, cálculos, condiciones y demás, en programación las cosas están muy ordenadas de hecho tuve un profesor de programación que rezaba lo siguiente: "La programación es una forma de vida" En Arduino y Processing el scketch tiene una estructura básica claramente definida:
- Declaración de variables y constantes
- Inicialización de las mismas
- Cuerpo principal del programa
- Funciones del programa principal
Veamos cada uno de estos puntos...
En programación el uso de variables es algo así como vital, las variables suelen ser letras o palabras a las que conferimos un valor numérico ó incluso un cálculo matemático. Su valor podrá ser modificado a lo largo del programa, lo que permite ahorrar recursos. Por su parte las CONSTANTES toman un valor único y no se podrá modificar su valor. Un ejemplo claro sería asignar a una constante llamada "PI" el valor 3.1416.
Una variable se declara la siguiente manera: byte A;
y una Constante se declara así: const byte B;
Las variables van a requerir una publicación aparte.
Esto estaría en la cabecera antes del void setup()
En la inicialización de las variables/constantes se declara su valor:
A= 125;
B= 10;
Esto estaría integrado dentro del void setup()
El cuerpo principal del programa se incluye dentro del void loop()
Aquí se escriben las instrucciones necesarias para el funcionamiento del programa. Si existieran funciones se llaman desde aquí.
Finalmente tras el void loop() se escriben las funciones que pueda requerir el programa principal.
Para tener una idea gráfica de lo explicado ver la siguiente imagen:




Y su código correspondiente:

// -------------------DECLARACION DE VARIABLES
byte b; 
int i;
long l;
float f;
double d;
boolean bol;
char ch;
String st;
int ctrl;
// -------------------INICIALIACION DE VARIABLES
void setup() { 
Serial.begin(9600);
b= 255;
i= 65767;
l= 2345678;
f= 1.23;
d= 1.2345;
bol= true;
ch= 'c';
st= "cadena";
}
// -----------------------------------------------------------------PROGRAMA PRINCIPAL
void loop() { 
controldeflujo(); // LLAMAMOS A LA FUNCION controldeflujo()
Serial.println(b); // IMPRIME POR CONSOLA EL VALOR DE b SEGUIDO DE UN SALTO DE LINEA
Serial.println(i); // IMPRIME POR CONSOLA EL VALOR DE i SEGUIDO DE UN SALTO DE LINEA
Serial.println(l); // IMPRIME POR CONSOLA EL VALOR DE l SEGUIDO DE UN SALTO DE LINEA
Serial.println(f); // IMPRIME POR CONSOLA EL VALOR DE f SEGUIDO DE UN SALTO DE LINEA
Serial.println(d); // IMPRIME POR CONSOLA EL VALOR DE d SEGUIDO DE UN SALTO DE LINEA
Serial.println(bol); // IMPRIME POR CONSOLA EL VALOR DE bol SEGUIDO DE UN SALTO DE LINEA
Serial.println(ch); // IMPRIME POR CONSOLA EL VALOR DE ch SEGUIDO DE UN SALTO DE LINEA
Serial.println(st); // IMPRIME POR CONSOLA EL VALOR DE st SEGUIDO DE UN SALTO DE LINEA
Serial.println(); // IMPRIME POR CONSOLA UN SALTO DE LINEA
ctrl++; // Esto es lo mismo que ctrl=ctrl+1; // SUMA UN VALOR A ctrl
}
//------------------------------------------------------------ FUNCIONES DEL PROGRAMA PRINCIAL
void controldeflujo(){
Serial.println(ctrl); // IMPRIME POR CONSOLA EL VALOR DE ctrl. 
}

Definiendo el Hardware

Los Pines
La tarjeta de Arduino UNO posee un total de 38 pines, de los cuales 6 de ellos (A0 - A5) son puertos analógicos; estos se emplean habitualmente como "entrada" de sensores analógicos, aunque es posible programarlo como pines digitales. La mayoría de los pines son multipropósito.

¿Digitales, Analógicos?
Una señal digital se puede definir como una señal binaria, ó vale uno ó vale cero, no tiene valores intermedios. Mientras que una señal analógica puede cubrir un amplio rango de valores, por ejemplo entre el cero y el uno; 0.12, 0.53, 0.94 etc...

¿Y en la practica, por que estas dos diferencias?
Supongamos que pretendemos leer el valor de un potenciómetro al que hemos conectado a nuestra Arduino a una tensión de 5 voltios. Al ir girando la perilla la tensión aumentará o disminuirá con un valor analógico, para poder leer su valor correctamente debemos conectarlo a un pin analógico.

Un sensor digital, podría ser un interruptor conectado a nuestra arduino, que al pulsarlo encendiera un led y al volverlo a pulsar lo apagara. en este caso solo nos interesa leer el On ó el Off. es decir un valor binario 0 ó 1. Esto es una señal digital.

12 pines digitales por ejemplo para nuestros sensores y/ó actuadores, que también son configurables. del 2 al 13.

2 pines de comunicación serial, TX y RX. El 0 y el 1, intocables si pretendemos comunicarnos con el exterior, por ejemplo la consola (imprimir datos por pantalla)

Varios pines de tensión, 5v. 3,3v. y GND

Pines de protocolo I2C, se crea un bus de comunicación al que se pueden conectar hasta mil dispositivos, cada uno toma una dirección distinta, habrá dispositivos con su dirección programable y otros que vendrán establecidos por el fabricante, en este caso habrá que conocer su dirección. un caso típico son los LCD, donde el fabricante establece su dirección y no todos los fabricantes establecen la misma dirección para el mismo modelo de LCD, ojo con esto.

Pines ISCP (In-Circuit Serial Programming) Permite programar la memoria del programa. (esto es para niveles avanzados)

Pin AREF, conversor analógico/digital
Permite crear un voltaje de referencia en circunstancias especiales, personalmente nunca lo he utilizado, aunque no estaría de mas hacer alguna practica.


Para saber más: Instalación, descarga de la aplicación, etc...