Vous êtes sur la page 1sur 19

.

REPORTE

UNIDAD
3

ALUMNO
LUIS ALBERTO SALINAS DIEGO

DOCENTE
M. EN M. JOSÉ MIGUEL HERNÁNDEZ PAREDES
1

RESUMEN DE LA REALIZACIÓN DEL EXAMEN


En el presente reporte se presenta el desarrollo del examen correspondiente a la unidad 3 de programación
avanzada, el cual consistió en realizar un control de temperatura on-off (histéresis) para una casa domótica,
el cual fue realizado con el uso de microcontroladores para la la etapa de control eléctrica de un foco para
calentar la casa, un ventilador para enfriarla, y sensores de temperatura y humedad para medir las
variables, con esto se creó una interfaz en visual studio para el control indirecto del sistema, todo esto fue
posible gracias a la comunicación serie (RS-232) para enviar y recibir datos.

MODO AUTOMÁTICO

EXAMEN UNIDAD 3 – COMUNICACIÓN SERIAL RS-232


INGENIERÍA MECATRÓNICA
2

HISTÉRESIS 30-35 GRADOS CENTÍGRADOS

EXAMEN UNIDAD 3 – COMUNICACIÓN SERIAL RS-232


INGENIERÍA MECATRÓNICA
3

MODO MANUAL

EXAMEN UNIDAD 3 – COMUNICACIÓN SERIAL RS-232


INGENIERÍA MECATRÓNICA
4

EXAMEN UNIDAD 3 – COMUNICACIÓN SERIAL RS-232


INGENIERÍA MECATRÓNICA
5

CODIGO PIC CCS COMPILER

#include <PA_EXAMEN_U3.h>
#include <lcd.c>
#include <DHT11LIB.c>
#include <EXAMLIB.c>

//VARIABLES GLOBALES
unsigned int inData[RX_SIZE] = {0,0,0}; //DATOS A RECIBIR
unsigned int outData[TX_SIZE] = {0,0,0,0,0,0}; //DATOS DE SALIDA
int index = 0; //INDICE DE RX-TX
unsigned char status = 0; //ESTADO DEL DHT11
float ch0 = 0; //CANAL
float tempLM35 = 0; //TEMPERATURA LM35
char *temp_b; //VARIABLE PUNTERO PARA SEPARAR EL FLOAT EN 4 CHAR BYTES
char Foco, Ventilador, Modo;
int j=0;

//INTERRUPCION POR RECEPCION EN EL PUERTO SERIAL RX


#INT_RDA
void RDA_isr(void) {
inData[index] = getc();
index++;
if(index >= RX_SIZE) {
index = 0;

EXAMEN UNIDAD 3 – COMUNICACIÓN SERIAL RS-232


INGENIERÍA MECATRÓNICA
6

for(int i = 0; i < TX_SIZE; i++) {


putc(outData[i]);
}
}
}

/*
#INT_TIMER1
void TIMER1_isr(void){
j++;
if(j==20){
output_toggle(STATUS_LED);
set_timer1(48868);
j=0;
}
}*/

//PROGRAMA PRINCIPAL
void main() {
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_INTERNAL|ADC_TAD_MUL_0);
//setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); //32.7 ms overflow
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
//enable_interrupts(INT_TIMER1);
dht11_init(); //INICIAR EL DHT11
lcd_init(); //INICIAR LA LCD 16x2

lcd_gotoxy(1,1);
printf(lcd_putc,"\fPROGRA. AV. EU3");
lcd_gotoxy(1,2);
printf(lcd_putc," COM. SERIAL");
delay_ms(1000);
printf(lcd_putc,"\f");

while(TRUE) {
output_toggle(STATUS_LED);
status = get_data(); //OBTENER EL ESTADO DEL DHT11
switch(status){
case 1:
break;
case 2:
//lcd_putc("\fNO HAY SENSOR!");
break;
case 3:
//lcd_putc("\fERROR CHECKSUM");
break;
default:
/*lcd_gotoxy(1, 1);
printf(lcd_putc, "\fTEMP= %u\337C %u", values[2], inData[0]);

EXAMEN UNIDAD 3 – COMUNICACIÓN SERIAL RS-232


INGENIERÍA MECATRÓNICA
7

lcd_gotoxy(1, 2);
printf(lcd_putc, "HUMR= %u%% %u", values[0], inData[1]);*/
break;
}
ch0 = getVoltage(0);
tempLM35 = ch0*100;
char *temp_b = float2bytes(tempLM35);

//DATOS LM35
outData[0] = temp_b[0];
outData[1] = temp_b[1];
outData[2] = temp_b[2];
outData[3] = temp_b[3];

//DATOS DHT11
outData[4] = values[2]; //TEMPERATURA
outData[5] = values[0]; //HUMEDAD

Modo = inData[0];
Ventilador = inData[1];
Foco = inData[2];

printf(lcd_putc,"\fRX= %u %u %u", inData[0], inData[1], inData[2]);

if (ventilador == 1) {
output_high(PIN_VENTILADOR);
}
else{
output_low(PIN_VENTILADOR);
}
if (foco == 1) {
output_high(PIN_FOCO);
}
else{
output_low(PIN_FOCO);
}
delay_ms(1100);
}
}
CÓDIGO VISUAL STUDIO

#include "PA_EXAMEN_U3.h"
#include "CLASE_SERIAL_COM.h" //LIBRERIA COMUNICACIÓN SERIAL
#include "qdebug.h"
#include <qtimer.h>
#include <QtCore>

//INSTANCIA DE CLASES
SERIAL* SP;
QTimer *timer;

EXAMEN UNIDAD 3 – COMUNICACIÓN SERIAL RS-232


INGENIERÍA MECATRÓNICA
8

//VARIABLES GLOBALES
int readResult = 0; //Leer byte
float TempLM35 = 0.0; //TEMP LM35
float TempDHT11 = 0.0; //TEMP DHT11
float HumRDHT11 = 0.0; //HUMR DHT11
int nCiclos = 0; //NUM DE CICLOS
float vectorTempLM35[10000] = { 0 }; //VECTOR DE DATOS
float vectorTempDHT11[10000] = { 0 }; //VECTOR DE DATOS
float vectorHumRDHT11[10000] = { 0 }; //VECTOR DE DATOS
float vectorDatosFull[10000][3] = { 0 }; //VECTOR DE DATOS FULL
bool EstadoComm = false; //ESTADO COMUNICACION
int Puerto; //PUERTO
int Bandera = 0; //BANDERA ACCIONES

//CONSTRUCTOR
PA_EXAMEN_U3::PA_EXAMEN_U3(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);

//BOTONES UI
connect(ui.pb_Configurar, SIGNAL(clicked()), this, SLOT(CONFIGURAR_PUERTO()));
connect(ui.pb_Iniciar, SIGNAL(clicked()), this, SLOT(INICIAR_COMUNICACION()));
connect(ui.pb_Detener, SIGNAL(clicked()), this, SLOT(DETENER_COMUNICACION()));
connect(ui.actionGuardar, SIGNAL(triggered()), this, SLOT(GUARDAR_DATOS()));
connect(ui.actionAcerca_de, SIGNAL(triggered()), this, SLOT(ACERCA_DE()));
connect(ui.actionSalir, SIGNAL(triggered()), this, SLOT(SALIR()));
}

//DESTRUCTOR
PA_EXAMEN_U3::~PA_EXAMEN_U3() {
SP->~SERIAL();
Sleep(100);
QMessageBox::warning(this, "Advertencia", "Puerto Serial Cerrado.");
//qDebug("\nPUERTO SERIAL CERRADO... LISTO PARA LA SIGUIENTE LLAMADA\n");
}

//FUNCIONES BOTONES
void PA_EXAMEN_U3::CONFIGURAR_PUERTO() {
//CONFIGURAR PUERTO
Puerto = ui.cb_port->currentIndex();
switch (Puerto) {
case 0:
SP = new SERIAL("\\\\.\\COM1");
break;
case 1:
SP = new SERIAL("\\\\.\\COM2");
break;
case 2:

EXAMEN UNIDAD 3 – COMUNICACIÓN SERIAL RS-232


INGENIERÍA MECATRÓNICA
9

SP = new SERIAL("\\\\.\\COM3");
break;
case 3:
SP = new SERIAL("\\\\.\\COM4");
break;
case 4:
SP = new SERIAL("\\\\.\\COM5");
break;
case 5:
SP = new SERIAL("\\\\.\\COM6");
break;
case 6:
SP = new SERIAL("\\\\.\\COM7");
break;
case 7:
SP = new SERIAL("\\\\.\\COM8");
break;
case 8:
SP = new SERIAL("\\\\.\\COM9");
break;
case 9:
SP = new SERIAL("\\\\.\\COM10");
break;
}

if (SP->IsConnected()) {
//qDebug("\nSE HA ESTABLECIDO LA COMUNICACION SERIAL :)");
ui.statusBar->showMessage("Se ha establecido la Comunicacion Serial.");
QMessageBox::information(this, "Informacion", "Se ha establecido la Comunicacion Serial.",
"Aceptar");
EstadoComm = true;

ui.cb_Muestras_inf->setEnabled(1);
ui.sb_Muestras->setEnabled(1);
ui.sb_Periodo_Muestreo->setEnabled(1);
ui.pb_Iniciar->setEnabled(1);
ui.cb_Modo->setEnabled(1);
}
else {
//qDebug("\nNO SE HA ESTABLECIDO LA COMUNICACION SERIAL :(");
ui.statusBar->showMessage("No se ha podido establecer la Comunicacion Serial.");
QMessageBox::warning(this, "Informacion", "No se ha podido establecer la Comunicacion Serial.
Puerto no encontrado.", "Aceptar");
}
}
void PA_EXAMEN_U3::INICIAR_COMUNICACION() {
if (EstadoComm == true) {
//qDebug() << "\n***********INICIANDO ADQUISICION DE DATOS**********\n";
ui.statusBar->showMessage("Iniciada Adquisicion de Datos");

EXAMEN UNIDAD 3 – COMUNICACIÓN SERIAL RS-232


INGENIERÍA MECATRÓNICA
10

//RESTABLECER VARIABLES
vectorTempLM35[10000] = { 0 };
vectorTempDHT11[10000] = { 0 };
vectorHumRDHT11[10000] = { 0 };
vectorDatosFull[10000][3] = { 0 };

//LIMPIAR GRAFICAS
ui.grafica_serial->clearGraphs();
ui.grafica_serial->replot();
ui.grafica_serial_2->clearGraphs();
ui.grafica_serial_2->replot();

//HABILITAR/DESHABILITAR ELEMENTOS
ui.pb_Iniciar->setDisabled(1);
ui.cb_Modo->setDisabled(1);
ui.cb_baud_rate->setDisabled(1);
ui.cb_port->setDisabled(1);
ui.sb_Periodo_Muestreo->setDisabled(1);
ui.sb_Muestras->setDisabled(1);

int TiempoCiclo = ui.sb_Periodo_Muestreo->value();

timer = new QTimer(this);

if (!ui.cb_Modo->isChecked()) {
connect(timer, SIGNAL(timeout()), this, SLOT(INTERRUPCION_TIMER_AUTO()));
timer->start(TiempoCiclo);
}
else {
connect(timer, SIGNAL(timeout()), this, SLOT(INTERRUPCION_TIMER_MANUAL()));
timer->start(TiempoCiclo);
}
ui.pb_Detener->setEnabled(1);
}
}
void PA_EXAMEN_U3::INTERRUPCION_TIMER_AUTO() {
//qDebug() << "\n**********CICLO MODO AUTOMATICO (DEFAULT)**********\n";
ui.statusBar->showMessage("Modo Automatico.");

//VARIABLES
int periodo = ui.sb_Periodo_Muestreo->value();
int muestras = ui.sb_Muestras->value();
int TempMax = ui.spinBox->value();
int TempMin = ui.spinBox_2->value();

//HAB/DESHABILITAR OBJETOS
ui.spinBox->setEnabled(1);
ui.spinBox_2->setEnabled(1);

//COMUNICACION_SERIAL

EXAMEN UNIDAD 3 – COMUNICACIÓN SERIAL RS-232


INGENIERÍA MECATRÓNICA
11

char inData[RX_SIZE] = { 0, 0, 0, 0 };
char outData[TX_SIZE] = { 0, 0, 0 };

//ACCIONES MODO AUTOMATICO


outData[0] = 0; //ID MODO 0=AUTO 1=MANUAL

if (TempLM35 >= TempMax) {


outData[1] = 1; //VENTILADOR
outData[2] = 0; //FOCO

Bandera = 3;
}
else {
if (Bandera > 2) {
if (TempLM35 <= TempMin) {
outData[1] = 0; //VENTILADOR
outData[2] = 1; //FOCO

Bandera = 1;
}
else {
outData[1] = 1; //VENTILADOR
outData[2] = 0; //FOCO
}
}
else {
outData[1] = 0; //VENTILADOR
outData[2] = 1; //FOCO
}

//ENVIAR Y RECIBIR DATOS


SP->WriteData(outData, TX_SIZE);
Sleep(1);
readResult = SP->ReadData(inData, RX_SIZE);

/*for (int i = 0; i < RX_SIZE; i++) {


qDebug() << (quint8)inData[i];
}*/

//VARIABLES DE ENTRADA
TempLM35 = bytesToFloat(inData[0], inData[1], inData[2], inData[3]);
TempDHT11 = inData[4];
HumRDHT11 = inData[5];

ui.lcd_Temperatura_1->display(TempLM35);
ui.lcd_Temperatura_2->display(TempDHT11);
ui.lcd_Humedad->display(HumRDHT11);

EXAMEN UNIDAD 3 – COMUNICACIÓN SERIAL RS-232


INGENIERÍA MECATRÓNICA
12

//GUARDAR DATOS EN EL VECTOR


vectorTempLM35[nCiclos] = TempLM35;
vectorTempDHT11[nCiclos] = TempDHT11;
vectorHumRDHT11[nCiclos] = HumRDHT11;

qDebug() << "\nTEMP. LM35= " << TempLM35 << "TEMP. DHT11= " << TempDHT11 << "HUMR. DHT11= "
<< HumRDHT11;
qDebug() << "NUM. CICLOS =" << nCiclos << "\n";

//GRAFICAR TEMPERATURA LM35


QVector<double> x1(muestras), y1(muestras);
for (int i = 0; i < muestras; i++) {
x1[i] = i;
y1[i] = vectorTempLM35[i];
}
ui.grafica_serial->addGraph();
ui.grafica_serial->graph(0)->setData(x1, y1);
ui.grafica_serial->graph(0)->setPen(QPen(Qt::red));
ui.grafica_serial->xAxis->setLabel("Muestras");
ui.grafica_serial->yAxis->setLabel("Temperatura (Grados Centigrados C)");
ui.grafica_serial->xAxis->setRange(0, muestras);
ui.grafica_serial->yAxis->setRange(0, 100);
ui.grafica_serial->replot();

//GRAFICAR TEMPERATURA DHT11


QVector<double> x2(muestras), y2(muestras);
for (int i = 0; i < muestras; i++) {
x2[i] = i;
y2[i] = vectorTempDHT11[i];
}
ui.grafica_serial->addGraph();
ui.grafica_serial->graph(1)->setPen(QPen(Qt::blue));
ui.grafica_serial->graph(1)->setData(x2, y2);
ui.grafica_serial->replot();

//GRAFICAR HUMEDAD DHT11


QVector<double> x3(muestras), y3(muestras);
for (int i = 0; i < muestras; i++) {
x3[i] = i;
y3[i] = vectorHumRDHT11[i];
}
ui.grafica_serial_2->addGraph();
ui.grafica_serial_2->graph(0)->setData(x3, y3);
ui.grafica_serial_2->graph(0)->setPen(QPen(Qt::green));
ui.grafica_serial_2->xAxis->setLabel("Muestras");
ui.grafica_serial_2->yAxis->setLabel("Humedad Relativa (Porcentaje %)");
ui.grafica_serial_2->xAxis->setRange(0, muestras);
ui.grafica_serial_2->yAxis->setRange(0, 100);
ui.grafica_serial_2->replot();

EXAMEN UNIDAD 3 – COMUNICACIÓN SERIAL RS-232


INGENIERÍA MECATRÓNICA
13

nCiclos++; //INCREMENTAR NUMERO DE CICLOS

//TERMINAR LA ADQUISICION
if (nCiclos == ui.sb_Muestras->value()) {
DETENER_COMUNICACION();

//GUARDAR LAS VARIABLES EN UNA SOLA MATRIZ


for (int i = 0; i < nCiclos; i++) {
for (int j = 0; j < 3; j++) {
switch (j) {
case 0:
vectorDatosFull[i][j] = vectorTempLM35[i];
break;
case 1:
vectorDatosFull[i][j] = vectorTempDHT11[i];
break;
case 2:
vectorDatosFull[i][j] = vectorHumRDHT11[i];
break;
}
}
}
//qDebug() << "DATOS" << vectorDatosFull[nciclos-1][0] << vectorDatosFull[nciclos-1][1] <<
vectorDatosFull[nciclos-1][2];
}
}
void PA_EXAMEN_U3::INTERRUPCION_TIMER_MANUAL() {
//qDebug() << "\n*****************CICLO MODO MANUAL*****************\n";
ui.statusBar->showMessage("Modo Manual.");

//VARIABLES
int periodo = ui.sb_Periodo_Muestreo->value();
int muestras = ui.sb_Muestras->value();

//HABILITAR/DESHABILITAR OBJETOS
ui.pb_Iniciar->setDisabled(1);
ui.cb_Modo->setDisabled(1);
ui.cb_Salida_11->setEnabled(1);
ui.cb_Salida_12->setEnabled(1);
ui.cb_Salida_13->setEnabled(1);
ui.cb_Salida_14->setEnabled(1);
ui.cb_Salida_15->setEnabled(1);
ui.spinBox->setDisabled(1);
ui.spinBox_2->setDisabled(1);

//COMUNICACION_SERIAL
char inData[RX_SIZE] = { 0, 0, 0, 0 };
char outData[TX_SIZE] = { 0, 0, 0 };

//ACCIONES MODO MANUAL

EXAMEN UNIDAD 3 – COMUNICACIÓN SERIAL RS-232


INGENIERÍA MECATRÓNICA
14

outData[0] = 1;

if (ui.cb_Salida_11->isChecked()) {
outData[2] = 1; //FOCO
}
else {
outData[2] = 0; //FOCO
}
if (ui.cb_Salida_12->isChecked()) {
outData[1] = 1; //VENTILADOR
}
else {
outData[1] = 0; //VENTILADOR
}

//ENVIAR Y RECIBIR DATOS


SP->WriteData(outData, TX_SIZE);
Sleep(1);
readResult = SP->ReadData(inData, RX_SIZE);

/*for (int i = 0; i < RX_SIZE; i++) {


qDebug() << (quint8)inData[i];
}*/

//VARIABLES DE ENTRADA
TempLM35 = bytesToFloat(inData[0], inData[1], inData[2], inData[3]);
TempDHT11 = inData[4];
HumRDHT11 = inData[5];

//MOSTRAR EN LOS DISPLAYS


ui.lcd_Temperatura_1->display(TempLM35);
ui.lcd_Temperatura_2->display(TempDHT11);
ui.lcd_Humedad->display(HumRDHT11);

//MOSTRAR EN EL MONITOR SERIAL


QString TextTemp = QString::number(TempLM35) + QString::number(TempDHT11) +
QString::number(HumRDHT11);
ui.TX->setText(TextTemp);

//GUARDAR DATOS EN EL VECTOR


vectorTempLM35[nCiclos] = TempLM35;
vectorTempDHT11[nCiclos] = TempDHT11;
vectorHumRDHT11[nCiclos] = HumRDHT11;

//qDebug() << "\nTEMP. LM35= " << TempLM35 << "TEMP. DHT11= " << TempDHT11 << "HUMR. DHT11=
" << HumRDHT11;
qDebug() << "NUM. CICLO=" << nCiclos << "\n";

//GRAFICAR TEMPERATURA LM35


QVector<double> x1(muestras), y1(muestras);

EXAMEN UNIDAD 3 – COMUNICACIÓN SERIAL RS-232


INGENIERÍA MECATRÓNICA
15

for (int i = 0; i < muestras; i++) {


x1[i] = i;
y1[i] = vectorTempLM35[i];
}
ui.grafica_serial->addGraph();
ui.grafica_serial->graph(0)->setData(x1, y1);
ui.grafica_serial->graph(0)->setPen(QPen(Qt::red));
ui.grafica_serial->xAxis->setLabel("Muestras");
ui.grafica_serial->yAxis->setLabel("Temperatura (Grados Centigrados C)");
ui.grafica_serial->xAxis->setRange(0, muestras);
ui.grafica_serial->yAxis->setRange(0, 100);
ui.grafica_serial->replot();

//GRAFICAR TEMPERATURA DHT11


QVector<double> x2(muestras), y2(muestras);
for (int i = 0; i < muestras; i++) {
x2[i] = i;
y2[i] = vectorTempDHT11[i];
}
ui.grafica_serial->addGraph();
ui.grafica_serial->graph(1)->setPen(QPen(Qt::blue));
ui.grafica_serial->graph(1)->setData(x2, y2);
ui.grafica_serial->replot();

//GRAFICAR HUMEDAD DHT11


QVector<double> x3(muestras), y3(muestras);
for (int i = 0; i < muestras; i++) {
x3[i] = i;
y3[i] = vectorHumRDHT11[i];
}
ui.grafica_serial_2->addGraph();
ui.grafica_serial_2->graph(0)->setData(x3, y3);
ui.grafica_serial_2->graph(0)->setPen(QPen(Qt::green));
ui.grafica_serial_2->xAxis->setLabel("Muestras");
ui.grafica_serial_2->yAxis->setLabel("Humedad Relativa (Porcentaje %)");
ui.grafica_serial_2->xAxis->setRange(0, muestras);
ui.grafica_serial_2->yAxis->setRange(0, 100);
ui.grafica_serial_2->replot();

nCiclos++; //INCREMENTAR NUMERO DE CICLOS

//TERMINAR LA ADQUISICION
if (nCiclos == ui.sb_Muestras->value()) {
DETENER_COMUNICACION();

//GUARDAR LAS VARIABLES EN UNA SOLA MATRIZ


for (int i = 0; i < nCiclos; i++) {
for (int j = 0; j < 3; j++) {
switch (j) {
case 0:

EXAMEN UNIDAD 3 – COMUNICACIÓN SERIAL RS-232


INGENIERÍA MECATRÓNICA
16

vectorDatosFull[i][j] = vectorTempLM35[i];
break;
case 1:
vectorDatosFull[i][j] = vectorTempDHT11[i];
break;
case 2:
vectorDatosFull[i][j] = vectorHumRDHT11[i];
break;
}
}
}
//qDebug() << "DATOS" << vectorDatosFull[nciclos-1][0] << vectorDatosFull[nciclos-1][1] <<
vectorDatosFull[nciclos-1][2];
}
}
void PA_EXAMEN_U3::DETENER_COMUNICACION(){
timer->stop(); //DETENER EL TIMER

//HAB/DES OBJETOS
ui.pb_Iniciar->setEnabled(1);
ui.cb_Modo->setEnabled(1);
ui.cb_baud_rate->setEnabled(1);
ui.cb_port->setEnabled(1);
ui.sb_Periodo_Muestreo->setEnabled(1);
ui.sb_Muestras->setEnabled(1);
ui.pb_Configurar->setDisabled(1);
ui.cb_baud_rate->setDisabled(1);
ui.cb_port->setDisabled(1);
ui.pb_Detener->setDisabled(1);

//RESTABLECER VALORES
ui.lcd_Temperatura_1->display(0);
ui.lcd_Temperatura_2->display(0);
ui.lcd_Humedad->display(0);

//qDebug() << "\n******************CICLO TERMINADO******************\n";


ui.statusBar->showMessage("Ha terminado la adquisicion de datos.");
QMessageBox::information(this, "Informacion", "La adquisicion de datos ha terminado correctamente.");
}
void PA_EXAMEN_U3::GUARDAR_DATOS() {
//VENTANA GUARDAR
QString nombreArchivoDatos = QFileDialog::getSaveFileName(
this,
tr("Guardar Archivo"),
"Datos.txt",
"Archivo de Texto (*.txt);;Todos los Archivos (*.*)"
);
//CONDICIONES
if (!nombreArchivoDatos.isEmpty()) {
QFile archivoDatos(nombreArchivoDatos);

EXAMEN UNIDAD 3 – COMUNICACIÓN SERIAL RS-232


INGENIERÍA MECATRÓNICA
17

if (!archivoDatos.open(QIODevice::WriteOnly | QIODevice::Text)) {
QMessageBox::critical(this, "Error", tr("No se ha guardado el archivo. %l.\nError: %2",
"Aceptar")
.arg(nombreArchivoDatos).arg(archivoDatos.errorString()));
}
else {
QTextStream out(&archivoDatos); //ESCRITURA DE LOS DATOS
float tiempo = 0, datos1 = 0, datos2 = 0, datos3 = 0;
QString datosf, datoss, datost;
for (int i = 0; i < nCiclos; i++) {
tiempo = i;
for (int j = 0; j < 3; j++) {
switch (j) {
case 0:
datos1 = vectorDatosFull[i][j];
datosf = QString::number(datos1);
out << datosf << "\t";
break;
case 1:
datos2 = vectorDatosFull[i][j];
datoss = QString::number(datos2);
out << datoss << "\t";
break;
case 2:
datos3 = vectorDatosFull[i][j];
datost = QString::number(datos3);
out << datost << "\n";
break;
}
}
}
}
archivoDatos.flush(); //ESPERAR AL ARCHIVO
archivoDatos.close(); //CERRAR EL ARCHIVO
QMessageBox::information(this, "Informacion", "El Archivo se ha Guardado correctamente");
}

//RESTABLECER LAS VARIABLES


nCiclos = 0;
vectorTempLM35[10000] = { 0 };
vectorTempDHT11[10000] = { 0 };
vectorHumRDHT11[10000] = { 0 };
vectorDatosFull[10000][3] = { 0 };

//AVISOS Y MENSAJES
ui.statusBar->showMessage("Se ha guardado el archivo.");
Sleep(2000);
ui.statusBar->showMessage(nombreArchivoDatos);
}
void PA_EXAMEN_U3::ACERCA_DE() {

EXAMEN UNIDAD 3 – COMUNICACIÓN SERIAL RS-232


INGENIERÍA MECATRÓNICA
18

QMessageBox::about(this, "Acerca de", "Programacion Avanzada.");


}
void PA_EXAMEN_U3::SALIR() {
this->close();
}

//FUNCIONES
float PA_EXAMEN_U3::bytesToFloat(uchar b3, uchar b2, uchar b1, uchar b0) {
float output;

*((uchar*)(&output) + 3) = b0;
*((uchar*)(&output) + 2) = b1;
*((uchar*)(&output) + 1) = b2;
*((uchar*)(&output) + 0) = b3;

return output;
}

EXAMEN UNIDAD 3 – COMUNICACIÓN SERIAL RS-232


INGENIERÍA MECATRÓNICA