Introducción A La Programación De C++_mío.docx

  • Uploaded by: Carlis Cobos
  • 0
  • 0
  • May 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Introducción A La Programación De C++_mío.docx as PDF for free.

More details

  • Words: 2,254
  • Pages: 10
Introducción a la programación de C++ para Arduino Con el presente manual pretendo acercar al alumnado a la programación con código C++ para Arduino mediante ejemplos prácticos con dificultad creciente que permitan el entendimiento de las diferentes funciones básicas que se utilizan así como la programación de los diferentes elementos o dispositivos empleados para la automatización de proyectos simples. Comenzaremos con la declaración de variables así como definir el modo de funcionamiento de los diferentes “pines” del microcontrolador (entrada/salida, analógico, digital, etc.) y seguiremos con las funciones “FOR” e “IF”indispensables para la programación de cualquier sistema de automatización y control. Es necesario saber en primer lugar que el “grueso” de un programa en C++ consiste en tres partes fundamentales: 1) Declaración de variables 2) Definir el modo de funcionamiento de Arduino 3) Lazo de programación o bloque del programa 1. Declaración de variables La declaración de variables al comienzo del programa es de vital importancia porque no sólo nos da información acerca de para qué utilizamos cada pin del microcontrolador, sino que además nos permite identificar fácilmente el tipo de variable utilizada:  Variable tipo ENTERO int que almacena un número entero (1, 2, 3, …)  Variable tipo LARGO long que almacena un número entero con muchos dígitos (29897344, 29999881111…..)  Variable tipo FLOTANTE float que almacena un número con decimales (indispensable para trabajar con señales analógicas)  Variable tipo CONSTANTE const que almacena un valor constante por lo que la variable así definida no podrá modificar su valor durante todo el programa. También es posible declarar una variable sin asignarle un valor inicial, y hacerlo posteriormente durante el transcurso del programa: int x; … x=4; 2. Definición del modo de funcionamiento En esta parte del programa definiremos el ROL que cumple cada uno de los pines (entradas/salidas) y del microcontrolador. En caso de que se vaya a establecer una comunicación con el ordenador es necesario añadir el comando: Serial.begin(9600); donde el paréntesis indica el número de baudios (bits por segundo) a os que va a realizarse dicha comunicación Arduino-PC. 3. Bloque de programación Aquí se almacena el código de programación en base a las variables declaradas y el modo de funcionamiento del Arduino. Para poder empezar a comprender todo lo expuesto con anterioridad comenzaré con un programa simple que consiste en hacer parpadear un LED. Es obvio que en este caso vamos a trabajar con señales digitales ya que vamos a hacer que un Led pase de encendido (valor alto o 1) a apagado (valor bajo ó 0).

Cada instrucción del programa puede ir acompañada de un comentario precedido de doble barra inclinada //texto o entre barras inclinadas y asterisco en caso de ser una frase /*frase*/ Es importante destacar que es de vital importancia respetar todos los signos de puntuación que se han de emplear así como abrir y cerrar TODAS las llaves o corchetes empleados durante el desarrollo del programa.

PROGRAMA_1: PARPADEO DE UN LED 1. Declaración de variable Queremos que un LED parpadee. Como tenemos varios pines, cada uno identificado con un número entero, tendremos que declarar una variable entera para nombrarlos. Al declarar la variable, además de indicar de qué tipo se trata, podremos renombrar cada uno de los pines utilizados con nombres que identifiquen el uso que vamos a hacer de ellos para poder identificarlos en el programa fácilmente. int led = 13; //renombra el pin 13 como Led. Lo declara como variable entera. 2. Modo de funcionamiento Queremos que el pin 13 al que hemos llamado Led funcione como salida digital void setup() { pinMode(led,OUTPUT); //configura el pin 13 como salida } 3. Bloque de programación void loop() { digitalWrite(led,HIGH); //escribe un estado alto en el pin, es decir, ENCIENDE delay(250); //espera 250 milisegundos digitalWrite(led,LOW); //escribe un estado bajo en el pin, es decir, APAGA delay(250); //espera 250 milisegundos }

CONSIDERACIONES IMPORTANTES A TENER EN CUENTA. a) Cada instrucción termina con punto y coma; b) Cada bloque de programa está entre llaves { } c) Dentro de esas llaves, se ponen las instrucciones competentes con sus respectivos paréntesis ( ) que nunca hay que olvidar de cerrar. d) Nunca hay que olvidar que al principio de cada bloque de programa tiene que haber una llave abierta y cerrada al final. PROGRAMA_2: PARPADEO DE DOS LED CONSECUTIVOS int pepe=3; //renombra el pin 3 como pepe int juan=4; //renombra el pin 4 como juan void setup() { pinMode (pepe,OUTPUT); //configura el pin pepe como salida pinMode (juan,OUTPUT); //configura el pin juan como salida }

void loop() { digitalWrite(pepe,HIGH); //escribe un estado alto en el pin pepe delay(1000); //espera 1000 milisegundos digitalWrite(pepe,LOW); //escribe un estado bajo en el pin pepe delay(1000); //espera 1000 milisegundos digitalWrite(juan,HIGH); //escribe un estado alto en el pin juan delay(1000); //espera 250 milisegundos digitalWrite(juan,LOW); //escribe un estado bajo en el pin juan delay(1000); //espera 1000 milisegundos } PROGRAMA_3: SEMÁFORO int rojo=3; int amarillo=4; int verde=5; void setup() { pinMode(rojo,OUTPUT); pinMode(amarillo,OUTPUT); pinMode(verde,OUTPUT); } void loop() { digitalWrite(verde,HIGH); delay(5000); digitalWrite(verde,LOW); delay(1000); digitalWrite(verde,HIGH); delay(1000); digitalWrite(verde,LOW); delay(1000); digitalWrite(verde,HIGH); delay(1000); digitalWrite(verde,LOW); delay(1000); digitalWrite(amarillo,HIGH); delay(2000); digitalWrite(amarillo,LOW); delay(1000); digitalWrite(rojo,HIGH); delay(5000); digitalWrite(rojo,LOW); delay(1000); } --------------------------------------------------------------------------------------------------Hasta ahora se han abordado proyectos básicos basados únicamente en salidas digitales. A continuación se incorporarán entradas digitales para ver cómo se expresa en el código de programación la lectura del estado de las entradas que condicionarán el estado de las salidas correspondientes.

Entradas digitales Para implementar una entrada digital, por ejemplo un interruptor, es necesario indicar en el bloque de programación qué pin o pines se van a utilizar como entradas y qué valores toman por lo que al en este caso es necesario decir: x=digitalRead (3); Que significa que x toma el valor alto o bajo que lee el pin 3. Cualquier sensor que pueda tomar dos valores distintos High/Low, (1/0) puede emplearse como entrada digital. Un ejemplo sería un sensor de presencia. La variable x se podrá haber declarado al principio como int, const, etc. PROGRAMA_4: ENCENDIDO LED CON INTERRUPTOR int led=13; // Declara el pin 13 como variable entera de nombre led int pulsador=4; // Declara el pin 4 como variable entera de nombre pulsador void setup() { pinMode(led, OUTPUT); // Indica que la variable led es una salida pinMode(pulsador, INPUT); // Indica que la variable pulsador es una entrada } void loop() { digitalWrite(led,digitalRead(pulsador)); // Indica que la variable led va a tomar el valor lógico que lea en la variable pulsador. } ---------------------------------------------------------------------------------------------------------FUNCIONES Las funciones son operaciones necesarias para establecer condiciones al funcionamiento del programa así como reducir el número de líneas de programa existentes que ralentizan su ejecución. Antes de comenzar con las funciones es necesario conocer los operadores que son necesarios para poder establecer las condiciones que se han de cumplir. Operadores de comparación x == n //x es igual a n x != n //x es distinto de n xn //x es mayor que n x <=n //x es menor o igual que n x >= n //x es mayor o igual que n x < n || x > m //x es menor que n o mayor que m x == n && z <= m //x es igual a n y z es menor o igual que m !x>n //x no es mayor que n (si es menor o igual que n) Operadores aritméticos Los operadores aritméticos que se incluyen en el entorno de programación son suma, resta, multiplicación y división. Estos devuelven la suma, diferencia, producto, o cociente (respectivamente) de dos operandos. y = y + 3; x = x - 7; i = j * 6; r = r / 5;

Asignaciones compuestas x ++ // igual que x = x + 1, o incrementar x en + 1 x -- // igual que x = x - 1, o decrementar x en -1 x += y // igual que x = x + y, o incrementra x en +y x -= y // igual que x = x - y, o decrementar x en -y x *= y // igual que x = x * y, o multiplicar x por y x /= y // igual que x = x / y, o dividir x por y Por ejemplo, x * = 3 hace que x se convierta en el triple del antiguo valor x y por lo tanto x es reasignada al nuevo valor. Función FOR La declaración for se usa para repetir un bloque de sentencias encerradas entre llaves un número determinado de veces. Cada vez que se ejecutan las instrucciones del bucle se vuelve a testear la condición. La declaración for tiene tres partes separadas por (;) Vemos el ejemplo de su sintaxis: for (inicialización; condición; expresión) { Ejecuta Instrucciones; } PROGRAMA_5: ENCENDIDO Y APAGADO LEDS CONSECUTIVOS ASCENDENTE int i=2; int LED_1=2; int LED_2=3; int LED_3=4; int LED_4=5; int LED_5=6; int LED_6=7; void setup() { pinMode(LED_1,OUTPUT); pinMode(LED_2,OUTPUT); pinMode(LED_3,OUTPUT); pinMode(LED_4,OUTPUT); pinMode(LED_5,OUTPUT); pinMode(LED_6,OUTPUT); } void loop() { for(i=2; i<=7; i++) {digitalWrite(i,HIGH); digitalWrite(i-1,LOW); delay(1000); } digitalWrite(LED_6,LOW); }

PROGRAMA_6: ENCENDIDO Y APAGADO LEDS CONSECUTIVOS ASCENDENTE Y DESCENDENTE int i=2; int LED_1=2; int LED_2=3; int LED_3=4; int LED_4=5; int LED_5=6; int LED_6=7; void setup() { pinMode(LED_1,OUTPUT); pinMode(LED_2,OUTPUT); pinMode(LED_3,OUTPUT); pinMode(LED_4,OUTPUT); pinMode(LED_5,OUTPUT); pinMode(LED_6,OUTPUT); } void loop() { for(i=2; i<=7; i++) {digitalWrite(i,HIGH); digitalWrite(i-1,LOW); delay(100); } { digitalWrite(LED_6,LOW); } for(i=7; i>=2; i--){ digitalWrite(i,HIGH); digitalWrite(i+1,LOW); delay(100); } } -------------------------------------------------------------------------------------Función IF If es un estamento que se utiliza para probar si una determinada condición se ha alcanzado, en cuyo caso se ejecutan una serie de declaraciones. if (unaVariable == valor) //Condición que se ha de cumplir { Ejecuta Instrucciones; } Función IF(Condición){Ejecuta instrucción 1} ELSE{ Ejecuta instrucción 2} Esta combinación se traduce por: si se cumple ……. Ocurre esto, si no se cumple…, ocurre esto otro. if (inputPin == HIGH) { instrucción A; } else{instrucción B; }

//ejecuta A si se cumple la condición

//ejecuta B si no se cumple la condición

PROGRAMA_7: ENCENDIDO Y APAGADO UN LED CON PULSADOR (IF-ELSE) const int led_A=13; const int pulsador=7; int val=0; //variable que va a leer el estado del pin de entrada void setup() { pinMode(led_A, OUTPUT); pinMode(pulsador, INPUT); } void loop() { val=digitalRead(pulsador); //Comprueba si el pulsador está activo if(val==HIGH){ digitalWrite(led_A,HIGH); } else { digitalWrite(led_A,LOW); } } PROGRAMA_8: ENCENDIDO Y APAGADO DOS LEDS CON PULSADOR (IF – ELSE) const int led_A=13; const int led_R=12; const int pulsador=7; int val=0; //variable que va a leer el estado del pin de entrada void setup() { pinMode(led_A, OUTPUT); pinMode(led_R,OUTPUT); pinMode(pulsador, INPUT); } void loop() { val=digitalRead(pulsador); //Comprueba si el pulsador está activo if(val==HIGH){ digitalWrite(led_A,HIGH); digitalWrite(led_R,LOW); } else { digitalWrite(led_A,LOW); digitalWrite(led_R,HIGH); } } ----------------------------------------------------------------------------------------Otra variante es la siguiente: if (cond1) {…} else if (cond2) {…} … else {…} if (condición1) {…} else if (condición2) {…} else if (condición3) {…} … else if (condiciónN) {…} else {…}

La única precaución a tomar en esta estructura es que no haya dos condiciones que sean compatibles, es decir: todas las condiciones deben ser excluyentes (en caso de haber más de una condición verdadera, Arduino ejecutará la primera que encuentre). Función WHILE Un bucle del tipo while es un bucle de ejecución continua mientras se cumpla la expresión colocada entre paréntesis en la cabecera del bucle. Para salir del bucle es necesario que la variable de prueba cambie. La situación podrá cambiar a expensas de una expresión dentro el código del bucle o también por el cambio de un valor en una entrada de un sensor. While (unaVariable < 200) // testea si es menor que 200 { instrucciones; // ejecuta las instrucciones entre llaves unaVariable++; // incrementa la variable en 1 } PROGRAMA_9: PARPADEO LED MIENTRAS ACCIONO PULSADOR const int pulsador = 12; const int led= 4; void setup() { pinMode(pulsador, INPUT); pinMode(led, OUTPUT); } void loop() { digitalWrite(led,digitalRead(pulsador)); while (digitalRead(pulsador) == HIGH) { digitalWrite(led, HIGH); delay(1000); digitalWrite(led, LOW); delay(1000); } } ------------------------------------------------------------------------------------------------------------Arrays Un array es un conjunto de valores a los que se accede con un número índice. Cualquier valor puede ser recogido haciendo uso del nombre de la matriz y el número del índice. El primer valor de la matriz es el que está indicado con el índice 0. Un array tiene que ser declarado siempre ya que es una declaración de variables. int miArray[] = {valor1, valor2, valor3...} posición 0, posición 1, posición 2…. Un array puede ser declarado de dos formas: int miArray[5];

// Declara un array de 5 valores enteros y 4 posiciones

miArray[3] = 10;

// Asigna el valor 10 a la posición 2

Para leer de un array basta con escribir el nombre y la posición a leer: x = miArray[3];

// x ahora es igual a 10 que está en la posición 2 del array

Las matrices se utilizan a menudo para estamentos de tipo bucle, en los que la variable de incremento del contador del bucle se utiliza como índice o puntero del array. El siguiente ejemplo usa una matriz para el parpadeo de un LED.

PROGRAMA_10: PARPADEO 3 LEDS CONSECUTIVOS CON ARRAY int Array[3]={1,2,3}; int valor1[3]={1,0,0}; int valor2[3]={0,1,0}; int valor3[3]={0,0,1}; int valor4[3]={0,0,0}; int i=0; void setup() { for (i=0;i<3;i++) { pinMode(Array[i],OUTPUT); } } void loop() { for (i=0;i<3;i++){ digitalWrite (Array[i],valor1[i]); delay (1000); } for (i=0;i<3;i++){ digitalWrite (Array[i],valor2[i]); delay (1000); } for (i=0;i<3;i++){ digitalWrite (Array[i],valor3[i]); delay (1000); } for (i=0;i<3;i++){ digitalWrite (Array[i],valor4[i]); delay (1000); } }

PROGRAMA_11: ENCENDIDO 5 LEDS ASCENDIENDO Y POSTERIOR APAGADO DESCENDIENDO CON ARRAY int ledArray_Asc[5]={1,2,3,4,5}; int ledArray_Des[5]={5,4,3,2,1}; int valorArray_1[5]={1,1,1,1,1}; int valorArray_2[5]={0,0,0,0,0}; void setup() { for (int i=0;i<5;i++) { pinMode (ledArray_Asc[i],OUTPUT); } } void loop() { for (int i=0;i<5;i++) { DigitalWrite (ledArray_Asc[i],valorArray_1[i]); delay(1000); } for (int i=0;i<5;i++) {digitalWrite (ledArray_Des[i],valorArray_2[i]); delay (1000); } }

Related Documents

De La A A La Z
December 2019 39
Excel De La A A La Z
November 2019 37
Partes De La A
May 2020 13
Historia De La A
June 2020 15
Partes De La A
April 2020 11

More Documents from ""