OzerDrive / Mbed 2 deprecated mbed_blinky

Dependencies:   mbed Motor

Committer:
mksaga
Date:
Fri Apr 26 03:31:26 2019 +0000
Revision:
4:fd25ded02b89
Parent:
3:7e158df628f1
Child:
5:3b378e0659e9
Adds PWM for motor control;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fatiho 0:572230252a64 1 #include "mbed.h"
fatiho 0:572230252a64 2
mksaga 3:7e158df628f1 3 #define NELEMS(x) (sizeof(x) / sizeof((x)[0]))
mksaga 3:7e158df628f1 4
mksaga 4:fd25ded02b89 5 DigitalOut led_e(p30);
mksaga 4:fd25ded02b89 6 DigitalOut led_n(p29);
mksaga 4:fd25ded02b89 7 DigitalOut led_w(p28);
mksaga 4:fd25ded02b89 8 DigitalOut led_s(p27);
mksaga 4:fd25ded02b89 9 DigitalOut led_c(p25);
mksaga 3:7e158df628f1 10
mksaga 4:fd25ded02b89 11 AnalogIn senseE(p20);
mksaga 4:fd25ded02b89 12 AnalogIn senseN(p19);
mksaga 3:7e158df628f1 13 AnalogIn senseW(p18);
mksaga 4:fd25ded02b89 14 AnalogIn senseS(p17);
mksaga 4:fd25ded02b89 15 AnalogIn senseC(p16);
mksaga 3:7e158df628f1 16
mksaga 4:fd25ded02b89 17 PwmOut pump(p21);
mksaga 3:7e158df628f1 18 /*
mksaga 3:7e158df628f1 19 id1
mksaga 3:7e158df628f1 20
mksaga 3:7e158df628f1 21 id2 id4 id0
mksaga 3:7e158df628f1 22
mksaga 3:7e158df628f1 23 id3
mksaga 3:7e158df628f1 24 */
mksaga 3:7e158df628f1 25
mksaga 3:7e158df628f1 26 int main()
mksaga 3:7e158df628f1 27 {
mksaga 3:7e158df628f1 28
mksaga 3:7e158df628f1 29 int num_pads = 5;
mksaga 3:7e158df628f1 30 int pad_buffer_size = 5;
mksaga 3:7e158df628f1 31
mksaga 3:7e158df628f1 32 float s_w;
mksaga 3:7e158df628f1 33 float s_e;
mksaga 3:7e158df628f1 34 float s_s;
mksaga 3:7e158df628f1 35 float s_n;
mksaga 3:7e158df628f1 36 float s_c;
mksaga 1:48d05483fffc 37
mksaga 3:7e158df628f1 38 int avg_w;
mksaga 3:7e158df628f1 39 int avg_e;
mksaga 3:7e158df628f1 40 int avg_s;
mksaga 3:7e158df628f1 41 int avg_n;
mksaga 3:7e158df628f1 42 int avg_c;
mksaga 3:7e158df628f1 43
mksaga 3:7e158df628f1 44 int pad_w_i;
mksaga 3:7e158df628f1 45 int pad_e_i;
mksaga 3:7e158df628f1 46 int pad_s_i;
mksaga 3:7e158df628f1 47 int pad_n_i;
mksaga 3:7e158df628f1 48 int pad_c_i;
mksaga 3:7e158df628f1 49
mksaga 3:7e158df628f1 50 int* padw_data = new int[pad_buffer_size];
mksaga 3:7e158df628f1 51 int* pade_data = new int[pad_buffer_size];
mksaga 3:7e158df628f1 52 int* pads_data = new int[pad_buffer_size];
mksaga 3:7e158df628f1 53 int* padn_data = new int[pad_buffer_size];
mksaga 3:7e158df628f1 54 int* padc_data = new int[pad_buffer_size];
fatiho 0:572230252a64 55
mksaga 3:7e158df628f1 56 int newest_w;
mksaga 3:7e158df628f1 57 int newest_e;
mksaga 3:7e158df628f1 58 int newest_s;
mksaga 3:7e158df628f1 59 int newest_n;
mksaga 3:7e158df628f1 60 int newest_c;
mksaga 3:7e158df628f1 61
mksaga 3:7e158df628f1 62 int total_w;
mksaga 3:7e158df628f1 63 int total_e;
mksaga 3:7e158df628f1 64 int total_s;
mksaga 3:7e158df628f1 65 int total_n;
mksaga 3:7e158df628f1 66 int total_c;
mksaga 3:7e158df628f1 67
mksaga 3:7e158df628f1 68 int outlier_countW;
mksaga 3:7e158df628f1 69 int outlier_countE;
mksaga 3:7e158df628f1 70 int outlier_countS;
mksaga 3:7e158df628f1 71 int outlier_countN;
mksaga 3:7e158df628f1 72 int outlier_countC;
mksaga 2:66ab94f69a1a 73
mksaga 3:7e158df628f1 74 /*
mksaga 3:7e158df628f1 75 0 : east
mksaga 3:7e158df628f1 76 1 : north
mksaga 3:7e158df628f1 77 2 : west
mksaga 3:7e158df628f1 78 3 : south
mksaga 3:7e158df628f1 79 4 : center
mksaga 3:7e158df628f1 80 */
mksaga 2:66ab94f69a1a 81
mksaga 3:7e158df628f1 82 float* readings = new float[num_pads];
mksaga 3:7e158df628f1 83 readings[0] = s_e;
mksaga 3:7e158df628f1 84 readings[1] = s_n;
mksaga 3:7e158df628f1 85 readings[2] = s_w;
mksaga 3:7e158df628f1 86 readings[3] = s_s;
mksaga 3:7e158df628f1 87 readings[4] = s_c;
mksaga 3:7e158df628f1 88
mksaga 3:7e158df628f1 89 int* averages = new int[num_pads];
mksaga 3:7e158df628f1 90 averages[0] = avg_e;
mksaga 3:7e158df628f1 91 averages[1] = avg_n;
mksaga 3:7e158df628f1 92 averages[2] = avg_w;
mksaga 3:7e158df628f1 93 averages[3] = avg_s;
mksaga 3:7e158df628f1 94 averages[4] = avg_c;
mksaga 3:7e158df628f1 95
mksaga 3:7e158df628f1 96
mksaga 3:7e158df628f1 97 int* indices = new int[num_pads];
mksaga 3:7e158df628f1 98 indices[0] = pad_e_i;
mksaga 3:7e158df628f1 99 indices[1] = pad_n_i;
mksaga 3:7e158df628f1 100 indices[2] = pad_w_i;
mksaga 3:7e158df628f1 101 indices[3] = pad_s_i;
mksaga 3:7e158df628f1 102 indices[4] = pad_c_i;
mksaga 3:7e158df628f1 103
mksaga 3:7e158df628f1 104 int** data_arrs = new int*[num_pads];
mksaga 3:7e158df628f1 105 data_arrs[0] = pade_data;
mksaga 3:7e158df628f1 106 data_arrs[1] = padn_data;
mksaga 3:7e158df628f1 107 data_arrs[2] = padw_data;
mksaga 3:7e158df628f1 108 data_arrs[3] = pads_data;
mksaga 3:7e158df628f1 109 data_arrs[4] = padc_data;
mksaga 3:7e158df628f1 110
mksaga 3:7e158df628f1 111 int* newest_vals = new int[num_pads];
mksaga 3:7e158df628f1 112 newest_vals[0] = newest_e;
mksaga 3:7e158df628f1 113 newest_vals[1] = newest_n;
mksaga 3:7e158df628f1 114 newest_vals[2] = newest_w;
mksaga 3:7e158df628f1 115 newest_vals[3] = newest_s;
mksaga 3:7e158df628f1 116 newest_vals[4] = newest_c;
mksaga 3:7e158df628f1 117
mksaga 3:7e158df628f1 118 int* totals = new int[num_pads];
mksaga 3:7e158df628f1 119 totals[0] = total_e;
mksaga 3:7e158df628f1 120 totals[1] = total_n;
mksaga 3:7e158df628f1 121 totals[2] = total_w;
mksaga 3:7e158df628f1 122 totals[3] = total_s;
mksaga 3:7e158df628f1 123 totals[4] = total_c;
mksaga 3:7e158df628f1 124
mksaga 3:7e158df628f1 125 int* outlier_cts = new int[num_pads];
mksaga 3:7e158df628f1 126 outlier_cts[0] = outlier_countE;
mksaga 3:7e158df628f1 127 outlier_cts[1] = outlier_countN;
mksaga 3:7e158df628f1 128 outlier_cts[2] = outlier_countW;
mksaga 3:7e158df628f1 129 outlier_cts[3] = outlier_countS;
mksaga 3:7e158df628f1 130 outlier_cts[4] = outlier_countC;
mksaga 3:7e158df628f1 131
mksaga 3:7e158df628f1 132 int i;
mksaga 3:7e158df628f1 133
mksaga 3:7e158df628f1 134 //char* out = new char[40];
mksaga 3:7e158df628f1 135
mksaga 4:fd25ded02b89 136
mksaga 4:fd25ded02b89 137 // specify period first
mksaga 4:fd25ded02b89 138 pump.period(1.0f); // 4 second period
mksaga 4:fd25ded02b89 139 pump.write(0.75f); // 50% duty cycle, relative to period
mksaga 4:fd25ded02b89 140 //led = 0.5f; // shorthand for led.write()
mksaga 4:fd25ded02b89 141 //led.pulsewidth(2); // alternative to led.write, set duty cycle time in seconds
mksaga 4:fd25ded02b89 142 while(1);
mksaga 4:fd25ded02b89 143
mksaga 3:7e158df628f1 144 //int avg;
mksaga 4:fd25ded02b89 145
mksaga 4:fd25ded02b89 146 /*
fatiho 0:572230252a64 147 while(1) {
mksaga 4:fd25ded02b89 148
mksaga 4:fd25ded02b89 149 i++;
mksaga 4:fd25ded02b89 150 pump.write(1);
mksaga 4:fd25ded02b89 151 if (i == 1000) {
mksaga 4:fd25ded02b89 152 pump.write(0);
mksaga 4:fd25ded02b89 153 while(1) {};
mksaga 4:fd25ded02b89 154 }
mksaga 4:fd25ded02b89 155
mksaga 4:fd25ded02b89 156 }
mksaga 4:fd25ded02b89 157 */
mksaga 4:fd25ded02b89 158 /*
mksaga 3:7e158df628f1 159 s_w = senseW.read();
mksaga 3:7e158df628f1 160 s_e = senseE.read();
mksaga 3:7e158df628f1 161 s_n = senseN.read();
mksaga 3:7e158df628f1 162 s_s = senseS.read();
mksaga 3:7e158df628f1 163 s_c = senseC.read();
mksaga 4:fd25ded02b89 164 */
mksaga 4:fd25ded02b89 165
mksaga 2:66ab94f69a1a 166 /*
mksaga 3:7e158df628f1 167 newest_w = (int) s_w * 100;
mksaga 3:7e158df628f1 168 newest_e = (int) s_e * 100;
mksaga 3:7e158df628f1 169 newest_n = (int) s_n * 100;
mksaga 3:7e158df628f1 170 newest_s = (int) s_s * 100;
mksaga 3:7e158df628f1 171 newest_c = (int) s_c * 100;
mksaga 2:66ab94f69a1a 172 */
mksaga 2:66ab94f69a1a 173
mksaga 4:fd25ded02b89 174 /*
mksaga 3:7e158df628f1 175 printf(" %1.2f \n", s_n);
mksaga 3:7e158df628f1 176 printf("%1.2f %1.2f %1.2f\n", s_w, s_c, s_e);
mksaga 3:7e158df628f1 177 printf (" %1.2f \n\n", s_s);
mksaga 4:fd25ded02b89 178 */
mksaga 4:fd25ded02b89 179
mksaga 2:66ab94f69a1a 180 /*
mksaga 3:7e158df628f1 181 for (i=0; i<num_pads; i++) {
mksaga 3:7e158df628f1 182
mksaga 3:7e158df628f1 183 if (i==0) {
mksaga 3:7e158df628f1 184 readings[0] = senseE.read();
mksaga 3:7e158df628f1 185 } else if (i==1) {
mksaga 3:7e158df628f1 186 readings[1] = senseN.read();
mksaga 3:7e158df628f1 187 } else if (i==2) {
mksaga 3:7e158df628f1 188 readings[2] = senseW.read();
mksaga 3:7e158df628f1 189 } else if (i==3) {
mksaga 3:7e158df628f1 190 readings[3] = senseS.read();
mksaga 3:7e158df628f1 191 } else if (i==4) {
mksaga 3:7e158df628f1 192 readings[4] = senseC.read();
mksaga 3:7e158df628f1 193 }
mksaga 3:7e158df628f1 194
mksaga 3:7e158df628f1 195 // maybe << 7 to make this faster?
mksaga 3:7e158df628f1 196 newest_vals[i] = readings[i] * 100;
mksaga 3:7e158df628f1 197
mksaga 3:7e158df628f1 198
mksaga 3:7e158df628f1 199
mksaga 3:7e158df628f1 200 if (indices[i] < pad_buffer_size - 1) {
mksaga 3:7e158df628f1 201 data_arrs[i][indices[i]] = newest_vals[i];
mksaga 3:7e158df628f1 202 totals[i] += newest_vals[i];
mksaga 3:7e158df628f1 203 indices[i]++;
mksaga 3:7e158df628f1 204 } else {
mksaga 3:7e158df628f1 205 // get index of last updated value
mksaga 3:7e158df628f1 206 indices[i] = (indices[i] + 1) % pad_buffer_size;
mksaga 3:7e158df628f1 207 // remove oldest value from the total
mksaga 3:7e158df628f1 208 totals[i] -= data_arrs[i][indices[i]];
mksaga 3:7e158df628f1 209 // update loc. of oldest value with new value
mksaga 3:7e158df628f1 210 data_arrs[i][indices[i]] = newest_vals[i];
mksaga 3:7e158df628f1 211 // update total w/ newest value
mksaga 3:7e158df628f1 212 totals[i] += newest_vals[i];
mksaga 3:7e158df628f1 213 }
mksaga 3:7e158df628f1 214 averages[i] = totals[i] / pad_buffer_size;
mksaga 3:7e158df628f1 215 }
mksaga 3:7e158df628f1 216 printf(" %2i \n", (int) newest_vals[1]);
mksaga 3:7e158df628f1 217 printf("%2i %2i %2i\n", (int) newest_vals[2], (int) newest_vals[4], (int) newest_vals[0]);
mksaga 3:7e158df628f1 218 printf (" %2i \n\n", (int) newest_vals[3]);
mksaga 3:7e158df628f1 219
mksaga 3:7e158df628f1 220 // is newest E value more than 1.5x average?
mksaga 3:7e158df628f1 221 if (newest_vals[0] > averages[0] + (averages[0] / 2)) {
mksaga 3:7e158df628f1 222 if (outlier_cts[0] == 2) {
mksaga 3:7e158df628f1 223 led_e = 1;
mksaga 3:7e158df628f1 224 } else {
mksaga 3:7e158df628f1 225 outlier_cts[0]++;
mksaga 3:7e158df628f1 226 }
mksaga 2:66ab94f69a1a 227 } else {
mksaga 3:7e158df628f1 228 outlier_cts[0] = 0;
mksaga 3:7e158df628f1 229 led_e = 0;
mksaga 3:7e158df628f1 230 }
mksaga 3:7e158df628f1 231
mksaga 3:7e158df628f1 232 if (newest_vals[1] > averages[1] + (averages[1] / 2)) {
mksaga 3:7e158df628f1 233 if (outlier_cts[1] == 2) {
mksaga 3:7e158df628f1 234 led_n = 1;
mksaga 3:7e158df628f1 235 } else {
mksaga 3:7e158df628f1 236 outlier_cts[1]++;
mksaga 3:7e158df628f1 237 }
mksaga 3:7e158df628f1 238 } else {
mksaga 3:7e158df628f1 239 outlier_cts[1] = 0;
mksaga 3:7e158df628f1 240 led_n = 0;
mksaga 3:7e158df628f1 241 }
mksaga 3:7e158df628f1 242
mksaga 3:7e158df628f1 243 if (newest_vals[2] > averages[2] + (averages[2] / 2)) {
mksaga 3:7e158df628f1 244 if (outlier_cts[2] == 2) {
mksaga 3:7e158df628f1 245 led_w = 1;
mksaga 3:7e158df628f1 246 } else {
mksaga 3:7e158df628f1 247 outlier_cts[2]++;
mksaga 3:7e158df628f1 248 }
mksaga 3:7e158df628f1 249 } else {
mksaga 3:7e158df628f1 250 outlier_cts[2] = 0;
mksaga 3:7e158df628f1 251 led_w = 0;
mksaga 3:7e158df628f1 252 }
mksaga 3:7e158df628f1 253
mksaga 3:7e158df628f1 254 if (newest_vals[3] > averages[3] + (averages[3] / 2)) {
mksaga 3:7e158df628f1 255 if (outlier_cts[3] == 2) {
mksaga 3:7e158df628f1 256 led_s = 1;
mksaga 3:7e158df628f1 257 } else {
mksaga 3:7e158df628f1 258 outlier_cts[3]++;
mksaga 3:7e158df628f1 259 }
mksaga 3:7e158df628f1 260 } else {
mksaga 3:7e158df628f1 261 outlier_cts[3] = 0;
mksaga 3:7e158df628f1 262 led_s = 0;
mksaga 3:7e158df628f1 263 }
mksaga 3:7e158df628f1 264
mksaga 3:7e158df628f1 265 if (newest_vals[4] > averages[4] + (averages[4] / 2)) {
mksaga 3:7e158df628f1 266 if (outlier_cts[4] == 2) {
mksaga 3:7e158df628f1 267 led_c = 1;
mksaga 3:7e158df628f1 268 } else {
mksaga 3:7e158df628f1 269 outlier_cts[4]++;
mksaga 3:7e158df628f1 270 }
mksaga 3:7e158df628f1 271 } else {
mksaga 3:7e158df628f1 272 outlier_cts[4] = 0;
mksaga 3:7e158df628f1 273 led_c = 0;
mksaga 2:66ab94f69a1a 274 }
mksaga 2:66ab94f69a1a 275 */
mksaga 4:fd25ded02b89 276 //wait(1);
mksaga 3:7e158df628f1 277
mksaga 4:fd25ded02b89 278
mksaga 3:7e158df628f1 279 }