Novo
Dependencies: EthernetInterface mbed-rtos mbed sample_handler
main.cpp@0:71e5f03dd7a0, 2018-01-16 (annotated)
- Committer:
- faverosantos
- Date:
- Tue Jan 16 19:50:00 2018 +0000
- Revision:
- 0:71e5f03dd7a0
Novo
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
faverosantos | 0:71e5f03dd7a0 | 1 | #include "mylibs/globais.h" |
faverosantos | 0:71e5f03dd7a0 | 2 | #include "sample_handler.h" |
faverosantos | 0:71e5f03dd7a0 | 3 | #include "EthernetInterface.h" |
faverosantos | 0:71e5f03dd7a0 | 4 | #include "string.h" |
faverosantos | 0:71e5f03dd7a0 | 5 | #include "rtos.h" |
faverosantos | 0:71e5f03dd7a0 | 6 | #include "mbed.h" |
faverosantos | 0:71e5f03dd7a0 | 7 | #include "LPC407x_8x_177x_8x.h" |
faverosantos | 0:71e5f03dd7a0 | 8 | #include "system_LPC407x_8x_177x_8x.h" |
faverosantos | 0:71e5f03dd7a0 | 9 | #include <iostream> |
faverosantos | 0:71e5f03dd7a0 | 10 | |
faverosantos | 0:71e5f03dd7a0 | 11 | typedef struct ethernet_handler_s{ |
faverosantos | 0:71e5f03dd7a0 | 12 | int n_written; |
faverosantos | 0:71e5f03dd7a0 | 13 | } my_ethernet_handler_t; |
faverosantos | 0:71e5f03dd7a0 | 14 | |
faverosantos | 0:71e5f03dd7a0 | 15 | /* Instanciar objetos */ |
faverosantos | 0:71e5f03dd7a0 | 16 | SampleHandler my_sample_handler(p15); |
faverosantos | 0:71e5f03dd7a0 | 17 | my_ethernet_handler_t my_ethernet_handler; |
faverosantos | 0:71e5f03dd7a0 | 18 | |
faverosantos | 0:71e5f03dd7a0 | 19 | DigitalOut led_verde_1(LED1); |
faverosantos | 0:71e5f03dd7a0 | 20 | DigitalOut led_verde_2(LED2); |
faverosantos | 0:71e5f03dd7a0 | 21 | DigitalOut my_pin(p8); |
faverosantos | 0:71e5f03dd7a0 | 22 | |
faverosantos | 0:71e5f03dd7a0 | 23 | Thread adc_thread; |
faverosantos | 0:71e5f03dd7a0 | 24 | Thread transfer_thread; |
faverosantos | 0:71e5f03dd7a0 | 25 | EthernetInterface eth; |
faverosantos | 0:71e5f03dd7a0 | 26 | TCPSocketConnection sock; |
faverosantos | 0:71e5f03dd7a0 | 27 | |
faverosantos | 0:71e5f03dd7a0 | 28 | Serial serial_debug(USBTX, USBRX); |
faverosantos | 0:71e5f03dd7a0 | 29 | Ticker ticker_sampler; |
faverosantos | 0:71e5f03dd7a0 | 30 | Timer benchmark; |
faverosantos | 0:71e5f03dd7a0 | 31 | |
faverosantos | 0:71e5f03dd7a0 | 32 | |
faverosantos | 0:71e5f03dd7a0 | 33 | /* Funções */ |
faverosantos | 0:71e5f03dd7a0 | 34 | void conf_serial_debug(void); |
faverosantos | 0:71e5f03dd7a0 | 35 | void conf_ethernet(void); |
faverosantos | 0:71e5f03dd7a0 | 36 | void conf_thread(void); |
faverosantos | 0:71e5f03dd7a0 | 37 | void conf_timer(void); |
faverosantos | 0:71e5f03dd7a0 | 38 | |
faverosantos | 0:71e5f03dd7a0 | 39 | void adc_thread_launch(void); |
faverosantos | 0:71e5f03dd7a0 | 40 | void sample_int(void); |
faverosantos | 0:71e5f03dd7a0 | 41 | void transfer_int(void); |
faverosantos | 0:71e5f03dd7a0 | 42 | void print_readout(void); |
faverosantos | 0:71e5f03dd7a0 | 43 | void adc_sample_now(void); |
faverosantos | 0:71e5f03dd7a0 | 44 | void sample_now(void); |
faverosantos | 0:71e5f03dd7a0 | 45 | void flip(void); |
faverosantos | 0:71e5f03dd7a0 | 46 | |
faverosantos | 0:71e5f03dd7a0 | 47 | bool sampled = false; |
faverosantos | 0:71e5f03dd7a0 | 48 | |
faverosantos | 0:71e5f03dd7a0 | 49 | int main() { |
faverosantos | 0:71e5f03dd7a0 | 50 | my_ethernet_handler.n_written = 9; |
faverosantos | 0:71e5f03dd7a0 | 51 | conf_serial_debug(); |
faverosantos | 0:71e5f03dd7a0 | 52 | serial_debug.printf("\033[2J"); // Limpa tela, em ANSI |
faverosantos | 0:71e5f03dd7a0 | 53 | serial_debug.printf("\033[H"); // Cursor para home |
faverosantos | 0:71e5f03dd7a0 | 54 | serial_debug.printf("\r -- Aloha!! \n"); |
faverosantos | 0:71e5f03dd7a0 | 55 | //conf_ethernet(); |
faverosantos | 0:71e5f03dd7a0 | 56 | //serial_debug.printf("\r -- Ethernet OK!! \n"); |
faverosantos | 0:71e5f03dd7a0 | 57 | //conf_thread(); |
faverosantos | 0:71e5f03dd7a0 | 58 | //serial_debug.printf("\r -- Thread OK!! \n"); |
faverosantos | 0:71e5f03dd7a0 | 59 | conf_timer(); |
faverosantos | 0:71e5f03dd7a0 | 60 | serial_debug.printf("\r -- Timer OK!! \n"); |
faverosantos | 0:71e5f03dd7a0 | 61 | |
faverosantos | 0:71e5f03dd7a0 | 62 | |
faverosantos | 0:71e5f03dd7a0 | 63 | |
faverosantos | 0:71e5f03dd7a0 | 64 | led_verde_1 = 0; |
faverosantos | 0:71e5f03dd7a0 | 65 | led_verde_2 = 1; |
faverosantos | 0:71e5f03dd7a0 | 66 | my_pin = 0; |
faverosantos | 0:71e5f03dd7a0 | 67 | |
faverosantos | 0:71e5f03dd7a0 | 68 | while(1) { |
faverosantos | 0:71e5f03dd7a0 | 69 | my_pin = !my_pin; |
faverosantos | 0:71e5f03dd7a0 | 70 | |
faverosantos | 0:71e5f03dd7a0 | 71 | /*if (sampled == true){ |
faverosantos | 0:71e5f03dd7a0 | 72 | sampled = false; |
faverosantos | 0:71e5f03dd7a0 | 73 | serial_debug.printf("\r -- Frequencia de amostragem (Hz): %f \n", 1/benchmark.read()); |
faverosantos | 0:71e5f03dd7a0 | 74 | benchmark.reset(); |
faverosantos | 0:71e5f03dd7a0 | 75 | my_pin = 1; |
faverosantos | 0:71e5f03dd7a0 | 76 | }*/ |
faverosantos | 0:71e5f03dd7a0 | 77 | //adc_thread.signal_set(0x1); |
faverosantos | 0:71e5f03dd7a0 | 78 | /*if (my_ethernet_handler.n_written == -1){ |
faverosantos | 0:71e5f03dd7a0 | 79 | sock.close(); |
faverosantos | 0:71e5f03dd7a0 | 80 | serial_debug.printf("\r -- Socket closed!\n"); |
faverosantos | 0:71e5f03dd7a0 | 81 | |
faverosantos | 0:71e5f03dd7a0 | 82 | eth.disconnect(); |
faverosantos | 0:71e5f03dd7a0 | 83 | serial_debug.printf("\r -- Ethernet disconnected!\n"); |
faverosantos | 0:71e5f03dd7a0 | 84 | break; |
faverosantos | 0:71e5f03dd7a0 | 85 | }*/ |
faverosantos | 0:71e5f03dd7a0 | 86 | } |
faverosantos | 0:71e5f03dd7a0 | 87 | //serial_debug.printf("\r -- Programa em loop infinito!\n"); |
faverosantos | 0:71e5f03dd7a0 | 88 | //while(1){} |
faverosantos | 0:71e5f03dd7a0 | 89 | } |
faverosantos | 0:71e5f03dd7a0 | 90 | |
faverosantos | 0:71e5f03dd7a0 | 91 | void print_readout(void){ |
faverosantos | 0:71e5f03dd7a0 | 92 | serial_debug.printf("\r -- Valor de sample: %f \n", my_sample_handler.one_sample_readout); |
faverosantos | 0:71e5f03dd7a0 | 93 | } |
faverosantos | 0:71e5f03dd7a0 | 94 | |
faverosantos | 0:71e5f03dd7a0 | 95 | void sample_int(void){ |
faverosantos | 0:71e5f03dd7a0 | 96 | static uint16_t static_local_counter = 0; |
faverosantos | 0:71e5f03dd7a0 | 97 | while(1){ |
faverosantos | 0:71e5f03dd7a0 | 98 | //benchmark.start(); |
faverosantos | 0:71e5f03dd7a0 | 99 | //Thread::wait(1); |
faverosantos | 0:71e5f03dd7a0 | 100 | Thread::signal_wait(0x1); |
faverosantos | 0:71e5f03dd7a0 | 101 | my_sample_handler.get_sample(); |
faverosantos | 0:71e5f03dd7a0 | 102 | |
faverosantos | 0:71e5f03dd7a0 | 103 | //Thread::signal_wait(0x1); |
faverosantos | 0:71e5f03dd7a0 | 104 | |
faverosantos | 0:71e5f03dd7a0 | 105 | |
faverosantos | 0:71e5f03dd7a0 | 106 | /*my_sample_handler.sampling_buffer[static_local_counter] = my_sample_handler.one_sample_readout; |
faverosantos | 0:71e5f03dd7a0 | 107 | //print_readout(); |
faverosantos | 0:71e5f03dd7a0 | 108 | //serial_debug.printf("\r -- Posicao do buffer: %d \n", static_local_counter); |
faverosantos | 0:71e5f03dd7a0 | 109 | static_local_counter = static_local_counter + 1; |
faverosantos | 0:71e5f03dd7a0 | 110 | |
faverosantos | 0:71e5f03dd7a0 | 111 | if (static_local_counter == BUFFER_SIZE){ |
faverosantos | 0:71e5f03dd7a0 | 112 | static_local_counter = 0; |
faverosantos | 0:71e5f03dd7a0 | 113 | my_sample_handler.is_buffer_filled = true; // aqui era true |
faverosantos | 0:71e5f03dd7a0 | 114 | transfer_thread.signal_set(0x1); |
faverosantos | 0:71e5f03dd7a0 | 115 | //serial_debug.printf("\r -- ADC_THREAD_SIGNAL: 1 \n"); |
faverosantos | 0:71e5f03dd7a0 | 116 | }*/ |
faverosantos | 0:71e5f03dd7a0 | 117 | //benchmark.stop(); |
faverosantos | 0:71e5f03dd7a0 | 118 | //serial_debug.printf("\r -- Frequencia de amostragem (Hz): %f \n", 1/benchmark.read()); |
faverosantos | 0:71e5f03dd7a0 | 119 | //benchmark.reset(); |
faverosantos | 0:71e5f03dd7a0 | 120 | } |
faverosantos | 0:71e5f03dd7a0 | 121 | } |
faverosantos | 0:71e5f03dd7a0 | 122 | |
faverosantos | 0:71e5f03dd7a0 | 123 | void transfer_int(void){ |
faverosantos | 0:71e5f03dd7a0 | 124 | uint16_t x; |
faverosantos | 0:71e5f03dd7a0 | 125 | std::string str; |
faverosantos | 0:71e5f03dd7a0 | 126 | char * gigante = (char *)calloc(BUFFER_SIZE * 8, sizeof(char)); //BUFFER_SIZE * 32, sizeof(char) |
faverosantos | 0:71e5f03dd7a0 | 127 | char tmp[8]; |
faverosantos | 0:71e5f03dd7a0 | 128 | |
faverosantos | 0:71e5f03dd7a0 | 129 | while(1) { |
faverosantos | 0:71e5f03dd7a0 | 130 | Thread::signal_wait(0x1); |
faverosantos | 0:71e5f03dd7a0 | 131 | led_verde_1 = !led_verde_1; |
faverosantos | 0:71e5f03dd7a0 | 132 | if (my_sample_handler.is_buffer_filled == true){ |
faverosantos | 0:71e5f03dd7a0 | 133 | my_sample_handler.is_buffer_filled = false; |
faverosantos | 0:71e5f03dd7a0 | 134 | |
faverosantos | 0:71e5f03dd7a0 | 135 | str += "i\t"; |
faverosantos | 0:71e5f03dd7a0 | 136 | for (x = 0; x < BUFFER_SIZE; x++) { |
faverosantos | 0:71e5f03dd7a0 | 137 | if (my_sample_handler.sampling_buffer[x] < 0) |
faverosantos | 0:71e5f03dd7a0 | 138 | { |
faverosantos | 0:71e5f03dd7a0 | 139 | my_sample_handler.sampling_buffer[x] = 0; |
faverosantos | 0:71e5f03dd7a0 | 140 | } |
faverosantos | 0:71e5f03dd7a0 | 141 | //memset(tmp, 0, sizeof(tmp)); |
faverosantos | 0:71e5f03dd7a0 | 142 | sprintf(tmp, "%f\t", my_sample_handler.sampling_buffer[x]); |
faverosantos | 0:71e5f03dd7a0 | 143 | str += tmp; |
faverosantos | 0:71e5f03dd7a0 | 144 | } |
faverosantos | 0:71e5f03dd7a0 | 145 | str += "f\n"; |
faverosantos | 0:71e5f03dd7a0 | 146 | |
faverosantos | 0:71e5f03dd7a0 | 147 | std::strcpy(gigante, str.c_str()); |
faverosantos | 0:71e5f03dd7a0 | 148 | my_ethernet_handler.n_written = sock.send_all(gigante, BUFFER_SIZE*9+4); |
faverosantos | 0:71e5f03dd7a0 | 149 | str.clear(); |
faverosantos | 0:71e5f03dd7a0 | 150 | if(my_ethernet_handler.n_written == -1){ |
faverosantos | 0:71e5f03dd7a0 | 151 | |
faverosantos | 0:71e5f03dd7a0 | 152 | // TODO Não está funcionando esse clean close aqui |
faverosantos | 0:71e5f03dd7a0 | 153 | transfer_thread.terminate(); |
faverosantos | 0:71e5f03dd7a0 | 154 | serial_debug.printf("\r -- Thread de transferencia terminada!\n"); |
faverosantos | 0:71e5f03dd7a0 | 155 | break; |
faverosantos | 0:71e5f03dd7a0 | 156 | } |
faverosantos | 0:71e5f03dd7a0 | 157 | } |
faverosantos | 0:71e5f03dd7a0 | 158 | } |
faverosantos | 0:71e5f03dd7a0 | 159 | } |
faverosantos | 0:71e5f03dd7a0 | 160 | |
faverosantos | 0:71e5f03dd7a0 | 161 | void conf_serial_debug(void){ |
faverosantos | 0:71e5f03dd7a0 | 162 | serial_debug.baud(921600); |
faverosantos | 0:71e5f03dd7a0 | 163 | } |
faverosantos | 0:71e5f03dd7a0 | 164 | |
faverosantos | 0:71e5f03dd7a0 | 165 | void conf_thread(void){ |
faverosantos | 0:71e5f03dd7a0 | 166 | adc_thread.start(sample_int); |
faverosantos | 0:71e5f03dd7a0 | 167 | transfer_thread.start(transfer_int); |
faverosantos | 0:71e5f03dd7a0 | 168 | } |
faverosantos | 0:71e5f03dd7a0 | 169 | |
faverosantos | 0:71e5f03dd7a0 | 170 | void adc_thread_launch(void){ |
faverosantos | 0:71e5f03dd7a0 | 171 | adc_thread.signal_set(0x1); |
faverosantos | 0:71e5f03dd7a0 | 172 | serial_debug.printf("\r -- Tock!!\n"); |
faverosantos | 0:71e5f03dd7a0 | 173 | } |
faverosantos | 0:71e5f03dd7a0 | 174 | |
faverosantos | 0:71e5f03dd7a0 | 175 | void sample_now(void){ |
faverosantos | 0:71e5f03dd7a0 | 176 | //serial_debug.printf("\r -- Tick!!\n"); |
faverosantos | 0:71e5f03dd7a0 | 177 | my_pin = 0; |
faverosantos | 0:71e5f03dd7a0 | 178 | sampled = true; |
faverosantos | 0:71e5f03dd7a0 | 179 | //benchmark.start(); |
faverosantos | 0:71e5f03dd7a0 | 180 | my_sample_handler.get_sample(); |
faverosantos | 0:71e5f03dd7a0 | 181 | //benchmark.stop(); |
faverosantos | 0:71e5f03dd7a0 | 182 | //serial_debug.printf("\r -- Frequencia de amostragem (Hz): %f \n", 1/benchmark.read()); |
faverosantos | 0:71e5f03dd7a0 | 183 | //benchmark.reset(); |
faverosantos | 0:71e5f03dd7a0 | 184 | //my_pin = !1; |
faverosantos | 0:71e5f03dd7a0 | 185 | } |
faverosantos | 0:71e5f03dd7a0 | 186 | |
faverosantos | 0:71e5f03dd7a0 | 187 | void flip(void){ |
faverosantos | 0:71e5f03dd7a0 | 188 | led_verde_1 = !led_verde_1; |
faverosantos | 0:71e5f03dd7a0 | 189 | led_verde_2 = !led_verde_2; |
faverosantos | 0:71e5f03dd7a0 | 190 | //serial_debug.printf("\r -- Tick!!\n"); |
faverosantos | 0:71e5f03dd7a0 | 191 | } |
faverosantos | 0:71e5f03dd7a0 | 192 | |
faverosantos | 0:71e5f03dd7a0 | 193 | void conf_timer(void){ |
faverosantos | 0:71e5f03dd7a0 | 194 | /*ticker_sampler.attach_us(&sample_now,100); |
faverosantos | 0:71e5f03dd7a0 | 195 | serial_debug.printf("\r -- Tock!!\n");*/ |
faverosantos | 0:71e5f03dd7a0 | 196 | } |
faverosantos | 0:71e5f03dd7a0 | 197 | |
faverosantos | 0:71e5f03dd7a0 | 198 | void conf_ethernet(void){ |
faverosantos | 0:71e5f03dd7a0 | 199 | int16_t is_connected = 9; |
faverosantos | 0:71e5f03dd7a0 | 200 | |
faverosantos | 0:71e5f03dd7a0 | 201 | /* Ethernet init */ |
faverosantos | 0:71e5f03dd7a0 | 202 | eth.init("192.168.201.59", "255.255.255.0", "192.168.201.253"); |
faverosantos | 0:71e5f03dd7a0 | 203 | serial_debug.printf("\r -- Mac Address is: %s \n", eth.getMACAddress()); |
faverosantos | 0:71e5f03dd7a0 | 204 | |
faverosantos | 0:71e5f03dd7a0 | 205 | is_connected = eth.connect(); |
faverosantos | 0:71e5f03dd7a0 | 206 | if (is_connected == 0){ |
faverosantos | 0:71e5f03dd7a0 | 207 | serial_debug.printf("\r -- Connection OK!! \n"); |
faverosantos | 0:71e5f03dd7a0 | 208 | }else if (is_connected != 0){ |
faverosantos | 0:71e5f03dd7a0 | 209 | serial_debug.printf("\r -- Connect NOK!! \n"); |
faverosantos | 0:71e5f03dd7a0 | 210 | serial_debug.printf("\r -- Error code: %d\n", is_connected); |
faverosantos | 0:71e5f03dd7a0 | 211 | } |
faverosantos | 0:71e5f03dd7a0 | 212 | serial_debug.printf("\r -- IP Address is: %s \n", eth.getIPAddress()); |
faverosantos | 0:71e5f03dd7a0 | 213 | serial_debug.printf("\r -- Mask Address is: %s \n", eth.getNetworkMask()); |
faverosantos | 0:71e5f03dd7a0 | 214 | serial_debug.printf("\r -- Gateway Address is: %s \n", eth.getGateway()); |
faverosantos | 0:71e5f03dd7a0 | 215 | |
faverosantos | 0:71e5f03dd7a0 | 216 | /* Socket init */ |
faverosantos | 0:71e5f03dd7a0 | 217 | while (sock.connect(ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT) < 0) { |
faverosantos | 0:71e5f03dd7a0 | 218 | serial_debug.printf("\r -- Unable to connect to (%s) on port (%d)\n", ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT); |
faverosantos | 0:71e5f03dd7a0 | 219 | wait(1); |
faverosantos | 0:71e5f03dd7a0 | 220 | } |
faverosantos | 0:71e5f03dd7a0 | 221 | serial_debug.printf("\r -- Connected to Server at %s\n",ECHO_SERVER_ADDRESS); |
faverosantos | 0:71e5f03dd7a0 | 222 | } |