Este programa sirve para configurar un PID y un RTC desde una aplicación en android
Revision 2:ecd33165145b, committed 2019-04-19
- Comitter:
- nmirandal
- Date:
- Fri Apr 19 20:45:47 2019 +0000
- Parent:
- 1:8596494b7d9d
- Commit message:
- RTC and PID
Changed in this revision
--- a/ds3231.lib Fri Apr 05 19:38:58 2019 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -https://os.mbed.com/users/nmirandal/code/ds3231/#5166909a461b
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ds3231_RTC.lib Fri Apr 19 20:45:47 2019 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/nmirandal/code/ds3231/#5166909a461b
--- a/main.cpp Fri Apr 05 19:38:58 2019 +0000
+++ b/main.cpp Fri Apr 19 20:45:47 2019 +0000
@@ -1,18 +1,33 @@
+/***************
+
+
+ESTE PROGRAMA PUEDE SER USADO PARA CONFIGURAR UN RELOJ DE TIEMPO REAL DS3231 O
+PARA COFIGURAR UN CONTROL PID PARA UN CIRCUITO RCRC CONECTADO EN EL PIN PTE30.
+EL PROGRAMA FUE DISEÑADO PARA APERAR CON UNA APLICACIÓN DE ANDROID CREADA EN
+APP INVENTOR QUE PUEDE CONECTARSE CON LA TARJETA FRDM-KL25Z A TRAVÉZ DE UN
+MÓDULO DE BLUETOOTH CONECTADO EN EL PUERTO SERIAL UART2. CUANDO EL CELILAR SE
+CONECTA PARA CONFIGURAR EL CONTROL PID, LA TARJETA ENVÍA LAS MEDIDAS DEL VOLTAJE
+DE SALIDA DEL CIRCUITO. TANTO EN EL MODO RTC COMO EN EL MODO PID, LOS DATOS
+SE MUESTRAN EN UNA PANTALLA LDC.
+
+NEFER MIRANDA LLORENTE
+PROGRAMA DE INGENIERÍA DE CONTROL
+UNIVERSIDAD NACIONAL DE COLOMBIA - SEDE MEDELLÍN
+
+
+***************/
+
+
+
+
#include "mbed.h"
#include <stdio.h>
-#include "ds3231.h"
+#include "ds3231_RTC.h"
#include "TextLCD.h"
Serial master(USBTX,USBRX);// Tx, Rx Computador
Serial GSM(PTE22,PTE23);// Tx, Rx Módulo de bluetooth
-Ds3231 rtc(A4, A5);
-
-
-/*
-DigitalOut LedVerde(LED2);
-DigitalOut LedRojo(LED1);
-DigitalOut LedAzul(LED3);
-*/
+Ds3231 rtc(A4, A5); // puerto I2C1 de la frdm-kl25z
int vo, hb, lb;
@@ -29,15 +44,15 @@
ds3231_calendar_t fecha= {AAAA,MM,DD,wd};//{años,mes,días,dia de semana}
-AnalogIn input(PTB1); // voltage measurement
-AnalogOut u_control(PTE30);// Input voltage for the circuit
-DigitalOut LedVerde(LED2);
+AnalogIn input(PTB1); // puerto para medir el voltaje del circuito
+AnalogOut u_control(PTE30);// puerto a través del cual se aplica una entrada al circuito
+DigitalOut LedVerde(LED2); // led indicador de estado del circuito
-TextLCD lcd(PTE5, PTE4, PTE3, PTE2, PTB11, PTB10); // rs, e, d4-d7
+TextLCD lcd(PTE5, PTE4, PTE3, PTE2, PTB11, PTB10); // conexión ldc (rs, e, d4-d7)
Timer k,t,rtc_t;
-//########### Reads a incoming chain of characters #############################
+//## Esta rutina lee una cadena de caracteres disponible en el puerto serial GSM ######
void get_chain()
{
j=0;
@@ -59,7 +74,7 @@
}
}
-//############### Removes all the data in the buffer ###########################
+//###### Esta función limpia la variable chain ########
void reset_var()
{
for (int i=0; i<sizeof(chain); i++) {
@@ -68,18 +83,20 @@
}
-//########### This function configures the RTC ################################
+//#### Esta función configura el reloj de tiempo real cuando se recibe un nuevo
+//#### dato de fecha y hora a través de bluetooth###
void set_rtc()
{
ds3231_time_t hora = {HH, mm, ss, am_pm, 1};
ds3231_calendar_t fecha= {AAAA%100,MM,DD,wd};
- if(!rtc.set_calendar(fecha)) {
+ if(!rtc.set_calendar(fecha)) { // se ejcuta si la configuración de la fecha es exitosa
+ // se imprime en la terminal del pc la fecha y hora a la cual se configuró el RTC
master.printf("\r\n\r\n Reloj Configurado el %d / %d / %d ",DD,MM,AAAA);
- if(!rtc.set_time(hora)) {
+ if(!rtc.set_time(hora)) { // se ejcuta si la configuración de la hora es exitosa
if(hora.am_pm)master.printf("a las %d:%d:%d PM\r\n\r\n\r\n",HH,mm,ss);
else master.printf("a las %d:%d:%d AM\r\n\r\n\r\n",HH,mm,ss);
}
@@ -88,10 +105,13 @@
}
-//############## This function processes the received data depending on what
-//############## it's suppoused to be for #####################################
+/* La función request() se encarga de interpretar el dato que se ha recibido
+a través del puerto serial GSM, este puede tener la función de configurar el
+modulo RTC, configurar un control PID, activar o desactivar la señal de entrada
+del circuito RCRC, o notificar si el celular se ha conectado o desconectado a
+través de bluetooth.
-
+*/
void request()
{
lcd.cls();
@@ -150,7 +170,10 @@
}
}
-//############### This is a function which manages the incoming data ###########
+/*
+Esta función es una ISR para recibir datos a través del puerto serial GSM
+
+*/
void in_data()
{
@@ -168,7 +191,7 @@
-//########################################## Main starts here ##################
+
@@ -191,32 +214,15 @@
while(1) {
- vo = input.read_u16();
- vo_hb=vo/256; //calculo la cifra mas significativa
- vo_lb=vo-vo_hb*256; //calculo la cifra menos significativa
+ vo = input.read_u16();// medición del voltaje de salida del circuito RCRC
+ vo_hb=vo/256;
+ vo_lb=vo-vo_hb*256;
GSM.putc(vo_hb);
- GSM.putc(vo_hb); //mas significativa primero, menos despues si no no funciona!!! y con la orden PUTC solo asi le envia binarios
-
- /*
- vo_lb=vo&0xFF;
- vo_hb=vo>>8;
- GSM.putc(vo_lb);
- GSM.putc(vo_hb);
+ GSM.putc(vo_hb); // envío de los datos al celular por bluetooth
- if(vo<256) { //debo generar dos casos a APP inventor solo me recibe hex asi: 0xhhhh (4 cifras)
- GSM.putc(0); //si el numero es hasta 255 se le ponen dos ceros adelante a la secuencia de bits
- GSM.putc(vo); //luego la cifra menos significativa
- }
- if(vo>255) { //pero si es mayor a 255 las cifras deben ser convertidas a un hex de dos bytes de la siguiente forma
- vo_hb=vo/256; //calculo la cifra mas significativa
- vo_lb=vo-vo_hb*256; //calculo la cifra menos significativa
- GSM.putc(vo_hb);
- GSM.putc(vo_hb); //mas significativa primero, menos despues si no no funciona!!! y con la orden PUTC solo asi le envia binarios
- }
-
- */
- if(t.read()>T && PID) {
- if(control=='N') {
+ if(t.read()>T && PID) { // PID indica que el celular se ha conectado por bluetooth
+ // en la pantalla de configuración del PID.
+ if(control=='N') { // si se recibió el comando para activar la acción de control, se ejecuta esta parte.
e=sp-1.0*input;
q0=Kp+Ki*T/2.0+Kd/T;
@@ -243,14 +249,14 @@
t.reset();
t.start();
- } else if (t.read()>T && PID) {
+ } else if (t.read()>T && !PID) {
u=0.0;
LedVerde=1.0;
- }// end for if(t.read()>T)
+ }// end for if(t.read()>T && PID)
- if(rtc_t.read()>=1.0 && CLK) {
+ if(rtc_t.read()>=1.0 && CLK) {// se muestra la fecha y hora en el lcd se recibió el comando para leer el tiempo desde el RTC
rtc.get_calendar(&fecha);
rtc.get_time(&hora);
@@ -281,7 +287,7 @@
rtc_t.start();
- } else if (rtc_t.read()>=0.1 && PID) {
+ } else if (rtc_t.read()>=0.1 && PID) { // se muestra el voltaje medido y el setpoint en el lcd si se recibió el comando de PID
lcd.locate(0,0);
lcd.printf("Voltaje: %.2f V",3.3*input.read());
@@ -290,8 +296,8 @@
rtc_t.stop();
rtc_t.reset();
rtc_t.start();
- } else if(rtc_t.read()>=1.0 && !PID && !CLK) {
- // lcd.cls();
+ } else if(rtc_t.read()>=1.0 && !PID && !CLK) { // si no se recibió ningún comando, no se hace nada.
+
}//end for if(rtc_t.read()>=1.0)