AguilaBoard program. No library.

Dependencies:   mbed-rtos mbed

Fork of PYL_v6 by Jonathan Moreno

Revision:
5:c52a2d06bd93
Parent:
3:5d959275ac05
Child:
6:172a750bbf33
--- a/main.cpp	Wed Jun 27 22:01:51 2018 +0000
+++ b/main.cpp	Fri Jun 29 22:29:33 2018 +0000
@@ -1,583 +1,186 @@
-#include "mbed.h"                   //Se declara la librería mbed.
+#include "mbed.h"                   // Se declara la librería mbed.
 #include "rtos.h"
 
-I2CSlave slave(p9, p10);
-DigitalOut led1(LED1);
-DigitalOut led2(LED2);
-DigitalOut led3(LED3);
-DigitalOut led4(LED4);
-Serial pc(USBTX, USBRX, 9600);      // tx, rx Conunicación Serial con la PC
-DigitalIn CTS(p7, PullUp);          // Pin Digital de entrada "CTS" en modo Pull-Up, para encontrarse normalmente a VCC cuando no haya un pulso. 
-DigitalOut RTS(p8, 1);              // Pin Digital de Salida "RTS"; Predefinido para valer 1 en su estado inactivo dentro del código.
-Serial stingr(p13, p14, 9600);       // tx, rx Comunicación Serial con el Módulo STX3
-int flag=1;                         // Declaración de la Bandera.
-int incomingByte=0;
-Thread thread;
-int packet[15]; //int or char
-int num = 0;
+// Serial communication to PC
+Serial pc(USBTX, USBRX, 9600);      
+
+// STINGR connections
+DigitalIn CTS(p7, PullUp);          // Entrada "CTS" en modo Pull-Up, para encontrarse normalmente a VCC cuando no haya un pulso. 
+DigitalOut RTS(p8, 1);              // Salida "RTS"; Predefinido para valer 1 en su estado inactivo dentro del código.
+Serial device(p9, p10, 9600);       // tx, rx Comunicación Serial con el Módulo STINGR
 
-void clearPacket();
-void printPacket();
+// Declared functions
+//void stx3();          // stx3() and waitCTS() appear to be same functions                            
+uint16_t ModRTU_CRC(char *buf, int len);    // returns CRC bytes
 void respuesta();
-void waitCTS();
-void postCommand();
+void waitCTS(); 
 
-bool queryESN();
-bool abortTransmission();
-bool queryFirmware();
-int queryBursts();
-long int querySetup();
-bool sendData(char* s);
-void _setup();
-void queryHardware();
-void NAKcommand();
-uint16_t ModRTU_CRC(char * buf, int len);
-void combine(char* s, char c);
+// Global variables
+int flag = 1;           // Declaración de la Bandera.
+int incomingByte = 0;   // Used to collect bytes from STINGR responses
+Thread thread;          // Declaration to run threads
+int packet[15];         // STINGR response array
+int num = 0;            // packet[15] index variable
+AnalogIn ain(p20);      // Initialize pin for analog input 
+int counter = 0;
+        
         
 int main() 
-{ 
-    //i2c variables
-    slave.frequency(400000);
-    char buf[200];
-    char msg[200];
-    slave.address(0x1E);
+{
+    // SETUP___________________________________________________________________ 
+    //thread.start(stx3);
+    thread.start(respuesta);    // STINGR responses to commands
     
-    int bursts = 0;
-    int long numSetup = 0;
-    thread.start(respuesta);
+    // Send Setup Command
+    waitCTS();
     
-    while(1)
-    {
-        int i = slave.receive();
-        
-        switch(i)
-        {
-            // WRITING RESPONSES
-            // Slave writes to Master. Master reads.
-            case I2CSlave::ReadAddressed: 
-                slave.write(msg, strlen(msg) + 1); // Includes null char
-                printf("Writing to Master:\t<<- %s\n", msg);
-                break;
-             
-            // READING COMMANDS
-            // Master writes to Slave. Slave reads.
-            case I2CSlave::WriteAddressed: 
-                slave.read(buf, 200); //Read up to 30 characters from Master
-                printf("\n\nReading from Master:\t->> %s\n", buf);
-                char j = buf[0];
-                
-                switch(j)
-                {
-                    case '1':
-                    {
-                        if (queryESN() == true)
-                        {
-                            pc.printf("\nQuery ESN is correct. VALID\n");
-                            strncpy(msg,"Query ESN is correct",sizeof(msg));
-                        }
-                        else
-                            pc.printf("\nNAK response. INVALID");        
-                        break;
-                    }
-                    case '2':
-                    {
-                        bursts = queryBursts();
-                        if (bursts != 99)
-                        {
-                            char qry[2];
-                            sprintf(qry,"%d",bursts); 
-                            char strt[] = "Bursts Remaining is ";   
-                            strcat(strt,qry);
-                            
-                            pc.printf("\nBursts Remaining: \t");
-                            pc.printf("%u",bursts); 
-                            pc.printf("\n");
-                            
-                            strncpy(msg,strt,sizeof(msg));
-                        }
-                        else 
-                            pc.printf("\nNAK response. INVALID"); 
-                        break;
-                    }
-                    case '3':
-                    {
-                        if (queryFirmware() == true)
-                        {
-                            pc.printf("\nResponse Processing:\tQuery Firmware is correct. VALID\n");
-                            strncpy(msg,"Query Firmware is correct",sizeof(msg)); 
-                        }
-                        else
-                            pc.printf("NAK. INVALID");
-                        break;
-                    }
-                    case '4':
-                    {
-                        numSetup = querySetup();
-                        if (numSetup == NULL)
-                            pc.printf("NAK");
-                        
-                        char qryRF[1];
-                        char qryBursts[2];
-                        char qryMin[3];
-                        char qryMax[3];
-
-                        char strt[] = "";   
-                            
-                        //Print Channel 
-                        pc.printf("\n RF Channel: ");
-                        pc.printf("%u",numSetup/(10000000)); 
-                        int rfprint = numSetup/(10000000);                  // RF channel
-                        sprintf(qryRF,"%d",rfprint);
-                        strcat(strt,qryRF);
-                        numSetup = numSetup - (numSetup/10000000)*10000000; // Truncate RF Digits
-                        
-                        //Print Bursts
-                        pc.printf("\n # of Bursts: ");
-                        pc.printf("%u",numSetup/(100000));                  // Bursts Per Message
-                        int burprint = numSetup/(100000);
-                        sprintf(qryBursts,"%d",burprint);
-                        strcat(strt,qryBursts);
-                        numSetup = numSetup - (numSetup/100000)*100000;     // Truncate Burst Digits
-                        
-                        //Print Min Interval
-                        pc.printf("\n Min Burst Interval: ");
-                        pc.printf("%u",numSetup/1000*5);                    // Min Interval
-                        int minprint = numSetup/1000*5;
-                        sprintf(qryMin,"%d",minprint);
-                        strcat(strt,qryMin);
-                        numSetup = numSetup - (numSetup/1000)*1000;         // Truncate Min Interval
-                        pc.printf(" seconds");
-                        
-                        //Print Max Interval
-                        pc.printf("\n Max Burst Interval: ");
-                        pc.printf("%u",numSetup*5);
-                        int maxprint = numSetup*5;                          // Max Interval
-                        sprintf(qryMax,"%d",maxprint);
-                        strcat(strt,qryMax);
-                        pc.printf(" seconds\n");
-                        
-                        strncpy(msg,strt,sizeof(msg));
-                        
-                        break;
-                    }
-                    case '5':
-                    {
-                        queryHardware();
-                        break;
-                    }
-                    case '6':
-                    {
-                        NAKcommand();             
-                        break;
-                    }
-                    case '7':
-                    {
-                        _setup();             
-                        break;
-                    }
-                    case '8':
-                    {
-                        int cnt = 0; //Counter for all the characters before pressing "Return" key
-                        
-                        //This loop counts all characters before the "Return" key in the buffer
-                        for (int k = 0; k < 200; k++)
-                        {
-                            if(buf[k] == '\n') 
-                                break;
-                            cnt++; 
-                        }  
-                        
-                        pc.printf("0x00\t\t\tSend Data\n\r");
-                        cnt--; //Decrement total by 1. Don't count 8.
-                        pc.printf("Data Packet length: \t%u\n",cnt);     //Decrement total by 1
-                        
-                        char str[cnt];  //Declare str array. str will copy buf but without '8'
-                        //Define str array. str will copy buf but without '8'
-                        for (int k = 0; k < cnt; k++)
-                            str[k] = buf[k+1]; //Starts 1 index after '8'.
-                        
-                        //Declare str1 array. str1 copies str but with
-                        //the correct datalength by truncating the extra characters
-                        //found in str        
-                        char str1[cnt]; 
-                        strncpy(str1,str,cnt); //truncation of extra characters
-                        str1[cnt] = '\0'; //Null character
-                        
-                        pc.printf("Data Packet: \t\t%s \n",str1);
-                        
-                        //Execute Command "Send Data"
-                        //sendData(str1); 
-                        if (sendData(str1) == true)
-                        {
-                            pc.printf("\nSend Data is successful. VALID\n");
-                            strncpy(msg,"Send Data is successful",sizeof(msg));
-                        }
-                        else
-                            pc.printf("\nNAK response. INVALID");  
-                                    
-                        break;
-                    }
-                    case '9':
-                    {
-                        if (abortTransmission() == true)
-                        {
-                            pc.printf("\nResponse Processing:\tTransmission successfully aborted.\n");
-                            strncpy(msg,"Transmission successfully aborted.",sizeof(msg));
-                        }
-                        else
-                            pc.printf("\nResponse Processing:\tNAK response. INVALID");        
-                        
-                        break; //break case '9'
-                    }
-                } // switch(j) loop ends
-                break; //break write addressed
-        } // switch(i) loop ends
-        //for(int i = 0; i < 30; i++) buf[i] = 0;    // Clear buffer
-    } // while(1) loop ends      
-} // main loop ends
-
-void clearPacket()
-{
-    num = 0;
-    for(int i = 0; i < 15 ; i++)
-        packet[i] = 0;
-}
-
-void printPacket()
-{
-    pc.printf("\nResponse(Decimal): \t");
-    for(int i = 0; i < 15 ; i++)
-    {
-        pc.printf("%u",packet[i]);  // Format specifier
-        pc.printf(" ");
-    }
-}
-
-void respuesta()
-{
-    while(1)
-    {
-        if(stingr.readable()) 
-        {   // Se esperan datos provenientes del TX del módulo STX3
-            incomingByte = stingr.getc();
-            packet[num] = incomingByte;
-            pc.printf("%X",incomingByte);  // Format specifier
-            pc.printf(" ");
-            num++;
-        }
-    }
-}
-
-void waitCTS()
-{
-    Thread::wait(200);                                                    // Se da un tiempo para que el analizador se estabilice
-    incomingByte=0;
-    //pc.printf("El valor de CTS es %d\n\r",CTS.read());        // Se lee el valor de la variable CTS, la cual debe ser 1
-    //pc.printf("El valor de RTS es %d\n\r",RTS.read());        // Se lee el valor de la variable RTS, la cual debe ser 1
-    RTS=0;                                                      // Se manda un pulso en bajo en RTS, para inicial el proceso de transmisión
+    device.putc(0XAA);       
+    device.putc(0X0E);
+    device.putc(0X06);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X00);
+    device.putc(0X00);
     
-    while(flag==1)
-    {// Flag inicialmente vale 1, así que el ciclo while cambiará hasta que esa condición no se cumpla           
-        flag=CTS.read();        // Cuando entra el ciclo, se iguala flag a CTS, el cual cuando cambie a 0 provocará que termine el while (máx 125 ms)
-        //pc.printf("El valor de flag es %d\n\r", flag);    // Se imprime el valor de flag, para identificar cuando termina el ciclo while
-    }
-}
-
-void postCommand()
-{
-    Thread::wait(10);                // Se esperan .1 segundos una vez que se terminaron de hacer las transmisiones
+    device.putc(0X00); //RF Channel (A)
+    device.putc(0X01); //Bursts (1)
+    device.putc(0X01); //Interval min (5 seconds)
+    device.putc(0X02); //Interval max (10 seconds)
+    
+    device.putc(0X00); 
+    device.putc(0X21);  // CRC 1
+    device.putc(0X39);  // CRC 2
+    // Post Command --------------------------
+    Thread::wait(10); //comment?               // Se esperan .1 segundos una vez que se terminaron de hacer las transmisiones
     //El tiempo total de transmisión es; el wait previo a las transmisiones, el tiempo que tarda el Mu en enviar los datos y el wait posterior a la transmisión
     RTS=1;
-    Thread::wait(150);
-    //pc.printf("\n\rCTS: %d\n\r",CTS.read());
+    Thread::wait(150); //comment?
+    pc.printf("\n\rCTS: %d\n\r",CTS.read());
     flag=1;
-}
-                           
-//0x00 Send Data
-bool sendData(char* b) //char* s
-{
-    led4=!led4;
-    waitCTS();
-    Thread::wait(10);                
-    
-    size_t n = strlen(b);   //Measure size of b. This includes the zeros
-    int number = n+3;
-    int len = n+5;
-    char header[3] = {0xAA,len,0x00};  //Define header information
-    char vec[number];
-    //pc.printf("number = %u\n",number);
-    
-    //store all in vec
-    for(int k = 0; k < 3; k++)
-       vec[k] = header[k];
-    for(int k = 3; k < number; k++)
-       vec[k] = b[k-3];
-       
-    pc.printf("Command(HEX):\t\t");
-    //Print b characters in HEX
-    for(int k = 0; k < number; k++)   
-        pc.printf("%X ",vec[k]); 
-    
-    char *t = (char *)vec;    //a
-    char crc1 = ModRTU_CRC(t,t[1]-2)&0xFF;
-    char crc2 = ModRTU_CRC(t,t[1]-2)>>8;
-    
-    pc.printf("%X ",crc1); //%X print char in HEX format
-    pc.printf("%X ",crc2); //%X print char in HEX format
-    pc.printf("\nResponse(HEX):\t\t");
-    
-    //Send Command to STINGR
-    for(int k = 0; k < number; k++)
-        stingr.putc(vec[k]);
-    stingr.putc(crc1);
-    stingr.putc(crc2);
-    
-      
-    postCommand();
-    printPacket();
-    
-    //If NAK response
-    if (packet[0] == 170 && // 0xAA
-        packet[1] ==   5 && // 0x05
-        packet[2] == 255 && // 0xFF
-        packet[3] == 161 && // 0xA1
-        packet[4] == 203)   // 0xCB
-    {  
-        clearPacket();
-        pc.printf("\n");
-        return false;  
-    }
-    clearPacket();
-    pc.printf("\n");
-    return true;
-}
-
-//0x01 Query ESN
-bool queryESN()
-{
-    led1=!led1;
-    pc.printf("\r0x01\t\t\tQuery ESN\n");
-    pc.printf("Command(HEX):\t\tAA 5 1 50 D5\n\r");
-    pc.printf("Response(HEX):\t\t");
-    waitCTS();
-    Thread::wait(10);
-     
-    stingr.putc(0XAA);      
-    stingr.putc(0X05);
-    stingr.putc(0X01);
-    stingr.putc(0X50);
-    stingr.putc(0XD5);  
-    
-    postCommand();
-    printPacket();
-    if (packet[3] ==   0 && // 0x00
-        packet[4] ==  41 && // 0x29
-        packet[5] ==  67 && // 0x43
-        packet[6] == 179)   // 0xB3
-    {
-        clearPacket();
-        return true;    
-    }
-    clearPacket();
-    return false;
-}
-
-//0x03 Abort Transmission
-bool abortTransmission()
-{
-    led1=!led1;
-    pc.printf("\r0x03\t\t\tAbort Transmission\n");
-    pc.printf("Command(HEX):\t\tAA 5 3 42 F6\n\r");
-    pc.printf("Response(HEX):\t\t");
-    waitCTS();
-    Thread::wait(10);               
-    stingr.putc(0XAA);      
-    stingr.putc(0X05);
-    stingr.putc(0X03);
-    stingr.putc(0X42);
-    stingr.putc(0XF6);
-    
-    postCommand();
-    printPacket();
-    if (packet[0] == 170 && // 0xAA
-        packet[1] ==   5 && // 0x05
-        packet[2] ==   3 && // 0x03
-        packet[3] ==  66 && // 0x42
-        packet[4] == 246)   // 0xF6
-    {
-        clearPacket();
-        return true;    
-    }
-    clearPacket();
-    return false;
-}
-
-//0x04 Query Bursts
-int queryBursts()
-{
-    int bursts = 99;
-    
-    led2=!led2;
-    pc.printf("\r0x04\t\t\tQuery Burst Remaining\n");
-    pc.printf("Command(HEX):\t\tAA 5 4 FD 82\n\r");
-    pc.printf("Response(HEX):\t\t");
-    waitCTS();
-    Thread::wait(10);
-                    
-    stingr.putc(0XAA);      
-    stingr.putc(0X05);
-    stingr.putc(0X04);
-    stingr.putc(0XFD);
-    stingr.putc(0X82);
-    
-    postCommand();
-    printPacket();
+    // ---------------------------------------
+    Thread::wait(3000);
     
-    //If NAK response
-    if (packet[0] == 170 && // 0xAA
-        packet[1] ==   5 && // 0x05
-        packet[2] == 255 && // 0xFF
-        packet[3] == 161 && // 0xA1
-        packet[4] == 203)   // 0xCB
-    {
-        clearPacket();
-        return bursts;    
-    }
-    bursts = packet[3];
-    clearPacket();
-    return bursts;
-}
-
-//0x05 Query Firmware
-bool queryFirmware()
-{
-    led3=!led3;
-    pc.printf("\r0x05 Query Firmware Version\n");
-    pc.printf("Command(HEX):\t\tAA 5 5 74 93\n\r");
-    pc.printf("Response(HEX):\t\t");
-    waitCTS();
-    Thread::wait(10);               
-    stingr.putc(0XAA);      
-    stingr.putc(0X05);
-    stingr.putc(0X05);
-    stingr.putc(0X74);
-    stingr.putc(0X93);        
+    // LOOP____________________________________________________________________
+    while(true) 
+    {        
+        printf("Fault sin pc");
+        
+        // read the input voltage. represented as a float in the range [0.0, 1.0]
+        // scaled by 3300 for a range of [0.0, 3300.0] 
+        float voltage = 3300 * ain.read();
+        
+        // regardless, print the voltage reading (in float format; %f) for debugging 
+        printf("voltage [0,3300]: %f \n", voltage);
+        
+        if(voltage == 0)    
+        {
+            printf("Fault -- Voltage is 0");
+        }
+        
+        else if(voltage < 400)
+        {
+            printf("Preheating");  
+            //Question: How long does preheating take?
+            //If preheating is quick, make a rewritable delay.
+            //      5 second delay loops for preheating
+            //      30 second delay loops for transmitting 
+            //otherwise, there will be an undesirable long 30 second delay
+        }
+        
+        else // (voltage >= 400)
+        {  
+            int voltage_diference = voltage - 400;  // ?? Why subtract 400
+            int ppm = voltage_diference*50.0/16.0;  // ?? voltage to ppm conversion?
+            
+            // Printing voltage and ppm
+            printf("voltage es: %f mV \n", voltage);
+            printf("concentracion de C02 en ppm es: %X \n", ppm);
+            
+            // Wake-up STINGR communication
+            //stx3();
+            waitCTS();
+            
+            // Create Command vector -----------------
+            // ?? Command length is 7 bytes?
+            //      * 3 header bytes, 2 data bytes, 2 CRC bytes? 
+            int number = 5; 
+            char header[3] = {0xAA,0x07,0x00};  // Define header information
+            char vec[number];                   // 3 header bytes, 2 data bytes
+            
+            // store header to vec
+            for(int k = 0; k < 3; k++)
+                vec[k] = header[k];
+            
+            // Break ppm integer(2 bytes) into separate c1,c2 uint8_t(bytes)
+            uint8_t c1 = ppm;
+            uint8_t c2 = ppm >> 8;
+            
+            // store data bytes to vec
+            vec[3] = c2;
+            vec[4] = c1;
     
-    postCommand();
-    printPacket();
-    if (packet[3] == 1 && // 0x01
-        packet[4] == 3)   // 0x03
-    {
-        clearPacket();
-        return true;    
-    }
-    clearPacket();
-    return false;
-}
+            // Print characters in HEX (Debugging)
+            pc.printf("Command(HEX):\t\t");
+            for(int k = 0; k < number; k++)   
+                pc.printf("%X ",vec[k]); 
+            
+            // CRC calculation -----------------------
+            char *t = (char *)vec;    
+            char crc1 = ModRTU_CRC(t,t[1]-2)&0xFF;
+            char crc2 = ModRTU_CRC(t,t[1]-2)>>8;
+    
+            pc.printf("%X ",crc1); //%X print char in HEX format
+            pc.printf("%X ",crc2); //%X print char in HEX format
+            pc.printf("\nResponse: ");
+            
+            // Send Command to STINGR ----------------
+            for(int k = 0; k < number; k++)
+                device.putc(vec[k]);
+            device.putc(crc1);
+            device.putc(crc2);  
+            
+            // Post Command --------------------------
+            Thread::wait(10); //comment?               // Se esperan .1 segundos una vez que se terminaron de hacer las transmisiones
+            //El tiempo total de transmisión es; el wait previo a las transmisiones, el tiempo que tarda el Mu en enviar los datos y el wait posterior a la transmisión
+            RTS=1;
+            Thread::wait(150); //comment?
+            pc.printf("\n\rCTS: %d\n\r",CTS.read());
+            flag=1;
+            // ---------------------------------------
+            counter++;
+                     
+        }// else statement ends
+        
+        if (counter < 30)
+        {
+            for(int u = 0; u < 2; u++)
+                Thread::wait(60000);   // LOOP delay. 1 minuto (Note: units are in milliseconds)
+        }
+        else
+        {
+            for(int u = 0; u < 30; u++)
+                Thread::wait(60000);   // LOOP delay. 1 minuto (Note: units are in milliseconds)
+        }
+    }// LOOP (while statement) ends____________________________________________
+    
+}// main function ends
 
-//0x06 Setup
-void _setup()
-{
-    led3=!led3;
-    pc.printf("\r0x06 Setup\n");
-    pc.printf("Command(HEX):\t\tAA 0E 06 00 00 00 00 00 03 18 30 00 CE 9C\n\r");
-    pc.printf("Response(HEX):\t\t");
-    waitCTS();
-    Thread::wait(10);              
-    stingr.putc(0XAA);      
-    stingr.putc(0X0E);
-    stingr.putc(0X06);
-    stingr.putc(0X00);
-    stingr.putc(0X00);
-    stingr.putc(0X00);
-    stingr.putc(0X00);
-    stingr.putc(0X00);
-    stingr.putc(0X03);
-    stingr.putc(0X18);
-    stingr.putc(0X30);
-    stingr.putc(0X00);
-    stingr.putc(0XCE);
-    stingr.putc(0X9C);
-    postCommand();
-}
-
-//0x07 Query Setup
-long int querySetup()
+/*
+void stx3()
 {
-    int numSetup = 0;
-    led4=!led4;
-    pc.printf("\r0x07 Query Setup\n");
-    pc.printf("Command(HEX):\t\tAA 5 7 66 B0\n\r");
-    pc.printf("Response(HEX):\t\t");
-    waitCTS();
-    Thread::wait(10);
-                    
-    stingr.putc(0XAA);      
-    stingr.putc(0X05);
-    stingr.putc(0X07);
-    stingr.putc(0X66);
-    stingr.putc(0XB0);
-    
-    postCommand();
-    
-    //If NAK response
-    if (packet[0] == 170 && // 0xAA
-        packet[1] ==   5 && // 0x05
-        packet[2] == 255 && // 0xFF
-        packet[3] == 161 && // 0xA1
-        packet[4] == 203)   // 0xCB
-    {
-        clearPacket();
-        return NULL;    
+    wait(200);                                                    // Se da un tiempo para que el analizador se estabilice
+    incomingByte=0;
+    pc.printf("El valor de CTS es %d\n\r",CTS.read());        // Se lee el valor de la variable CTS, la cual debe ser 1
+    pc.printf("El valor de RTS es %d\n\r",RTS.read());        // Se lee el valor de la variable RTS, la cual debe ser 1
+    RTS=0;   
+                                                       // Se manda un pulso en bajo en RTS, para inicial el proceso de transmisión
+    while(flag==1)
+    {             // Flag inicialmente vale 1, así que el ciclo while cambiará hasta que esa condición no se cumpla           
+        flag=CTS.read();        // Cuando entra el ciclo, se iguala flag a CTS, el cual cuando cambie a 0 provocará que termine el while (máx 125 ms)
+        pc.printf("El valor de flag es %d\n\r", flag);    // Se imprime el valor de flag, para identificar cuando termina el ciclo while
     }
-    numSetup = packet[7]*10000000 + packet[8]*100000 + packet[9]*1000 + packet[10];
-    clearPacket();
-    return numSetup;
 }
-
-//0x09 Query Hardware
-void queryHardware()
-{
-    led1=!led1;
-    pc.printf("\r0x09 Query Hardware Version\n");
-    pc.printf("Command(HEX):\t\tAA 5 9 18 59\n\r");
-    pc.printf("Response(HEX):\t\t");
-    waitCTS();
-    Thread::wait(10);                
-    
-    stingr.putc(0XAA);      
-    stingr.putc(0X05);
-    stingr.putc(0X09);
-    stingr.putc(0X18);
-    stingr.putc(0X59);
-    
-    postCommand();
-    printPacket();
-    clearPacket();
-    pc.printf("\n");
-}
-
-//NAK Command
-void NAKcommand()
-{
-    led2=!led2;
-    pc.printf("\rXxXX NAK\n");
-    pc.printf("Command(HEX):\t\tAA 5 7 66 B1\n\r");
-    pc.printf("Response(HEX):\t\t");
-    waitCTS();
-    Thread::wait(10);  
-                  
-    stingr.putc(0XAA);      
-    stingr.putc(0X05);
-    stingr.putc(0X07);
-    stingr.putc(0X66);
-    stingr.putc(0XB1);
-    
-    postCommand();
-    printPacket();
-    clearPacket();
-    pc.printf("\n");
-}
+*/
 
 uint16_t ModRTU_CRC(char * buf, int len)
 {
@@ -605,9 +208,40 @@
   return (crc);  
 }
 
-void combine(char* s, char c) 
+void respuesta()
+{
+    while(1)
+    {
+        if(device.readable()) 
+        {   // Se esperan datos provenientes del TX del módulo STX3
+            incomingByte = device.getc();
+            packet[num] = incomingByte;
+            pc.printf("%X",incomingByte);  // Format specifier
+            pc.printf(" ");
+            num++;
+        }
+    }
+}
+
+void clearPacket() //reuired function for respuesta
 {
-  int len = strlen(s);
-  s[len] = c;
-  s[len+1] = '\0';
-}
\ No newline at end of file
+    num = 0;
+    for(int i = 0; i < 15 ; i++)
+        packet[i] = 0;
+}
+
+void waitCTS()
+{
+    Thread::wait(200);                                                    // Se da un tiempo para que el analizador se estabilice
+    incomingByte=0;
+    //pc.printf("El valor de CTS es %d\n\r",CTS.read());        // Se lee el valor de la variable CTS, la cual debe ser 1
+    //pc.printf("El valor de RTS es %d\n\r",RTS.read());        // Se lee el valor de la variable RTS, la cual debe ser 1
+    RTS=0;                                                      // Se manda un pulso en bajo en RTS, para inicial el proceso de transmisión
+    
+    while(flag==1)
+    {// Flag inicialmente vale 1, así que el ciclo while cambiará hasta que esa condición no se cumpla           
+        flag=CTS.read();        // Cuando entra el ciclo, se iguala flag a CTS, el cual cuando cambie a 0 provocará que termine el while (máx 125 ms)
+        //pc.printf("El valor de flag es %d\n\r", flag);    // Se imprime el valor de flag, para identificar cuando termina el ciclo while
+    }
+}
+