Willie Solano / Mbed 2 deprecated USB-TTL

Dependencies:   mbed

Committer:
williequesada
Date:
Tue Jun 04 15:27:32 2019 +0000
Revision:
0:efc80e1a2f73
compartir a Pablo

Who changed what in which revision?

UserRevisionLine numberNew contents of line
williequesada 0:efc80e1a2f73 1 #include "mbed.h"
williequesada 0:efc80e1a2f73 2
williequesada 0:efc80e1a2f73 3 //------------------------------------
williequesada 0:efc80e1a2f73 4 // Hyperterminal configuration
williequesada 0:efc80e1a2f73 5 // 9600 bauds, 8-bit data, no parity
williequesada 0:efc80e1a2f73 6 //------------------------------------
williequesada 0:efc80e1a2f73 7
williequesada 0:efc80e1a2f73 8 RawSerial Computer(SERIAL_TX, SERIAL_RX,9600); // tx, rx
williequesada 0:efc80e1a2f73 9 RawSerial Gsm(PA_0,PA_1,19200);
williequesada 0:efc80e1a2f73 10 bool Completo = false;
williequesada 0:efc80e1a2f73 11 char Command;
williequesada 0:efc80e1a2f73 12 int Sim900_Counter=0;
williequesada 0:efc80e1a2f73 13 char Sim900_Buffer[1000];
williequesada 0:efc80e1a2f73 14 int Computer_Counter=0;
williequesada 0:efc80e1a2f73 15 char Computer_Buffer[1000];
williequesada 0:efc80e1a2f73 16 unsigned long Inicio, Fin, Transcurrido;
williequesada 0:efc80e1a2f73 17 Timer BaseClock;
williequesada 0:efc80e1a2f73 18
williequesada 0:efc80e1a2f73 19 DigitalOut EnableSIM900(PB_0);
williequesada 0:efc80e1a2f73 20 DigitalOut ResetSIM900(PA_10);
williequesada 0:efc80e1a2f73 21 InterruptIn Button(USER_BUTTON);
williequesada 0:efc80e1a2f73 22
williequesada 0:efc80e1a2f73 23 void Interrupt_Sim900()
williequesada 0:efc80e1a2f73 24 {
williequesada 0:efc80e1a2f73 25 if(Gsm.readable()) {
williequesada 0:efc80e1a2f73 26 Sim900_Buffer[Sim900_Counter]=Gsm.getc();
williequesada 0:efc80e1a2f73 27 Sim900_Counter++;
williequesada 0:efc80e1a2f73 28 }
williequesada 0:efc80e1a2f73 29 }
williequesada 0:efc80e1a2f73 30
williequesada 0:efc80e1a2f73 31 void Interrupt_Computer()
williequesada 0:efc80e1a2f73 32 {
williequesada 0:efc80e1a2f73 33 Computer_Buffer[Computer_Counter]=Computer.getc();
williequesada 0:efc80e1a2f73 34 if(Computer_Buffer[Computer_Counter]=='\n'){
williequesada 0:efc80e1a2f73 35 Completo=true;
williequesada 0:efc80e1a2f73 36 }
williequesada 0:efc80e1a2f73 37 Computer_Counter++;
williequesada 0:efc80e1a2f73 38 }
williequesada 0:efc80e1a2f73 39
williequesada 0:efc80e1a2f73 40 void EncenderSIM900()
williequesada 0:efc80e1a2f73 41 {
williequesada 0:efc80e1a2f73 42 Computer.printf("Computer\r\n");
williequesada 0:efc80e1a2f73 43 Sim900_Counter=0;
williequesada 0:efc80e1a2f73 44 if(Gsm.writeable()) {
williequesada 0:efc80e1a2f73 45 Gsm.printf("AT\r\n");
williequesada 0:efc80e1a2f73 46 }
williequesada 0:efc80e1a2f73 47 wait_ms(100);
williequesada 0:efc80e1a2f73 48
williequesada 0:efc80e1a2f73 49 if(Sim900_Counter==0) {
williequesada 0:efc80e1a2f73 50 Sim900_Counter=0;
williequesada 0:efc80e1a2f73 51 EnableSIM900 = 1;
williequesada 0:efc80e1a2f73 52 wait_ms(600);
williequesada 0:efc80e1a2f73 53 EnableSIM900 = 0;
williequesada 0:efc80e1a2f73 54 wait_ms(1000);
williequesada 0:efc80e1a2f73 55
williequesada 0:efc80e1a2f73 56 bool TimeOut=0;
williequesada 0:efc80e1a2f73 57 bool RightAnswer1=0;
williequesada 0:efc80e1a2f73 58 bool RightAnswer2=0;
williequesada 0:efc80e1a2f73 59 bool WrongAnswer1=0;
williequesada 0:efc80e1a2f73 60 bool WrongAnswer2=0;
williequesada 0:efc80e1a2f73 61 Inicio=BaseClock.read_ms();
williequesada 0:efc80e1a2f73 62
williequesada 0:efc80e1a2f73 63 while(true) { // Esta funcion detiene el programa y espera una respuesta
williequesada 0:efc80e1a2f73 64 Fin=BaseClock.read_ms();
williequesada 0:efc80e1a2f73 65 Transcurrido=Fin-Inicio;
williequesada 0:efc80e1a2f73 66 if(Sim900_Counter>5) {
williequesada 0:efc80e1a2f73 67 TimeOut=1;
williequesada 0:efc80e1a2f73 68 break;
williequesada 0:efc80e1a2f73 69 }
williequesada 0:efc80e1a2f73 70 if(Transcurrido>1000) {
williequesada 0:efc80e1a2f73 71 TimeOut=0;
williequesada 0:efc80e1a2f73 72 break;
williequesada 0:efc80e1a2f73 73 }
williequesada 0:efc80e1a2f73 74 }
williequesada 0:efc80e1a2f73 75 wait_ms(500);
williequesada 0:efc80e1a2f73 76 if(TimeOut) {
williequesada 0:efc80e1a2f73 77 for(int i=0; i<Sim900_Counter; i++) {
williequesada 0:efc80e1a2f73 78 Computer.putc(Sim900_Buffer[i]);
williequesada 0:efc80e1a2f73 79 if(Sim900_Buffer[i]=='F') {
williequesada 0:efc80e1a2f73 80 RightAnswer1=1;
williequesada 0:efc80e1a2f73 81 }
williequesada 0:efc80e1a2f73 82 if(Sim900_Buffer[i]=='I') {
williequesada 0:efc80e1a2f73 83 RightAnswer2=1;
williequesada 0:efc80e1a2f73 84 }
williequesada 0:efc80e1a2f73 85 if(Sim900_Buffer[i]=='O') {
williequesada 0:efc80e1a2f73 86 WrongAnswer1=1;
williequesada 0:efc80e1a2f73 87 }
williequesada 0:efc80e1a2f73 88 if(Sim900_Buffer[i]=='W') {
williequesada 0:efc80e1a2f73 89 WrongAnswer2=1;
williequesada 0:efc80e1a2f73 90 }
williequesada 0:efc80e1a2f73 91 }
williequesada 0:efc80e1a2f73 92 if(RightAnswer1 && RightAnswer2) {
williequesada 0:efc80e1a2f73 93 Computer.printf("OK-> Encendido correctamente\n");
williequesada 0:efc80e1a2f73 94 wait_ms(3500);
williequesada 0:efc80e1a2f73 95 } else {
williequesada 0:efc80e1a2f73 96 if(WrongAnswer1 && WrongAnswer2) {
williequesada 0:efc80e1a2f73 97 Computer.printf("OK-> Apagado error\n");
williequesada 0:efc80e1a2f73 98 wait_ms(4000);
williequesada 0:efc80e1a2f73 99 Sim900_Counter=0;
williequesada 0:efc80e1a2f73 100 EnableSIM900 = 1;
williequesada 0:efc80e1a2f73 101 wait_ms(600);
williequesada 0:efc80e1a2f73 102 EnableSIM900 = 0;
williequesada 0:efc80e1a2f73 103 wait_ms(5000);
williequesada 0:efc80e1a2f73 104 }
williequesada 0:efc80e1a2f73 105 }
williequesada 0:efc80e1a2f73 106 }
williequesada 0:efc80e1a2f73 107 } else {
williequesada 0:efc80e1a2f73 108 for(int i=0; i<=Sim900_Counter; i++) {
williequesada 0:efc80e1a2f73 109 Computer.putc(Sim900_Buffer[i]);
williequesada 0:efc80e1a2f73 110 }
williequesada 0:efc80e1a2f73 111 }
williequesada 0:efc80e1a2f73 112
williequesada 0:efc80e1a2f73 113 }
williequesada 0:efc80e1a2f73 114
williequesada 0:efc80e1a2f73 115 void PrintSerialRepeat(char Answer[],uint32_t Espera,uint32_t Delay)//
williequesada 0:efc80e1a2f73 116 {
williequesada 0:efc80e1a2f73 117 for(int i=0; i<Computer_Counter; i++) {
williequesada 0:efc80e1a2f73 118 if(Gsm.writeable()) {
williequesada 0:efc80e1a2f73 119 Gsm.putc(Computer_Buffer[i]);
williequesada 0:efc80e1a2f73 120 }
williequesada 0:efc80e1a2f73 121 }
williequesada 0:efc80e1a2f73 122 Sim900_Counter=0;
williequesada 0:efc80e1a2f73 123 bool TimeOut=0;
williequesada 0:efc80e1a2f73 124 bool RightAnswer1=0;
williequesada 0:efc80e1a2f73 125 bool RightAnswer2=0;
williequesada 0:efc80e1a2f73 126 Inicio=BaseClock.read_ms();
williequesada 0:efc80e1a2f73 127
williequesada 0:efc80e1a2f73 128 while(true) { // Esta funcion detiene el programa y espera una respuesta
williequesada 0:efc80e1a2f73 129 Fin=BaseClock.read_ms();
williequesada 0:efc80e1a2f73 130 Transcurrido=Fin-Inicio;
williequesada 0:efc80e1a2f73 131 if(Sim900_Counter>2) {
williequesada 0:efc80e1a2f73 132 TimeOut=1;
williequesada 0:efc80e1a2f73 133 break;
williequesada 0:efc80e1a2f73 134 }
williequesada 0:efc80e1a2f73 135 if(Transcurrido>Espera) {
williequesada 0:efc80e1a2f73 136 TimeOut=0;
williequesada 0:efc80e1a2f73 137 break;
williequesada 0:efc80e1a2f73 138 }
williequesada 0:efc80e1a2f73 139 }
williequesada 0:efc80e1a2f73 140 wait_ms(Delay);
williequesada 0:efc80e1a2f73 141 if(TimeOut) {
williequesada 0:efc80e1a2f73 142 for(int i=0; i<Sim900_Counter; i++) {
williequesada 0:efc80e1a2f73 143 Computer.putc(Sim900_Buffer[i]);
williequesada 0:efc80e1a2f73 144 if(Sim900_Buffer[i]==Answer[0]) {
williequesada 0:efc80e1a2f73 145 RightAnswer1=1;
williequesada 0:efc80e1a2f73 146 }
williequesada 0:efc80e1a2f73 147 if(Sim900_Buffer[i]==Answer[1]) {
williequesada 0:efc80e1a2f73 148 RightAnswer2=1;
williequesada 0:efc80e1a2f73 149 }
williequesada 0:efc80e1a2f73 150 }
williequesada 0:efc80e1a2f73 151 if(RightAnswer1 && RightAnswer2) {
williequesada 0:efc80e1a2f73 152 Computer.printf("OK-> Respuesta correcta\n");
williequesada 0:efc80e1a2f73 153 Computer_Counter=0;
williequesada 0:efc80e1a2f73 154 } else {
williequesada 0:efc80e1a2f73 155 Computer.printf("ERROR-> Respuesta incorrecta\n");
williequesada 0:efc80e1a2f73 156 wait_ms(2000);
williequesada 0:efc80e1a2f73 157
williequesada 0:efc80e1a2f73 158 for(int i=0; i<Computer_Counter; i++) {
williequesada 0:efc80e1a2f73 159 if(Gsm.writeable()) {
williequesada 0:efc80e1a2f73 160 Gsm.putc(Computer_Buffer[i]);
williequesada 0:efc80e1a2f73 161 }
williequesada 0:efc80e1a2f73 162 }
williequesada 0:efc80e1a2f73 163 Sim900_Counter=0;
williequesada 0:efc80e1a2f73 164 TimeOut=0;
williequesada 0:efc80e1a2f73 165 RightAnswer1=0;
williequesada 0:efc80e1a2f73 166 RightAnswer2=0;
williequesada 0:efc80e1a2f73 167 Inicio=BaseClock.read_ms();
williequesada 0:efc80e1a2f73 168
williequesada 0:efc80e1a2f73 169 while(true) { // Esta funcion detiene el programa y espera una respuesta
williequesada 0:efc80e1a2f73 170 Fin=BaseClock.read_ms();
williequesada 0:efc80e1a2f73 171 Transcurrido=Fin-Inicio;
williequesada 0:efc80e1a2f73 172 if(Sim900_Counter>0) {
williequesada 0:efc80e1a2f73 173 TimeOut=1;
williequesada 0:efc80e1a2f73 174 break;
williequesada 0:efc80e1a2f73 175 }
williequesada 0:efc80e1a2f73 176 if(Transcurrido>Espera) {
williequesada 0:efc80e1a2f73 177 TimeOut=0;
williequesada 0:efc80e1a2f73 178 break;
williequesada 0:efc80e1a2f73 179 }
williequesada 0:efc80e1a2f73 180 }
williequesada 0:efc80e1a2f73 181 wait_ms(Delay);
williequesada 0:efc80e1a2f73 182 if(TimeOut) {
williequesada 0:efc80e1a2f73 183 for(int i=0; i<Sim900_Counter; i++) {
williequesada 0:efc80e1a2f73 184 Computer.putc(Sim900_Buffer[i]);
williequesada 0:efc80e1a2f73 185 if(Sim900_Buffer[i]==Answer[0]) {
williequesada 0:efc80e1a2f73 186 RightAnswer1=1;
williequesada 0:efc80e1a2f73 187 }
williequesada 0:efc80e1a2f73 188 if(Sim900_Buffer[i]==Answer[1]) {
williequesada 0:efc80e1a2f73 189 RightAnswer2=1;
williequesada 0:efc80e1a2f73 190 }
williequesada 0:efc80e1a2f73 191 }
williequesada 0:efc80e1a2f73 192 if(RightAnswer1 && RightAnswer2) {
williequesada 0:efc80e1a2f73 193 Computer.printf("OK-> Respuesta correcta\n");
williequesada 0:efc80e1a2f73 194 Computer_Counter=0;
williequesada 0:efc80e1a2f73 195 } else {
williequesada 0:efc80e1a2f73 196 Computer.printf("ERROR-> Respuesta incorrecta\n");
williequesada 0:efc80e1a2f73 197 Computer_Counter=0;
williequesada 0:efc80e1a2f73 198 }
williequesada 0:efc80e1a2f73 199 } else {
williequesada 0:efc80e1a2f73 200 Computer.printf("ERROR-> Sin respuesta\n");
williequesada 0:efc80e1a2f73 201 Computer_Counter=0;
williequesada 0:efc80e1a2f73 202 }
williequesada 0:efc80e1a2f73 203 }
williequesada 0:efc80e1a2f73 204 } else {
williequesada 0:efc80e1a2f73 205 Computer.printf("ERROR-> Sin respuesta\n");
williequesada 0:efc80e1a2f73 206 Computer_Counter=0;
williequesada 0:efc80e1a2f73 207 }
williequesada 0:efc80e1a2f73 208 }
williequesada 0:efc80e1a2f73 209
williequesada 0:efc80e1a2f73 210 int main()
williequesada 0:efc80e1a2f73 211 {
williequesada 0:efc80e1a2f73 212 Gsm.attach(&Interrupt_Sim900);
williequesada 0:efc80e1a2f73 213 Computer.attach(&Interrupt_Computer);
williequesada 0:efc80e1a2f73 214 Button.fall(&EncenderSIM900);
williequesada 0:efc80e1a2f73 215 BaseClock.start();
williequesada 0:efc80e1a2f73 216 Computer.printf("USB-TTL\n");
williequesada 0:efc80e1a2f73 217 ResetSIM900=0;
williequesada 0:efc80e1a2f73 218 while(1) {
williequesada 0:efc80e1a2f73 219 if(Completo){
williequesada 0:efc80e1a2f73 220 Completo=false;
williequesada 0:efc80e1a2f73 221 PrintSerialRepeat("ok",500,2000);
williequesada 0:efc80e1a2f73 222 }
williequesada 0:efc80e1a2f73 223 }
williequesada 0:efc80e1a2f73 224 }