Implementación de Funciones Estadísticas y Uso de Interrupciones en Arduino
Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones
Escrito el en español con un tamaño de 5,56 KB
#include <iostream>
#include <math.h>
using namespace std;
bool mayor(int a, int b)
{
if (a > b)
return true;
else
return false;
}
void ordenarLista(int v[], int n)
{
int aux;
for (int i = 0; i < n; i++) // Con este bucle empezamos a ver el vector desde la primera posicion
{
for (int j = 0; j < n - i - 1; j++) // Con este bucle empezamos a ver el vector desde la segunda posicion
{
if (v[j] > v[j + 1]) // Comparamos el primer numero con el segundo del vector y si el primero
{ // es mayor que el segundo se desplaza a la derecha y asi hasta que el vector este ordenado
aux = v[j];
v[j] = v[j + 1];
v[j + 1] = aux;
}
}
}
}
int moda (int v[], int n, int &m)
{
int val = 0, n2 = 0, nvalores = 0;
for (int i = 0; i < n - 1; i++)
{
}
for (int j = i + 1; j < n; j++)//buscamos las repeticiones del valor en el array.
{
if (v[i] == v[j])//Si los números son iguales
{
val = v[i];
nvalores++;// aumentamos
}
}
if (nvalores >= n2)//guardamos el valor con mayor frecuencia
{
n2 = nvalores;
m = val;
}
nvalores = 0;//inicializamos a 0
}
return n2 + 1;// Devolvemos el valor de la cuenta más el primer valor comparado.
}
float valorCentral(int v[], int n)
{
float valor = 0;
if (n % 2 != 0)
valor = (float) v[(n / 2)];
else
valor = (float)(v[n / 2 - 1] + v[(n / 2)]) / 2;
return valor;
}
float mediana(int v[], int n)
{
float f = 0;
ordenarLista(v, n);
f = valorCentral(v, n);
return f;
}
int promedio(int v[], int n)
{
int i, acum = 0;
for (i = 0; i < n; i++)
acum += v[i];
return acum / i;
}
Los microprocesadores incorporan el concepto de interrupción, que es un mecanismo que permite asociar una función a la ocurrencia de un determinado evento. Cuando ocurre el evento el procesador “sale” inmediatamente del flujo normal del programa y ejecuta la función ISR asociada ignorando por completo cualquier otra tarea (por esto se llama interrupción). Al finalizar la función ISR asociada, el procesador vuelve al flujo principal, en el mismo punto donde había sido interrumpido.
Arduino dispone de dos tipos de eventos en los que definir interrupciones. Por un lado tenemos las interrupciones de timers. Por otro lado, tenemos las interrupciones de hardware, que responden a eventos ocurridos en ciertos pines físicos.
Dentro de las interrupciones de hardware, que son las que nos ocupan en esta entrada, Arduino es capaz de detectar los siguientes eventos.
- RISING, ocurre en el flanco de subida de LOW a HIGH.
- FALLING, ocurre en el flanco de bajada de HIGH a LOW.
- CHANGING, ocurre cuando el pin cambia de estado
- LOW, se ejecuta continuamente mientras está en estado LOW.