First Version
Dependencies: EthernetInterface mbed-rtos mbed
main.cpp@1:ce016c668e34, 2015-07-24 (annotated)
- Committer:
- rebonatto
- Date:
- Fri Jul 24 16:39:11 2015 +0000
- Revision:
- 1:ce016c668e34
- Parent:
- 0:9df41090ba33
- Child:
- 2:bf4bbf7d6793
Second version. Test of RFID Enable.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
rebonatto | 0:9df41090ba33 | 1 | /* |
rebonatto | 0:9df41090ba33 | 2 | Novo projeto PMED_Calibra |
rebonatto | 0:9df41090ba33 | 3 | Criado para: |
rebonatto | 0:9df41090ba33 | 4 | - Auxiliar no processo de calibração dos valores de offset e ganho das tomadas |
rebonatto | 0:9df41090ba33 | 5 | - Faciliar os testes da leitura de RFID nas tomadas |
rebonatto | 0:9df41090ba33 | 6 | |
rebonatto | 0:9df41090ba33 | 7 | */ |
rebonatto | 0:9df41090ba33 | 8 | #include <stdio.h> |
rebonatto | 0:9df41090ba33 | 9 | |
rebonatto | 0:9df41090ba33 | 10 | #include "mbed.h" |
rebonatto | 0:9df41090ba33 | 11 | #include "rtos.h" |
rebonatto | 0:9df41090ba33 | 12 | #include "cmsis_os.h" |
rebonatto | 0:9df41090ba33 | 13 | #include "EthernetInterface.h" |
rebonatto | 0:9df41090ba33 | 14 | #include "Settings.h" |
rebonatto | 0:9df41090ba33 | 15 | #include "Capture.h" |
rebonatto | 0:9df41090ba33 | 16 | #include "Http_post.h" |
rebonatto | 0:9df41090ba33 | 17 | #include "CommTCP.h" |
rebonatto | 0:9df41090ba33 | 18 | #include "SignalProcessor.h" |
rebonatto | 0:9df41090ba33 | 19 | #include "EventDetector.h" |
rebonatto | 0:9df41090ba33 | 20 | |
rebonatto | 0:9df41090ba33 | 21 | extern "C" void mbed_reset(); |
rebonatto | 0:9df41090ba33 | 22 | |
rebonatto | 0:9df41090ba33 | 23 | EthernetInterface eth; |
rebonatto | 0:9df41090ba33 | 24 | |
rebonatto | 0:9df41090ba33 | 25 | void InitializeEthernetLink(); |
rebonatto | 0:9df41090ba33 | 26 | int SelectOption(); |
rebonatto | 1:ce016c668e34 | 27 | int SelectOutlet(); |
rebonatto | 0:9df41090ba33 | 28 | void ShowRMSValues(); |
rebonatto | 0:9df41090ba33 | 29 | void ShowMeanValues(); |
rebonatto | 0:9df41090ba33 | 30 | void ShowSamplesFromChannel(); |
rebonatto | 0:9df41090ba33 | 31 | int SelectChannel(); |
rebonatto | 0:9df41090ba33 | 32 | void SetOffset(); |
rebonatto | 0:9df41090ba33 | 33 | void SetGain(); |
rebonatto | 0:9df41090ba33 | 34 | void TestRFID(); |
rebonatto | 1:ce016c668e34 | 35 | void TestManyTimesRFID(); |
rebonatto | 0:9df41090ba33 | 36 | |
rebonatto | 0:9df41090ba33 | 37 | void thread1(void const *args) |
rebonatto | 0:9df41090ba33 | 38 | { |
rebonatto | 0:9df41090ba33 | 39 | DigitalOut led1(LED1); |
rebonatto | 0:9df41090ba33 | 40 | int op = 0; |
rebonatto | 0:9df41090ba33 | 41 | |
rebonatto | 0:9df41090ba33 | 42 | Capture::Initialize(); |
rebonatto | 0:9df41090ba33 | 43 | |
rebonatto | 0:9df41090ba33 | 44 | while(1) |
rebonatto | 0:9df41090ba33 | 45 | { |
rebonatto | 0:9df41090ba33 | 46 | op = SelectOption(); |
rebonatto | 0:9df41090ba33 | 47 | |
rebonatto | 0:9df41090ba33 | 48 | switch (op) { |
rebonatto | 0:9df41090ba33 | 49 | case (1): ShowRMSValues(); break; |
rebonatto | 0:9df41090ba33 | 50 | case (2): ShowMeanValues(); break; |
rebonatto | 0:9df41090ba33 | 51 | case (3): ShowSamplesFromChannel(); break; |
rebonatto | 0:9df41090ba33 | 52 | case (4): SetOffset(); break; |
rebonatto | 0:9df41090ba33 | 53 | case (5): SetGain(); break; |
rebonatto | 0:9df41090ba33 | 54 | case (6): TestRFID(); break; |
rebonatto | 1:ce016c668e34 | 55 | case (7): TestManyTimesRFID(); break; |
rebonatto | 0:9df41090ba33 | 56 | case (8): mbed_reset(); break; |
rebonatto | 0:9df41090ba33 | 57 | } |
rebonatto | 0:9df41090ba33 | 58 | } |
rebonatto | 0:9df41090ba33 | 59 | } |
rebonatto | 0:9df41090ba33 | 60 | |
rebonatto | 0:9df41090ba33 | 61 | int main() { |
rebonatto | 0:9df41090ba33 | 62 | FILE *f; |
rebonatto | 0:9df41090ba33 | 63 | //Set Highest Priority |
rebonatto | 0:9df41090ba33 | 64 | //osThreadSetPriority(osThreadGetId(),osPriorityHigh); |
rebonatto | 0:9df41090ba33 | 65 | |
rebonatto | 0:9df41090ba33 | 66 | Settings::ReadFile(); |
rebonatto | 0:9df41090ba33 | 67 | //printf("Passou Settings, carregou arquivo\n"); |
rebonatto | 0:9df41090ba33 | 68 | //Settings::ShowValues(); |
rebonatto | 0:9df41090ba33 | 69 | |
rebonatto | 0:9df41090ba33 | 70 | InitializeEthernetLink(); |
rebonatto | 0:9df41090ba33 | 71 | //printf("Inicializou link Ethernet\n"); |
rebonatto | 0:9df41090ba33 | 72 | printf("\nIP Address is NEW %s\n", eth.getIPAddress()); |
rebonatto | 0:9df41090ba33 | 73 | |
rebonatto | 0:9df41090ba33 | 74 | //Start HTTP POST service |
rebonatto | 0:9df41090ba33 | 75 | //Thread http_post(HttpPost::HttpPost_Thread); |
rebonatto | 0:9df41090ba33 | 76 | |
rebonatto | 0:9df41090ba33 | 77 | //Start TCP daemon service |
rebonatto | 0:9df41090ba33 | 78 | //Thread TcpService(CommTCP::CommTCP_Thread); |
rebonatto | 0:9df41090ba33 | 79 | |
rebonatto | 0:9df41090ba33 | 80 | |
rebonatto | 0:9df41090ba33 | 81 | //Start Telnet Service |
rebonatto | 0:9df41090ba33 | 82 | //Thread telnetserver(TelnetServer::TelnetServer_Thread); |
rebonatto | 0:9df41090ba33 | 83 | //Start TFTP Service |
rebonatto | 0:9df41090ba33 | 84 | |
rebonatto | 0:9df41090ba33 | 85 | /* |
rebonatto | 0:9df41090ba33 | 86 | unsigned short vet[256] = {2105,2105,2113,2127,2127,2125,2112,2113,2130,2130,2123,2112,2112,2128,2128,2123,2112,2113,2136,2136,2374,2551,2671,2869,2887,3036,2964,2964,2964,3145,3145,3206,3209,3298,3298,3264,3261,3208,3239,3239,3197,3197,3113,3032,3065,3065,3000,2901,2943,2943,2900,2852,2844,2863,2863,2838,2764,2791,2724,2724,2668,2710,2636,2658,2658,2606,2527,2443,2434,2434,2258,2066,2061,2080,2080,2063,2055,2055,2070,2070,2064,2051,2054,2069,2069,2062,2054,2058,2066,2309,2062,2052,2054,2067,2067,2063,2051,2049,2068,2068,2060,2053,2050,2067,2066,2069,2051,2053,2070,2070,2064,2050,2053,2070,2070,2062,2052,2055,2068,2068,2065,2052,2057,2072,2072,2064,2054,2054,2072,2072,2064,2053,2052,2069,2069,2064,2052,2053,2064,2064,2062,2049,2051,2067,2067,2059,2051,2050,2068,2068,2058,2046,2050,2068,2068,2061,2052,2058,2068,2068,2059,2052,2053,2067,2067,1744,1526,1471,1289,1289,1137,1142,1055,1120,1120,997,967,894,941,941,928,887,1001,949,949,1028,1105,1079,1191,1191,1223,1211,1223,1267,1267,1325,1267,1356,1327,1327,1369,1439,1381,1498,1498,1503,1503,1527,1545,1545,1635,1650,1778,1792,1792,1971,2108,2109,2126,2126,2124,2117,2118,2131,2131,2126,2118,2118,2138,2138,2134,2124,2114,2135,2135,2129,2121,2120,2136,2136,2128,2122,2122,2143,2120,2130,2120,2121,2139,2139,2130,2119,2121,2136,2136,2129}; |
rebonatto | 0:9df41090ba33 | 87 | float sen[12],cos[12],vm; |
rebonatto | 0:9df41090ba33 | 88 | SignalProcessor::CalculateFFT(vet,sen,cos,&vm,1); |
rebonatto | 0:9df41090ba33 | 89 | |
rebonatto | 0:9df41090ba33 | 90 | printf("VM = %f\n",vm); |
rebonatto | 0:9df41090ba33 | 91 | for(int i=0;i<12;i++) |
rebonatto | 0:9df41090ba33 | 92 | { |
rebonatto | 0:9df41090ba33 | 93 | printf("SEN%d = %f, COS%d = %f\n",i,sen[i],i,cos[i]); |
rebonatto | 0:9df41090ba33 | 94 | } |
rebonatto | 0:9df41090ba33 | 95 | */ |
rebonatto | 0:9df41090ba33 | 96 | //Jump to the capture routine(will run on this thread) |
rebonatto | 0:9df41090ba33 | 97 | thread1(NULL); |
rebonatto | 0:9df41090ba33 | 98 | |
rebonatto | 0:9df41090ba33 | 99 | while(1){//never reaches here |
rebonatto | 0:9df41090ba33 | 100 | printf("Reset\n"); |
rebonatto | 0:9df41090ba33 | 101 | f = fopen(FILENAMERESET, "a"); |
rebonatto | 0:9df41090ba33 | 102 | if (f == NULL) |
rebonatto | 0:9df41090ba33 | 103 | f = fopen(FILENAMERESET, "w"); |
rebonatto | 0:9df41090ba33 | 104 | fprintf(f, "Laco Errado\n"); |
rebonatto | 0:9df41090ba33 | 105 | fclose(f); |
rebonatto | 0:9df41090ba33 | 106 | Thread::yield(); |
rebonatto | 0:9df41090ba33 | 107 | } |
rebonatto | 0:9df41090ba33 | 108 | } |
rebonatto | 1:ce016c668e34 | 109 | void TestManyTimesRFID(){ |
rebonatto | 1:ce016c668e34 | 110 | char rfid_number[9], reads[100][9]; |
rebonatto | 1:ce016c668e34 | 111 | int vezes[100]; |
rebonatto | 1:ce016c668e34 | 112 | bool achou; |
rebonatto | 1:ce016c668e34 | 113 | int num_tom = 0, difs, i, j; |
rebonatto | 1:ce016c668e34 | 114 | |
rebonatto | 1:ce016c668e34 | 115 | num_tom = SelectOutlet(); |
rebonatto | 1:ce016c668e34 | 116 | difs = 0; |
rebonatto | 1:ce016c668e34 | 117 | for(i=0; i < 10; i++){ |
rebonatto | 1:ce016c668e34 | 118 | vezes[i] = 0; |
rebonatto | 1:ce016c668e34 | 119 | strcpy(reads[i], "VVVVVVVV"); // 'V' isn't valid digit (Hex) |
rebonatto | 1:ce016c668e34 | 120 | } |
rebonatto | 1:ce016c668e34 | 121 | for(i =0; i < 100; i++){ |
rebonatto | 1:ce016c668e34 | 122 | Capture::ReadRFID(num_tom,rfid_number); |
rebonatto | 1:ce016c668e34 | 123 | //printf("\n{%s} - difs %d", rfid_number, difs); |
rebonatto | 1:ce016c668e34 | 124 | achou = false; |
rebonatto | 1:ce016c668e34 | 125 | for(j=0; j < difs; j++){ |
rebonatto | 1:ce016c668e34 | 126 | if (strcmp(rfid_number, reads[j]) == 0){ |
rebonatto | 1:ce016c668e34 | 127 | vezes[j] = vezes[j] + 1; |
rebonatto | 1:ce016c668e34 | 128 | achou = true; |
rebonatto | 1:ce016c668e34 | 129 | } |
rebonatto | 1:ce016c668e34 | 130 | } |
rebonatto | 1:ce016c668e34 | 131 | if (! achou){ |
rebonatto | 1:ce016c668e34 | 132 | strcpy(reads[j], rfid_number); |
rebonatto | 1:ce016c668e34 | 133 | vezes[j] = 1; |
rebonatto | 1:ce016c668e34 | 134 | difs++; |
rebonatto | 1:ce016c668e34 | 135 | } |
rebonatto | 1:ce016c668e34 | 136 | } |
rebonatto | 1:ce016c668e34 | 137 | |
rebonatto | 1:ce016c668e34 | 138 | for(i=0; i < difs; i++) |
rebonatto | 1:ce016c668e34 | 139 | printf("\nRFID {%s} read %d times.", reads[i], vezes[i]); |
rebonatto | 1:ce016c668e34 | 140 | } |
rebonatto | 1:ce016c668e34 | 141 | |
rebonatto | 0:9df41090ba33 | 142 | |
rebonatto | 0:9df41090ba33 | 143 | void TestRFID(){ |
rebonatto | 1:ce016c668e34 | 144 | char rfid_number[9], read[9]; |
rebonatto | 1:ce016c668e34 | 145 | bool first = true; |
rebonatto | 1:ce016c668e34 | 146 | char c='%'; |
rebonatto | 1:ce016c668e34 | 147 | float perc; |
rebonatto | 1:ce016c668e34 | 148 | int num_tom = 0, zero, ok, i; |
rebonatto | 1:ce016c668e34 | 149 | |
rebonatto | 1:ce016c668e34 | 150 | num_tom = SelectOutlet(); |
rebonatto | 1:ce016c668e34 | 151 | |
rebonatto | 1:ce016c668e34 | 152 | zero = ok = 0; |
rebonatto | 1:ce016c668e34 | 153 | for(i =0; i < 5; i++){ |
rebonatto | 1:ce016c668e34 | 154 | Capture::ReadRFID(num_tom,rfid_number); |
rebonatto | 1:ce016c668e34 | 155 | if (strcmp(rfid_number, "00000000") == 0) |
rebonatto | 1:ce016c668e34 | 156 | zero++; |
rebonatto | 1:ce016c668e34 | 157 | else{ |
rebonatto | 1:ce016c668e34 | 158 | if (first){ |
rebonatto | 1:ce016c668e34 | 159 | ok++; |
rebonatto | 1:ce016c668e34 | 160 | strcpy(read, rfid_number); |
rebonatto | 1:ce016c668e34 | 161 | first = false; |
rebonatto | 1:ce016c668e34 | 162 | } |
rebonatto | 1:ce016c668e34 | 163 | else |
rebonatto | 1:ce016c668e34 | 164 | if (strcmp(rfid_number, read) == 0) |
rebonatto | 1:ce016c668e34 | 165 | ok++; |
rebonatto | 1:ce016c668e34 | 166 | } |
rebonatto | 1:ce016c668e34 | 167 | if (ok == 3) |
rebonatto | 0:9df41090ba33 | 168 | break; |
rebonatto | 0:9df41090ba33 | 169 | } |
rebonatto | 1:ce016c668e34 | 170 | i = i == 5 ? 5 : i+1; |
rebonatto | 0:9df41090ba33 | 171 | |
rebonatto | 1:ce016c668e34 | 172 | if(ok == 3) |
rebonatto | 1:ce016c668e34 | 173 | perc = (float) ok/i; |
rebonatto | 1:ce016c668e34 | 174 | else{ |
rebonatto | 1:ce016c668e34 | 175 | perc = (float) zero/i ; |
rebonatto | 1:ce016c668e34 | 176 | |
rebonatto | 1:ce016c668e34 | 177 | strcpy(read, "00000000"); |
rebonatto | 1:ce016c668e34 | 178 | } |
rebonatto | 1:ce016c668e34 | 179 | perc = perc * 100 ; |
rebonatto | 1:ce016c668e34 | 180 | printf("\n\RFID SERIAL NUMBER: {%8s} with %.2f%c of hit.\n", read, perc, c); |
rebonatto | 0:9df41090ba33 | 181 | } |
rebonatto | 0:9df41090ba33 | 182 | |
rebonatto | 0:9df41090ba33 | 183 | void SetGain(){ |
rebonatto | 0:9df41090ba33 | 184 | float rms[NUMBER_OF_CHANNELS], mv2[NUMBER_OF_CHANNELS]; |
rebonatto | 0:9df41090ba33 | 185 | int under[NUMBER_OF_CHANNELS], over[NUMBER_OF_CHANNELS]; |
rebonatto | 0:9df41090ba33 | 186 | float corrente = 0; |
rebonatto | 0:9df41090ba33 | 187 | int num_canal = 0; |
rebonatto | 0:9df41090ba33 | 188 | float soma_rms = 0; |
rebonatto | 0:9df41090ba33 | 189 | unsigned int cont = 0; |
rebonatto | 0:9df41090ba33 | 190 | float ganho = 0; |
rebonatto | 0:9df41090ba33 | 191 | |
rebonatto | 0:9df41090ba33 | 192 | printf("\n\nGain Adjustment:\n"); |
rebonatto | 0:9df41090ba33 | 193 | printf("\nFor Adjust the gain, ALL gains in config file (PMED.TXT) MUST be 1 (one)"); |
rebonatto | 0:9df41090ba33 | 194 | num_canal = SelectChannel(); |
rebonatto | 0:9df41090ba33 | 195 | if (Settings::get_Gain(num_canal) != 1){ |
rebonatto | 0:9df41090ba33 | 196 | printf("\n\nIt is impossibile to continue.\n"); |
rebonatto | 0:9df41090ba33 | 197 | printf("\nThe gain in channel %d is %f and MUST be be equal to 1 (one).", num_canal, Settings::get_Gain(num_canal)); |
rebonatto | 0:9df41090ba33 | 198 | printf("\nPut in the config file (PMED.TXT)\n\ngain%d=1\n", num_canal); |
rebonatto | 0:9df41090ba33 | 199 | printf("\nAfter save the config file, you MUST restart the mbed."); |
rebonatto | 0:9df41090ba33 | 200 | return; |
rebonatto | 0:9df41090ba33 | 201 | } |
rebonatto | 0:9df41090ba33 | 202 | |
rebonatto | 0:9df41090ba33 | 203 | printf("\nConnect the plug with the current used to adjustment (%s)", num_canal%2==0?"Phase":"Leakage"); |
rebonatto | 0:9df41090ba33 | 204 | printf("\nSwitch on the charge and with an ammeter verify the current (RMS) consumed."); |
rebonatto | 0:9df41090ba33 | 205 | printf("\nType the current in ammeter (%s): ", num_canal%2==0?"A":"mA"); |
rebonatto | 0:9df41090ba33 | 206 | scanf("%f", &corrente); |
rebonatto | 0:9df41090ba33 | 207 | |
rebonatto | 0:9df41090ba33 | 208 | printf("\nWait aproximatelly 0.5s\n"); |
rebonatto | 0:9df41090ba33 | 209 | |
rebonatto | 0:9df41090ba33 | 210 | while(cont<30) |
rebonatto | 0:9df41090ba33 | 211 | { |
rebonatto | 0:9df41090ba33 | 212 | SignalProcessor::CalculateRMSBulk(rms, mv2, under, over); |
rebonatto | 0:9df41090ba33 | 213 | soma_rms += rms[num_canal]; |
rebonatto | 0:9df41090ba33 | 214 | cont++; |
rebonatto | 0:9df41090ba33 | 215 | } |
rebonatto | 0:9df41090ba33 | 216 | soma_rms /= 30; |
rebonatto | 0:9df41090ba33 | 217 | ganho = soma_rms/corrente; |
rebonatto | 0:9df41090ba33 | 218 | printf("\nPut in the configuration file (PMED.TXT)\ngain%d=%.4f\n\n",num_canal,ganho); |
rebonatto | 0:9df41090ba33 | 219 | printf("\nRepeat this procedure for the others channels and at the end, reset the Mbed.\n"); |
rebonatto | 0:9df41090ba33 | 220 | } |
rebonatto | 0:9df41090ba33 | 221 | |
rebonatto | 0:9df41090ba33 | 222 | void SetOffset(){ |
rebonatto | 0:9df41090ba33 | 223 | unsigned char tecla=0; |
rebonatto | 0:9df41090ba33 | 224 | unsigned int soma[6]={0,0,0,0,0,0}; |
rebonatto | 0:9df41090ba33 | 225 | int cont = 0; |
rebonatto | 0:9df41090ba33 | 226 | float rms[NUMBER_OF_CHANNELS], mv2[NUMBER_OF_CHANNELS]; |
rebonatto | 0:9df41090ba33 | 227 | int under[NUMBER_OF_CHANNELS], over[NUMBER_OF_CHANNELS]; |
rebonatto | 0:9df41090ba33 | 228 | |
rebonatto | 0:9df41090ba33 | 229 | printf("\n\nAdjustment of Offset\n"); |
rebonatto | 0:9df41090ba33 | 230 | printf("\nSwitch off all plugs from outlets."); |
rebonatto | 0:9df41090ba33 | 231 | printf("\nKeep the Protegemed on.\n"); |
rebonatto | 0:9df41090ba33 | 232 | printf("\nType any key and press <ENTER> when ready!\n"); |
rebonatto | 0:9df41090ba33 | 233 | scanf("%c", &tecla); |
rebonatto | 0:9df41090ba33 | 234 | |
rebonatto | 0:9df41090ba33 | 235 | printf("Wait aproximatelly 0.5s\n"); |
rebonatto | 0:9df41090ba33 | 236 | |
rebonatto | 0:9df41090ba33 | 237 | while(cont<30) |
rebonatto | 0:9df41090ba33 | 238 | { |
rebonatto | 0:9df41090ba33 | 239 | SignalProcessor::CalculateRMSBulk(rms, mv2, under, over); |
rebonatto | 0:9df41090ba33 | 240 | for (int i=0; i<6;i++) |
rebonatto | 0:9df41090ba33 | 241 | { |
rebonatto | 0:9df41090ba33 | 242 | soma[i] += mv2[i]; |
rebonatto | 0:9df41090ba33 | 243 | } |
rebonatto | 0:9df41090ba33 | 244 | cont++; |
rebonatto | 0:9df41090ba33 | 245 | } |
rebonatto | 0:9df41090ba33 | 246 | for (int i=0; i<6 ; i++) |
rebonatto | 0:9df41090ba33 | 247 | { |
rebonatto | 0:9df41090ba33 | 248 | soma[i] = soma[i]/30; |
rebonatto | 0:9df41090ba33 | 249 | } |
rebonatto | 0:9df41090ba33 | 250 | printf("\n\nPut in file PMED.TXT an save it:\n"); |
rebonatto | 0:9df41090ba33 | 251 | for (int i=0; i<6 ; i++) |
rebonatto | 0:9df41090ba33 | 252 | { |
rebonatto | 0:9df41090ba33 | 253 | printf("offset%d=%u\n", i, soma[i]); |
rebonatto | 0:9df41090ba33 | 254 | } |
rebonatto | 0:9df41090ba33 | 255 | |
rebonatto | 0:9df41090ba33 | 256 | printf("\n\nReset the Mbed.\n"); |
rebonatto | 0:9df41090ba33 | 257 | printf("\n\nYou MUST in the sequence adjust the gain!!!\n\n"); |
rebonatto | 0:9df41090ba33 | 258 | } |
rebonatto | 0:9df41090ba33 | 259 | |
rebonatto | 1:ce016c668e34 | 260 | int SelectOutlet(){ |
rebonatto | 1:ce016c668e34 | 261 | int num = 0; |
rebonatto | 1:ce016c668e34 | 262 | while(1){ |
rebonatto | 1:ce016c668e34 | 263 | printf("\nSelect an outlet to test (1 to 3): "); |
rebonatto | 1:ce016c668e34 | 264 | scanf("%d", &num); |
rebonatto | 1:ce016c668e34 | 265 | if ( (num > 3) || (num < 1) ) |
rebonatto | 1:ce016c668e34 | 266 | printf("\n\n\nInvalid Outlet! - Retype a valid outlet\n\n\n "); |
rebonatto | 1:ce016c668e34 | 267 | else |
rebonatto | 1:ce016c668e34 | 268 | break; |
rebonatto | 1:ce016c668e34 | 269 | } |
rebonatto | 1:ce016c668e34 | 270 | return num; |
rebonatto | 1:ce016c668e34 | 271 | } |
rebonatto | 1:ce016c668e34 | 272 | |
rebonatto | 0:9df41090ba33 | 273 | int SelectChannel(){ |
rebonatto | 0:9df41090ba33 | 274 | int num_channel = 0; |
rebonatto | 0:9df41090ba33 | 275 | while(1){ |
rebonatto | 0:9df41090ba33 | 276 | printf("\n\nOdd channels are leakage and even channels are phase!!"); |
rebonatto | 0:9df41090ba33 | 277 | printf("\nSelect a channel to visualize samples(0 to 5): "); |
rebonatto | 0:9df41090ba33 | 278 | scanf("%d", &num_channel); |
rebonatto | 0:9df41090ba33 | 279 | if ( (num_channel > 5) || (num_channel < 0) ) |
rebonatto | 0:9df41090ba33 | 280 | printf("\n\n\nInvalid Channel! - Retype a valid channel\n\n\n "); |
rebonatto | 0:9df41090ba33 | 281 | else |
rebonatto | 0:9df41090ba33 | 282 | break; |
rebonatto | 0:9df41090ba33 | 283 | } |
rebonatto | 0:9df41090ba33 | 284 | return num_channel; |
rebonatto | 0:9df41090ba33 | 285 | } |
rebonatto | 0:9df41090ba33 | 286 | |
rebonatto | 0:9df41090ba33 | 287 | |
rebonatto | 0:9df41090ba33 | 288 | void ShowSamplesFromChannel(){ |
rebonatto | 0:9df41090ba33 | 289 | unsigned short samples[NUMBER_OF_SAMPLES]; |
rebonatto | 0:9df41090ba33 | 290 | int cont = 0; |
rebonatto | 0:9df41090ba33 | 291 | int num_channel = SelectChannel(); |
rebonatto | 0:9df41090ba33 | 292 | |
rebonatto | 0:9df41090ba33 | 293 | |
rebonatto | 0:9df41090ba33 | 294 | printf("\nValues of %d samples from channel %d.\n\n", NUMBER_OF_SAMPLES, num_channel ); |
rebonatto | 0:9df41090ba33 | 295 | |
rebonatto | 0:9df41090ba33 | 296 | while(cont < 5) |
rebonatto | 0:9df41090ba33 | 297 | { |
rebonatto | 0:9df41090ba33 | 298 | Capture::CopyBuffer(num_channel, samples); |
rebonatto | 0:9df41090ba33 | 299 | printf("\n******* %da. sequence of samples (%s)\n\n", cont+1, num_channel%2==0?"Phase":"Leakage"); |
rebonatto | 0:9df41090ba33 | 300 | for (int k=0; k< NUMBER_OF_SAMPLES; k++) |
rebonatto | 0:9df41090ba33 | 301 | { |
rebonatto | 0:9df41090ba33 | 302 | printf("%d ", samples[k]); |
rebonatto | 0:9df41090ba33 | 303 | } |
rebonatto | 0:9df41090ba33 | 304 | printf("\n"); |
rebonatto | 0:9df41090ba33 | 305 | cont++; |
rebonatto | 0:9df41090ba33 | 306 | } |
rebonatto | 0:9df41090ba33 | 307 | } |
rebonatto | 0:9df41090ba33 | 308 | |
rebonatto | 0:9df41090ba33 | 309 | int SelectOption() |
rebonatto | 0:9df41090ba33 | 310 | { |
rebonatto | 0:9df41090ba33 | 311 | int option; |
rebonatto | 0:9df41090ba33 | 312 | |
rebonatto | 0:9df41090ba33 | 313 | while (true) |
rebonatto | 0:9df41090ba33 | 314 | { |
rebonatto | 0:9df41090ba33 | 315 | printf("\n\n"); |
rebonatto | 0:9df41090ba33 | 316 | printf("+-------------------------------------+\n"); |
rebonatto | 0:9df41090ba33 | 317 | printf("| PMED_Calibra: MENU |\n"); |
rebonatto | 0:9df41090ba33 | 318 | printf("| 1. RMS Values. |\n"); |
rebonatto | 0:9df41090ba33 | 319 | printf("| 2. Mean Values. |\n"); |
rebonatto | 0:9df41090ba33 | 320 | printf("| 3. Read samples from 1 channel. |\n"); |
rebonatto | 0:9df41090ba33 | 321 | printf("| 4. Offset adjust. |\n"); |
rebonatto | 0:9df41090ba33 | 322 | printf("| 5. Gain adjust. |\n"); |
rebonatto | 0:9df41090ba33 | 323 | printf("| 6. Read RFID tag. |\n"); |
rebonatto | 0:9df41090ba33 | 324 | printf("| 7. Test RFID Read (many times). |\n"); |
rebonatto | 0:9df41090ba33 | 325 | printf("| 8. Reset the Mbed |\n"); |
rebonatto | 0:9df41090ba33 | 326 | printf("+-------------------------------------+\n"); |
rebonatto | 0:9df41090ba33 | 327 | printf("Select an Option: "); |
rebonatto | 0:9df41090ba33 | 328 | |
rebonatto | 0:9df41090ba33 | 329 | scanf("%d", &option); |
rebonatto | 0:9df41090ba33 | 330 | if ( (option > 8) || (option < 1) ){ |
rebonatto | 0:9df41090ba33 | 331 | printf("\n\n\nInvalid Option! - Retype a valid option\n\n\n "); |
rebonatto | 0:9df41090ba33 | 332 | } |
rebonatto | 0:9df41090ba33 | 333 | else |
rebonatto | 0:9df41090ba33 | 334 | break; |
rebonatto | 0:9df41090ba33 | 335 | } |
rebonatto | 0:9df41090ba33 | 336 | |
rebonatto | 0:9df41090ba33 | 337 | return option; |
rebonatto | 0:9df41090ba33 | 338 | } |
rebonatto | 0:9df41090ba33 | 339 | |
rebonatto | 0:9df41090ba33 | 340 | |
rebonatto | 0:9df41090ba33 | 341 | void ShowMeanValues(){ |
rebonatto | 0:9df41090ba33 | 342 | float rms[NUMBER_OF_CHANNELS], avg[NUMBER_OF_CHANNELS], mv2[NUMBER_OF_CHANNELS]; |
rebonatto | 0:9df41090ba33 | 343 | int under[NUMBER_OF_CHANNELS], over[NUMBER_OF_CHANNELS]; |
rebonatto | 0:9df41090ba33 | 344 | |
rebonatto | 0:9df41090ba33 | 345 | int cont = 0; |
rebonatto | 0:9df41090ba33 | 346 | avg[0] = avg[1] = avg[2] = avg[3] = avg[4] = avg[5] = 0; |
rebonatto | 0:9df41090ba33 | 347 | printf("\n\n------------------------------Mean VALUES-------------------------------"); |
rebonatto | 0:9df41090ba33 | 348 | printf("\nCHANNEL\t0\t1\t\t2\t3\t\t4\t5"); |
rebonatto | 0:9df41090ba33 | 349 | printf("\n\tPhase1\tLeakage1\tPhase2\tLeakage2\tPhase3\tLeakage3"); |
rebonatto | 0:9df41090ba33 | 350 | printf("\n------------------------------------------------------------------------"); |
rebonatto | 0:9df41090ba33 | 351 | while (cont < 10) |
rebonatto | 0:9df41090ba33 | 352 | { |
rebonatto | 0:9df41090ba33 | 353 | Capture::Wait(); |
rebonatto | 0:9df41090ba33 | 354 | SignalProcessor::CalculateRMSBulk(rms, mv2, under, over); |
rebonatto | 0:9df41090ba33 | 355 | printf("\n%2d\t%.2f\t%.2f\t\t%.2f\t%.2f\t\t%.2f\t%.2f", cont+1,mv2[0],mv2[1],mv2[2],mv2[3],mv2[4],mv2[5]); |
rebonatto | 0:9df41090ba33 | 356 | avg[0] += mv2[0]; |
rebonatto | 0:9df41090ba33 | 357 | avg[1] += mv2[1]; |
rebonatto | 0:9df41090ba33 | 358 | avg[2] += mv2[2]; |
rebonatto | 0:9df41090ba33 | 359 | avg[3] += mv2[3]; |
rebonatto | 0:9df41090ba33 | 360 | avg[4] += mv2[4]; |
rebonatto | 0:9df41090ba33 | 361 | avg[5] += mv2[5]; |
rebonatto | 0:9df41090ba33 | 362 | cont++; |
rebonatto | 0:9df41090ba33 | 363 | } |
rebonatto | 0:9df41090ba33 | 364 | printf("\n------------------------------------------------------------------------"); |
rebonatto | 0:9df41090ba33 | 365 | printf("\nAvg:\t%.2f\t%.2f\t\t%.2f\t%.2f\t\t%.2f\t%.2f",avg[0]/cont,avg[1]/cont,avg[2]/cont,avg[3]/cont,avg[4]/cont,avg[5]/cont); |
rebonatto | 0:9df41090ba33 | 366 | printf("\n------------------------------------------------------------------------\n\n"); |
rebonatto | 0:9df41090ba33 | 367 | } |
rebonatto | 0:9df41090ba33 | 368 | |
rebonatto | 0:9df41090ba33 | 369 | void ShowRMSValues(){ |
rebonatto | 0:9df41090ba33 | 370 | float rms[NUMBER_OF_CHANNELS], avg[NUMBER_OF_CHANNELS], mv2[NUMBER_OF_CHANNELS]; |
rebonatto | 0:9df41090ba33 | 371 | int under[NUMBER_OF_CHANNELS], over[NUMBER_OF_CHANNELS]; |
rebonatto | 0:9df41090ba33 | 372 | |
rebonatto | 0:9df41090ba33 | 373 | int cont = 0; |
rebonatto | 0:9df41090ba33 | 374 | avg[0] = avg[1] = avg[2] = avg[3] = avg[4] = avg[5] = 0; |
rebonatto | 0:9df41090ba33 | 375 | printf("\n\n-------------------------------RMS VALUES-------------------------------"); |
rebonatto | 0:9df41090ba33 | 376 | printf("\nCHANNEL\t0\t1\t\t2\t3\t\t4\t5"); |
rebonatto | 0:9df41090ba33 | 377 | printf("\n\tPhase1\tLeakage1\tPhase2\tLeakage2\tPhase3\tLeakage3"); |
rebonatto | 0:9df41090ba33 | 378 | printf("\n------------------------------------------------------------------------"); |
rebonatto | 0:9df41090ba33 | 379 | while (cont < 10) |
rebonatto | 0:9df41090ba33 | 380 | { |
rebonatto | 0:9df41090ba33 | 381 | Capture::Wait(); |
rebonatto | 0:9df41090ba33 | 382 | SignalProcessor::CalculateRMSBulk(rms, mv2, under, over); |
rebonatto | 0:9df41090ba33 | 383 | printf("\n%2d\t%.2f\t%.2f\t\t%.2f\t%.2f\t\t%.2f\t%.2f", cont+1,rms[0],rms[1],rms[2],rms[3],rms[4],rms[5]); |
rebonatto | 0:9df41090ba33 | 384 | avg[0] += rms[0]; |
rebonatto | 0:9df41090ba33 | 385 | avg[1] += rms[1]; |
rebonatto | 0:9df41090ba33 | 386 | avg[2] += rms[2]; |
rebonatto | 0:9df41090ba33 | 387 | avg[3] += rms[3]; |
rebonatto | 0:9df41090ba33 | 388 | avg[4] += rms[4]; |
rebonatto | 0:9df41090ba33 | 389 | avg[5] += rms[5]; |
rebonatto | 0:9df41090ba33 | 390 | cont++; |
rebonatto | 0:9df41090ba33 | 391 | } |
rebonatto | 0:9df41090ba33 | 392 | printf("\n------------------------------------------------------------------------"); |
rebonatto | 0:9df41090ba33 | 393 | printf("\nAvg:\t%.2f\t%.2f\t\t%.2f\t%.2f\t\t%.2f\t%.2f",avg[0]/cont,avg[1]/cont,avg[2]/cont,avg[3]/cont,avg[4]/cont,avg[5]/cont); |
rebonatto | 0:9df41090ba33 | 394 | printf("\n------------------------------------------------------------------------\n\n"); |
rebonatto | 0:9df41090ba33 | 395 | } |
rebonatto | 0:9df41090ba33 | 396 | |
rebonatto | 0:9df41090ba33 | 397 | void InitializeEthernetLink() |
rebonatto | 0:9df41090ba33 | 398 | { |
rebonatto | 0:9df41090ba33 | 399 | if(Settings::get_Dhcp()) |
rebonatto | 0:9df41090ba33 | 400 | //EthernetIf::Initialize(); //Use DHCP |
rebonatto | 0:9df41090ba33 | 401 | eth.init(); //Use DHCP |
rebonatto | 0:9df41090ba33 | 402 | else |
rebonatto | 0:9df41090ba33 | 403 | //EthernetIf::Initialize(Settings::get_IpAddress(),Settings::get_Netmask(),Settings::get_Gateway()); |
rebonatto | 0:9df41090ba33 | 404 | eth.init(Settings::get_IpAddress(),Settings::get_Netmask(),Settings::get_Gateway()); |
rebonatto | 0:9df41090ba33 | 405 | |
rebonatto | 0:9df41090ba33 | 406 | //EthernetIf::Connect(); |
rebonatto | 0:9df41090ba33 | 407 | eth.connect(); |
rebonatto | 0:9df41090ba33 | 408 | //printf("IP Address is %s\n", EthernetIf::get_IpAddress()); |
rebonatto | 0:9df41090ba33 | 409 | } |