Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@0:efc80e1a2f73, 2019-06-04 (annotated)
- Committer:
- williequesada
- Date:
- Tue Jun 04 15:27:32 2019 +0000
- Revision:
- 0:efc80e1a2f73
compartir a Pablo
Who changed what in which revision?
| User | Revision | Line number | New 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 | } |
