GAS Joel

Dependencies:   mbed-rtos mbed

Committer:
JCON
Date:
Thu Jun 28 20:24:07 2018 +0000
Revision:
0:1593910d3520
GAS

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JCON 0:1593910d3520 1 #include "mbed.h" //Se declara la librería mbed.
JCON 0:1593910d3520 2 #include "rtos.h"
JCON 0:1593910d3520 3 #include <string>
JCON 0:1593910d3520 4
JCON 0:1593910d3520 5 DigitalOut led1(LED1);
JCON 0:1593910d3520 6 DigitalOut led2(LED2);
JCON 0:1593910d3520 7 DigitalOut led3(LED3);
JCON 0:1593910d3520 8 DigitalOut led4(LED4);
JCON 0:1593910d3520 9 Serial pc(USBTX, USBRX, 9600); // tx, rx Conunicación Serial con la PC
JCON 0:1593910d3520 10 DigitalIn CTS(p7, PullUp); // Pin Digital de entrada "CTS" en modo Pull-Up, para encontrarse normalmente a VCC cuando no haya un pulso.
JCON 0:1593910d3520 11 DigitalOut RTS(p8, 1); // Pin Digital de Salida "RTS"; Predefinido para valer 1 en su estado inactivo dentro del código.
JCON 0:1593910d3520 12 Serial device(p9, p10, 9600); // tx, rx Comunicación Serial con el Módulo STX3
JCON 0:1593910d3520 13 int flag=1; // Declaración de la Bandera.
JCON 0:1593910d3520 14 int incomingByte=0;
JCON 0:1593910d3520 15 Thread thread;
JCON 0:1593910d3520 16 AnalogIn ain(p20);
JCON 0:1593910d3520 17 void waitCTS();
JCON 0:1593910d3520 18
JCON 0:1593910d3520 19 uint16_t ModRTU_CRC(char * buf, int len)
JCON 0:1593910d3520 20 {
JCON 0:1593910d3520 21 unsigned char i;
JCON 0:1593910d3520 22 unsigned short data;
JCON 0:1593910d3520 23 uint16_t crc = 0xFFFF;
JCON 0:1593910d3520 24
JCON 0:1593910d3520 25 do{
JCON 0:1593910d3520 26 data = (unsigned int)0x00FF & *buf++;
JCON 0:1593910d3520 27 crc = crc ^ data;
JCON 0:1593910d3520 28
JCON 0:1593910d3520 29 for(i = 8; i > 0; i--)
JCON 0:1593910d3520 30 {
JCON 0:1593910d3520 31 if(crc & 0x0001)
JCON 0:1593910d3520 32 crc = (crc >> 1) ^ 0x8408;
JCON 0:1593910d3520 33 else
JCON 0:1593910d3520 34 crc >>=1;
JCON 0:1593910d3520 35 }
JCON 0:1593910d3520 36
JCON 0:1593910d3520 37 }while (--len);
JCON 0:1593910d3520 38
JCON 0:1593910d3520 39 crc = ~crc;
JCON 0:1593910d3520 40
JCON 0:1593910d3520 41 // Note, this number has low and high bytes swapped, so use it accordingly (or swap bytes)
JCON 0:1593910d3520 42 return (crc);
JCON 0:1593910d3520 43 }
JCON 0:1593910d3520 44
JCON 0:1593910d3520 45
JCON 0:1593910d3520 46 void respuesta(){
JCON 0:1593910d3520 47 while(1){
JCON 0:1593910d3520 48 if(device.readable()) { // Se esperan datos provenientes del TX del módulo STX3
JCON 0:1593910d3520 49 incomingByte=device.getc();
JCON 0:1593910d3520 50 //pc.putc(num);
JCON 0:1593910d3520 51 pc.printf("%X",incomingByte);
JCON 0:1593910d3520 52 pc.printf(" ");
JCON 0:1593910d3520 53 // pc.putc(device.getc()); // Se muestra en pantalla la respuesta recibida por el módulo STX3 como una reacción al mensaje en HEX enviado
JCON 0:1593910d3520 54 }
JCON 0:1593910d3520 55 }
JCON 0:1593910d3520 56 }
JCON 0:1593910d3520 57
JCON 0:1593910d3520 58 void stx3()
JCON 0:1593910d3520 59 {
JCON 0:1593910d3520 60 Thread::wait(200); // Se da un tiempo para que el analizador se estabilice
JCON 0:1593910d3520 61 incomingByte=0;
JCON 0:1593910d3520 62 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
JCON 0:1593910d3520 63 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
JCON 0:1593910d3520 64 RTS=0; // Se manda un pulso en bajo en RTS, para inicial el proceso de transmisión
JCON 0:1593910d3520 65 while(flag==1){ // Flag inicialmente vale 1, así que el ciclo while cambiará hasta que esa condición no se cumpla
JCON 0:1593910d3520 66 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)
JCON 0:1593910d3520 67 pc.printf("El valor de flag es %d\n\r", flag); // Se imprime el valor de flag, para identificar cuando termina el ciclo while
JCON 0:1593910d3520 68 }
JCON 0:1593910d3520 69 }
JCON 0:1593910d3520 70
JCON 0:1593910d3520 71 int main() {
JCON 0:1593910d3520 72 thread.start(respuesta);
JCON 0:1593910d3520 73
JCON 0:1593910d3520 74 while(1) {
JCON 0:1593910d3520 75
JCON 0:1593910d3520 76 float voltage = 3300*ain.read();
JCON 0:1593910d3520 77
JCON 0:1593910d3520 78 if(voltage == 0)
JCON 0:1593910d3520 79 {
JCON 0:1593910d3520 80 printf("Fault");
JCON 0:1593910d3520 81 }
JCON 0:1593910d3520 82 else if(voltage < 400)
JCON 0:1593910d3520 83 {
JCON 0:1593910d3520 84 printf("preheating");
JCON 0:1593910d3520 85 }
JCON 0:1593910d3520 86
JCON 0:1593910d3520 87 else
JCON 0:1593910d3520 88 {
JCON 0:1593910d3520 89 int voltage_diference=voltage-400;
JCON 0:1593910d3520 90 int c=voltage_diference*50.0/16.0;
JCON 0:1593910d3520 91
JCON 0:1593910d3520 92 printf("voltage es: %f mV \n", voltage);
JCON 0:1593910d3520 93
JCON 0:1593910d3520 94 printf("concentracion de C02 en ppm es: %X \n", c);
JCON 0:1593910d3520 95
JCON 0:1593910d3520 96 stx3();
JCON 0:1593910d3520 97 int number = 5;
JCON 0:1593910d3520 98 printf("%d\n",number);
JCON 0:1593910d3520 99 char header[3] = {0xAA,0x07,0x00}; //Define header information
JCON 0:1593910d3520 100 char vec[number];
JCON 0:1593910d3520 101 uint8_t c1=c;
JCON 0:1593910d3520 102 uint8_t c2=c>>8;
JCON 0:1593910d3520 103
JCON 0:1593910d3520 104
JCON 0:1593910d3520 105
JCON 0:1593910d3520 106 for(int k = 0; k < 3; k++)
JCON 0:1593910d3520 107 vec[k] = header[k];
JCON 0:1593910d3520 108
JCON 0:1593910d3520 109 vec[3] =c2;
JCON 0:1593910d3520 110 vec[4] =c1;
JCON 0:1593910d3520 111
JCON 0:1593910d3520 112
JCON 0:1593910d3520 113
JCON 0:1593910d3520 114
JCON 0:1593910d3520 115 pc.printf("Command(HEX):\t\t");
JCON 0:1593910d3520 116 //Print b characters in HEX
JCON 0:1593910d3520 117 for(int k = 0; k < number; k++)
JCON 0:1593910d3520 118 pc.printf("%X ",vec[k]);
JCON 0:1593910d3520 119
JCON 0:1593910d3520 120 char *t = (char *)vec; //a
JCON 0:1593910d3520 121 char crc1 = ModRTU_CRC(t,t[1]-2)&0xFF;
JCON 0:1593910d3520 122 char crc2 = ModRTU_CRC(t,t[1]-2)>>8;
JCON 0:1593910d3520 123
JCON 0:1593910d3520 124 pc.printf("%X ",crc1); //%X print char in HEX format
JCON 0:1593910d3520 125 pc.printf("%X ",crc2); //%X print char in HEX format
JCON 0:1593910d3520 126
JCON 0:1593910d3520 127 for(int k = 0; k < number; k++)
JCON 0:1593910d3520 128 device.putc(vec[k]);
JCON 0:1593910d3520 129 device.putc(crc1);
JCON 0:1593910d3520 130 device.putc(crc2);
JCON 0:1593910d3520 131
JCON 0:1593910d3520 132 Thread::wait(10); // Se esperan .1 segundos una vez que se terminaron de hacer las transmisiones
JCON 0:1593910d3520 133 //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
JCON 0:1593910d3520 134 RTS=1;
JCON 0:1593910d3520 135 Thread::wait(150);
JCON 0:1593910d3520 136 pc.printf("\n\rCTS: %d\n\r",CTS.read());
JCON 0:1593910d3520 137 flag=1;
JCON 0:1593910d3520 138
JCON 0:1593910d3520 139
JCON 0:1593910d3520 140
JCON 0:1593910d3520 141 }
JCON 0:1593910d3520 142 wait(1);
JCON 0:1593910d3520 143
JCON 0:1593910d3520 144 switch (pc.getc())
JCON 0:1593910d3520 145 {
JCON 0:1593910d3520 146 case '1':
JCON 0:1593910d3520 147 {
JCON 0:1593910d3520 148 led1=!led1;
JCON 0:1593910d3520 149 pc.printf("\n\rQuery ESN AA 05 01 50 D5\n\r");
JCON 0:1593910d3520 150 stx3();
JCON 0:1593910d3520 151 Thread::wait(10); // Query ESN
JCON 0:1593910d3520 152 device.putc(0XAA);
JCON 0:1593910d3520 153 device.putc(0X05);
JCON 0:1593910d3520 154 device.putc(0X01);
JCON 0:1593910d3520 155 device.putc(0X50);
JCON 0:1593910d3520 156 device.putc(0XD5);
JCON 0:1593910d3520 157 Thread::wait(10); // Se esperan .1 segundos una vez que se terminaron de hacer las transmisiones
JCON 0:1593910d3520 158 //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
JCON 0:1593910d3520 159 RTS=1;
JCON 0:1593910d3520 160 Thread::wait(150);
JCON 0:1593910d3520 161 pc.printf("\n\rCTS: %d\n\r",CTS.read());
JCON 0:1593910d3520 162 flag=1;
JCON 0:1593910d3520 163 }
JCON 0:1593910d3520 164 break;
JCON 0:1593910d3520 165
JCON 0:1593910d3520 166 case '2':
JCON 0:1593910d3520 167 {
JCON 0:1593910d3520 168 led4=!led4;
JCON 0:1593910d3520 169 pc.printf("\n\rQuery SETUP AA 05 07 66 B0\n\r");
JCON 0:1593910d3520 170 stx3();
JCON 0:1593910d3520 171 Thread::wait(10); // Query SETUP
JCON 0:1593910d3520 172 device.putc(0XAA);
JCON 0:1593910d3520 173 device.putc(0X05);
JCON 0:1593910d3520 174 device.putc(0X07);
JCON 0:1593910d3520 175 device.putc(0X66);
JCON 0:1593910d3520 176 device.putc(0XB0);
JCON 0:1593910d3520 177 Thread::wait(10); // Se esperan .1 segundos una vez que se terminaron de hacer las transmisiones
JCON 0:1593910d3520 178 //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
JCON 0:1593910d3520 179 RTS=1;
JCON 0:1593910d3520 180 Thread::wait(150);
JCON 0:1593910d3520 181 pc.printf("\n\rCTS: %d\n\r",CTS.read());
JCON 0:1593910d3520 182 flag=1;
JCON 0:1593910d3520 183 }
JCON 0:1593910d3520 184 break;
JCON 0:1593910d3520 185
JCON 0:1593910d3520 186 case '3':
JCON 0:1593910d3520 187 {
JCON 0:1593910d3520 188 led3=!led3;
JCON 0:1593910d3520 189 pc.printf("\n\rSETUP AA 0E 06 00 00 00 00 00 03 01 03 00 8F 19 \n\r");
JCON 0:1593910d3520 190 stx3();
JCON 0:1593910d3520 191 Thread::wait(10); // SETUP
JCON 0:1593910d3520 192 device.putc(0XAA);
JCON 0:1593910d3520 193 device.putc(0X0E);
JCON 0:1593910d3520 194 device.putc(0X06);
JCON 0:1593910d3520 195 device.putc(0X00);
JCON 0:1593910d3520 196 device.putc(0X00);
JCON 0:1593910d3520 197 device.putc(0X00);
JCON 0:1593910d3520 198 device.putc(0X00);
JCON 0:1593910d3520 199 device.putc(0X00);
JCON 0:1593910d3520 200 device.putc(0X03);
JCON 0:1593910d3520 201 device.putc(0X01);
JCON 0:1593910d3520 202 device.putc(0X03);
JCON 0:1593910d3520 203 device.putc(0X00);
JCON 0:1593910d3520 204 device.putc(0X8F);
JCON 0:1593910d3520 205 device.putc(0X19);
JCON 0:1593910d3520 206 Thread::wait(10); // Se esperan .1 segundos una vez que se terminaron de hacer las transmisiones
JCON 0:1593910d3520 207 //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
JCON 0:1593910d3520 208 RTS=1;
JCON 0:1593910d3520 209 Thread::wait(150);
JCON 0:1593910d3520 210 pc.printf("\n\rCTS: %d\n\r",CTS.read());
JCON 0:1593910d3520 211 flag=1;
JCON 0:1593910d3520 212 }
JCON 0:1593910d3520 213 break;
JCON 0:1593910d3520 214
JCON 0:1593910d3520 215 case '4':
JCON 0:1593910d3520 216 {
JCON 0:1593910d3520 217 led4=!led4;
JCON 0:1593910d3520 218 pc.printf("\n\r Send Data AA 07 00 FF FF 82 CE \n\r");
JCON 0:1593910d3520 219 stx3();
JCON 0:1593910d3520 220 Thread::wait(10); // Query SETUP
JCON 0:1593910d3520 221 device.putc(0XAA);
JCON 0:1593910d3520 222 device.putc(0X07);
JCON 0:1593910d3520 223 device.putc(0X00);
JCON 0:1593910d3520 224 device.putc(0XFF);
JCON 0:1593910d3520 225 device.putc(0XFF);
JCON 0:1593910d3520 226 device.putc(0X82);
JCON 0:1593910d3520 227 device.putc(0XCE);
JCON 0:1593910d3520 228 Thread::wait(10); // Se esperan .1 segundos una vez que se terminaron de hacer las transmisiones
JCON 0:1593910d3520 229 //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
JCON 0:1593910d3520 230 RTS=1;
JCON 0:1593910d3520 231 Thread::wait(150);
JCON 0:1593910d3520 232 pc.printf("\n\rCTS: %d\n\r",CTS.read());
JCON 0:1593910d3520 233 flag=1;
JCON 0:1593910d3520 234 }
JCON 0:1593910d3520 235 break;
JCON 0:1593910d3520 236
JCON 0:1593910d3520 237 }
JCON 0:1593910d3520 238 }
JCON 0:1593910d3520 239 }
JCON 0:1593910d3520 240
JCON 0:1593910d3520 241 void waitCTS()
JCON 0:1593910d3520 242 {
JCON 0:1593910d3520 243 Thread::wait(200); // Se da un tiempo para que el analizador se estabilice
JCON 0:1593910d3520 244 incomingByte=0;
JCON 0:1593910d3520 245 //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
JCON 0:1593910d3520 246 //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
JCON 0:1593910d3520 247 RTS=0; // Se manda un pulso en bajo en RTS, para inicial el proceso de transmisión
JCON 0:1593910d3520 248
JCON 0:1593910d3520 249 while(flag==1)
JCON 0:1593910d3520 250 {// Flag inicialmente vale 1, así que el ciclo while cambiará hasta que esa condición no se cumpla
JCON 0:1593910d3520 251 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)
JCON 0:1593910d3520 252 //pc.printf("El valor de flag es %d\n\r", flag); // Se imprime el valor de flag, para identificar cuando termina el ciclo while
JCON 0:1593910d3520 253 }
JCON 0:1593910d3520 254 }
JCON 0:1593910d3520 255
JCON 0:1593910d3520 256 void sendData()
JCON 0:1593910d3520 257 {
JCON 0:1593910d3520 258 led4=!led4;
JCON 0:1593910d3520 259 waitCTS();
JCON 0:1593910d3520 260 Thread::wait(10);
JCON 0:1593910d3520 261
JCON 0:1593910d3520 262 }
JCON 0:1593910d3520 263