módulo bluetooth para comunicación de KL25Z midiendo corriente a través de una sonda amperimétrica con Android App neurGAI

Dependencies:   BluetoothSoftSerial SoftSerial mbed

http://www.ehu.eus/ehusfera/neurgai/

Revision:
0:d01d10e9aca5
Child:
1:9f267ca79300
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Dec 09 11:19:28 2015 +0000
@@ -0,0 +1,120 @@
+#include "mbed.h"
+#include "BluetoothSerial.h"        // en esta librería se ha modificado la clase Serial a SoftSerial para permitir 
+                                    // la comunicación con Seeed Bluetooth Shield a través de SoftSerial sin utilizar una UART del micro
+                                    
+                                    //para habilitar conexión serie con linux, ejecutar:
+                                    // sudo rfcomm bind /dev/rfcomm0 [MAC address] 1
+                                    // sudo putty
+
+Ticker medidor;
+
+AnalogIn sonda(A2);                     // la sonda amperimétrica debe conectarse entre los pines A2 y PTE30
+AnalogOut salida_offset(PTE30);
+
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+
+BluetoothSerial serialBluetoothShield(D5, D4);       // TX, RX      Comunicación con Seeed-Bluetooth-Shield
+//Serial pc(USBTX, USBRX); // tx, rx
+
+int frecuencia_muestreo = 5000;
+int numero_muestra = 0;
+float valor_muestra;
+float v_offset = 0;
+float v_offset_medido = 0;
+float potencia = 0;
+float potencia_medida = 0;
+float potencia_230V =0;
+float corriente_medida = 0;
+bool medido = false;
+
+void medir()
+{
+    numero_muestra++;
+    valor_muestra = sonda.read();
+    v_offset = v_offset + valor_muestra;
+    potencia = potencia + pow((valor_muestra - v_offset_medido), 2);
+    if (numero_muestra == frecuencia_muestreo)  // hemos llegado a un segundo
+    {
+        potencia_medida = potencia / frecuencia_muestreo;
+        corriente_medida = sqrt(potencia_medida);
+        v_offset_medido = v_offset / frecuencia_muestreo;
+        v_offset = 0;
+        potencia = 0;
+        numero_muestra = 0;
+        led3 = !led3;   // conmuta LED azul
+        medido = true;
+    }
+}
+
+void flushSerialBuffer()
+{
+    char char1;
+    while (serialBluetoothShield.readable()) {
+        char1 = serialBluetoothShield.getc();
+    }
+    return;
+}
+
+int main() {
+    //pc.printf("Apaga los leds\r\n");
+    led1 = 1;   // led rojo apagado
+    led2 = 1;   // led verde apagado
+    led3 = 1;   // led azul apagado
+    
+    //configura el offset de voltaje a sumar a la sonda
+    //pc.printf("Configura el offset de voltaje a sumar a la sonda\r\n");
+    salida_offset = 0.5;
+    float pendiente = 176.7513075208;
+    float offset = 0;
+    
+    //apaga todos los LEDs
+    led1 = 0;   // led rojo encendido
+    led2 = 1;   // led verde apagado
+    led3 = 1;   // led azul apagado
+    
+    //configura el Bluetooth Shield
+    //pc.printf("Configura el Bluetooth Shield\r\n");
+    serialBluetoothShield.setup();
+    serialBluetoothShield.slave("neurGAI");  // default PIN code: 0000
+    wait(2);
+    
+    led1 = 1;   // rojo apagado
+    led3 = 0;   // azul encendido
+    
+    serialBluetoothShield.connect();
+    wait(2);
+    
+    led3 = 1;   // azul apagado
+    led2 = 0;   // verde encendido
+    
+    flushSerialBuffer();
+    wait(2); // This delay is required.
+    
+    while (!serialBluetoothShield.writeable());  // espera a que se pueda escribir
+    led2 = 1;   // apaga el led verde
+    wait(1);
+    
+    // asigna la función medir al temporizador con intervalo 50 us
+    //pc.printf("Asigna la funcion medir al temporizador con intervalo 50 us\r\n");
+    medidor.attach(&medir, 1.0/frecuencia_muestreo);
+ 
+    // spin in a main loop. medidor will interrupt it to call medir
+    float t = 0;
+    int tiempo = 0;
+    while(1)
+    {
+        if (medido)
+        {
+            medidor.detach();
+            potencia_230V = (corriente_medida * pendiente + offset) * 230;
+            serialBluetoothShield.printf("#%i€%f*\r\n", tiempo, potencia_230V);
+            //pc.puts("Dato enviado\r\n");
+            medido = false;
+            t = t + 1;
+            tiempo++;
+            medidor.attach(&medir, 1.0/frecuencia_muestreo);
+        }
+    }
+}
\ No newline at end of file