:)

Dependencies:   MbedJSONValue DebounceIn TextLCD USBDevice mbed WebSocketClient cc3000_hostdriver_mbedsocket Adafruit_LEDBackpack_2

Committer:
jn80842
Date:
Thu Dec 11 19:15:20 2014 +0000
Revision:
21:4ec999be140a
Parent:
20:b30b958dbd86
dan/filip's changes to handle floating rows

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ddrew73 0:16d2619002d7 1 #include "mbed.h"
ddrew73 1:0183a7d38878 2 #include <string>
ddrew73 0:16d2619002d7 3 #include "Adafruit_LEDBackpack.h"
ddrew73 0:16d2619002d7 4 #include "Adafruit_GFX.h"
ddrew73 0:16d2619002d7 5 #include "TextLCD.h"
ddrew73 0:16d2619002d7 6 #include "DebounceIn.h"
jn80842 3:161fed8bd027 7 #include "cc3000.h"
jn80842 3:161fed8bd027 8 #include "Websocket.h"
ddrew73 0:16d2619002d7 9
ddrew73 8:725d938b301b 10 //Debug
ddrew73 8:725d938b301b 11 Serial pc(USBTX, USBRX); // tx, rx
ddrew73 8:725d938b301b 12
ddrew73 8:725d938b301b 13 //For oscilliscope
ddrew73 8:725d938b301b 14 Timer timer;
ddrew73 8:725d938b301b 15
ddrew73 0:16d2619002d7 16 //LED stuff
ddrew73 9:5fa90677ff3e 17 I2C i2c_left(PTC11,PTC10);
ddrew73 7:7fbe8dc5e4fa 18 Adafruit_24bargraph ledbar_left=Adafruit_24bargraph(&i2c_left);
ddrew73 4:5d27966f93e4 19
ddrew73 9:5fa90677ff3e 20 I2C i2c_right(D7,D6);
ddrew73 7:7fbe8dc5e4fa 21 Adafruit_24bargraph ledbar_right=Adafruit_24bargraph(&i2c_right);
ddrew73 4:5d27966f93e4 22
jn80842 14:2d47b97c2028 23 void set_led(int index, int color) { // index range from 0-47
jn80842 14:2d47b97c2028 24 if (index<24) {
jn80842 14:2d47b97c2028 25 ledbar_left.setBar(index,color);
jn80842 14:2d47b97c2028 26 } else {
jn80842 14:2d47b97c2028 27 ledbar_right.setBar(index-24,color);
jn80842 14:2d47b97c2028 28 }
jn80842 14:2d47b97c2028 29 }
jn80842 14:2d47b97c2028 30
ddrew73 9:5fa90677ff3e 31 DebounceIn upbutton(PTA16);
ddrew73 10:cfd60b63ed11 32 DebounceIn downbutton(PTC12);
ddrew73 10:cfd60b63ed11 33 DebounceIn leftbutton(PTC17);
ddrew73 10:cfd60b63ed11 34 DebounceIn rightbutton(PTC16);
ddrew73 0:16d2619002d7 35
ddrew73 0:16d2619002d7 36 //Scanner stuff
ddrew73 0:16d2619002d7 37
jn80842 21:4ec999be140a 38 DebounceIn scanbutton(PTC13);
jn80842 21:4ec999be140a 39 //DebounceIn scanbutton(D7);
ddrew73 0:16d2619002d7 40
ddrew73 9:5fa90677ff3e 41 DigitalOut A_in(PTB10);
ddrew73 9:5fa90677ff3e 42 DigitalOut B_in(PTB11);
ddrew73 9:5fa90677ff3e 43 DigitalOut C_in(PTE2);
ddrew73 9:5fa90677ff3e 44 DigitalOut D_in(PTE3);
ddrew73 9:5fa90677ff3e 45 DigitalOut E_in(PTE4);
ddrew73 9:5fa90677ff3e 46 DigitalOut F_in(PTE5);
ddrew73 0:16d2619002d7 47
ddrew73 16:028a8548ab22 48 DigitalOut scan_select(PTC3);
ddrew73 16:028a8548ab22 49
ddrew73 0:16d2619002d7 50 AnalogIn adc(PTB0);
ddrew73 16:028a8548ab22 51 AnalogOut dac(PTE30);
ddrew73 8:725d938b301b 52
ddrew73 0:16d2619002d7 53
ddrew73 0:16d2619002d7 54
ddrew73 0:16d2619002d7 55 //LCD stuff
jn80842 14:2d47b97c2028 56 //TextLCD(PinName rs, PinName e, PinName d4, PinName d5, PinName d6, PinName d7, LCDType type = LCD16x2);
ddrew73 9:5fa90677ff3e 57 TextLCD lcd(PTC6,PTC5,D5,D4,D3,D2,TextLCD::LCD20x4);
ddrew73 0:16d2619002d7 58
jn80842 14:2d47b97c2028 59 void lcd_write_selected_info(int selected) {
jn80842 14:2d47b97c2028 60 lcd.cls();
jn80842 14:2d47b97c2028 61 lcd.locate(0,0);
jn80842 14:2d47b97c2028 62 lcd.printf("The ToastBoard");
jn80842 14:2d47b97c2028 63 lcd.locate(0,1);
jn80842 14:2d47b97c2028 64 lcd.printf("Selected row: %d",selected);
jn80842 14:2d47b97c2028 65 }
jn80842 14:2d47b97c2028 66
jn80842 14:2d47b97c2028 67 void lcd_write_voltage_info(float vddval,int selected,float rowval) {
jn80842 14:2d47b97c2028 68 lcd.cls();
jn80842 14:2d47b97c2028 69 lcd.locate(0,1);
jn80842 21:4ec999be140a 70 lcd.printf("Vdd: %1.2f V",vddval);
jn80842 14:2d47b97c2028 71 lcd.locate(0,0);
jn80842 21:4ec999be140a 72 lcd.printf("Row %d: %1.2f V",selected,rowval);
jn80842 14:2d47b97c2028 73 }
jn80842 14:2d47b97c2028 74
ddrew73 10:cfd60b63ed11 75
ddrew73 10:cfd60b63ed11 76 //WIFI STUFF
jn80842 13:209da1dcb6e1 77
ddrew73 0:16d2619002d7 78
jn80842 3:161fed8bd027 79 // cc3000 KL25Z wifi connection
jn80842 3:161fed8bd027 80 // we need to define connection pins for:
jn80842 3:161fed8bd027 81 // - IRQ => (pin D3)
jn80842 3:161fed8bd027 82 // - Enable => (pin D5)
jn80842 3:161fed8bd027 83 // - SPI CS => (pin D10)
jn80842 3:161fed8bd027 84 // - SPI MOSI => (pin D11)
jn80842 3:161fed8bd027 85 // - SPI MISO => (pin D12)
jn80842 3:161fed8bd027 86 // - SPI CLK => (pin D13)
jn80842 3:161fed8bd027 87 // plus wifi network SSID, password, security level and smart-configuration flag.
jn80842 3:161fed8bd027 88
ddrew73 17:fcc378db08f4 89
ddrew73 15:236d90e38951 90
ddrew73 17:fcc378db08f4 91 mbed_cc3000::cc3000 wifi(D8, D9, D10, SPI(D11, D12, D13), // spi goes mosi, miso, clk
jn80842 20:b30b958dbd86 92 "EECS-PSK", "Thequickbrown", WPA2, false);
jn80842 3:161fed8bd027 93 Websocket ws("ws://sockets.mbed.org/ws/toastboard/rw");
jn80842 3:161fed8bd027 94
ddrew73 15:236d90e38951 95
jn80842 12:c4b046975527 96 void add_to_json(const std::string& s, std::back_insert_iterator<std::string> oi) {
jn80842 14:2d47b97c2028 97 // this chunk of code lifted from the MbedJSONValue
jn80842 14:2d47b97c2028 98 char buf[7];
jn80842 12:c4b046975527 99 for (std::string::const_iterator i = s.begin(); i != s.end(); ++i) {
jn80842 14:2d47b97c2028 100 if ((unsigned char)*i < 0x20 || *i == 0x7f) {
jn80842 14:2d47b97c2028 101 sprintf(buf, "\\u%04x", *i & 0xff);
jn80842 14:2d47b97c2028 102 copy(buf, buf + 6, oi);
jn80842 14:2d47b97c2028 103 } else {
jn80842 14:2d47b97c2028 104 *oi++ = *i;
jn80842 14:2d47b97c2028 105 }
jn80842 14:2d47b97c2028 106 }
jn80842 14:2d47b97c2028 107 }
jn80842 14:2d47b97c2028 108
jn80842 14:2d47b97c2028 109 std::string build_json(float vddval,int selected,float clientdata[48]) {
jn80842 14:2d47b97c2028 110 std::string s;
jn80842 14:2d47b97c2028 111 std::back_insert_iterator<std::string> json_str = std::back_inserter(s);
jn80842 14:2d47b97c2028 112 char row[1] = ""; // holder for row tokens
jn80842 14:2d47b97c2028 113 char rowvoltage[4] = ""; // holder for voltage values
jn80842 14:2d47b97c2028 114 add_to_json("{\"vddval\":",json_str);
jn80842 19:fea62e9c1ac4 115 sprintf(rowvoltage,"%.1f",vddval*3.3);
jn80842 14:2d47b97c2028 116 add_to_json(rowvoltage,json_str);
jn80842 14:2d47b97c2028 117 add_to_json(", \"selected\":",json_str);
jn80842 18:f7a00c31ff58 118 sprintf(row,"%d",selected);
jn80842 18:f7a00c31ff58 119 add_to_json(row,json_str);
jn80842 14:2d47b97c2028 120 add_to_json(", \"rows\": [",json_str);
jn80842 14:2d47b97c2028 121 int append_comma = 0;
jn80842 14:2d47b97c2028 122 for (int i= 0; i < 48; i++) {
jn80842 14:2d47b97c2028 123 if (clientdata[i] != 100.0) { // don't pass on floating row vals
jn80842 14:2d47b97c2028 124 if (append_comma == 1) {
jn80842 14:2d47b97c2028 125 add_to_json(",",json_str);
jn80842 14:2d47b97c2028 126 } else {
jn80842 14:2d47b97c2028 127 append_comma = 1;
jn80842 14:2d47b97c2028 128 }
jn80842 14:2d47b97c2028 129 add_to_json("{\"",json_str);
jn80842 14:2d47b97c2028 130 sprintf(row, "%d", i);
jn80842 14:2d47b97c2028 131 add_to_json(row,json_str);
jn80842 14:2d47b97c2028 132 add_to_json("\":",json_str);
jn80842 19:fea62e9c1ac4 133 sprintf(rowvoltage,"%.1f",clientdata[i]*3.3);
jn80842 14:2d47b97c2028 134 add_to_json(rowvoltage,json_str);
jn80842 14:2d47b97c2028 135 add_to_json("}",json_str);
jn80842 14:2d47b97c2028 136 }
jn80842 14:2d47b97c2028 137 }
jn80842 14:2d47b97c2028 138 add_to_json("]}",json_str);
jn80842 14:2d47b97c2028 139 return s;
jn80842 14:2d47b97c2028 140 }
ddrew73 17:fcc378db08f4 141
jn80842 14:2d47b97c2028 142
jn80842 21:4ec999be140a 143
jn80842 14:2d47b97c2028 144 bool voltages_equal(float voltage1,float voltage2) {
jn80842 21:4ec999be140a 145 return (voltage1 > voltage2-0.005) && (voltage1 < voltage2+0.005);
jn80842 14:2d47b97c2028 146 }
jn80842 14:2d47b97c2028 147
jn80842 14:2d47b97c2028 148 void read_voltages(float voltages[48]) {
jn80842 21:4ec999be140a 149 float voltbuffer[48] = {};
ddrew73 16:028a8548ab22 150 scan_select = 0;
jn80842 14:2d47b97c2028 151 int sn = 0;
jn80842 19:fea62e9c1ac4 152 for (int i=0;i<48;i++) {
ddrew73 16:028a8548ab22 153 sn = i;
ddrew73 15:236d90e38951 154 D_in = (sn)%2;
ddrew73 15:236d90e38951 155 E_in = ((sn)/2)%2;
ddrew73 15:236d90e38951 156 F_in = ((sn)/4)%2;
ddrew73 15:236d90e38951 157 A_in = ((sn)/8)%2;
ddrew73 15:236d90e38951 158 B_in = ((sn)/16)%2;
ddrew73 15:236d90e38951 159 C_in = ((sn)/32)%2;
jn80842 21:4ec999be140a 160
jn80842 21:4ec999be140a 161 for (int j=0;j<10;j++) {
jn80842 21:4ec999be140a 162 wait(0.0025);
jn80842 21:4ec999be140a 163 voltbuffer[sn] = (adc.read()/10) + voltbuffer[sn];
jn80842 21:4ec999be140a 164 }
jn80842 21:4ec999be140a 165 voltages[sn] = voltbuffer[sn];
jn80842 14:2d47b97c2028 166 }
jn80842 14:2d47b97c2028 167 }
jn80842 14:2d47b97c2028 168
ddrew73 16:028a8548ab22 169 void float_check(float voltages[48],float dacval) {
ddrew73 16:028a8548ab22 170 int sn = 0;
ddrew73 16:028a8548ab22 171 for (int i=0;i<48;i++) { // iterate over two columns of breadboard
ddrew73 16:028a8548ab22 172 // iterate over 24 rows of each column
ddrew73 16:028a8548ab22 173 sn = i;
ddrew73 16:028a8548ab22 174 D_in = (sn)%2;
ddrew73 16:028a8548ab22 175 E_in = ((sn)/2)%2;
ddrew73 16:028a8548ab22 176 F_in = ((sn)/4)%2;
ddrew73 16:028a8548ab22 177 A_in = ((sn)/8)%2;
ddrew73 16:028a8548ab22 178 B_in = ((sn)/16)%2;
ddrew73 16:028a8548ab22 179 C_in = ((sn)/32)%2;
ddrew73 16:028a8548ab22 180
ddrew73 16:028a8548ab22 181 scan_select = 1;
ddrew73 16:028a8548ab22 182 scan_select = 0;
ddrew73 17:fcc378db08f4 183 wait(0.02);
ddrew73 16:028a8548ab22 184 float in_val = adc.read();
ddrew73 16:028a8548ab22 185 voltages[sn] = in_val;
ddrew73 16:028a8548ab22 186
ddrew73 17:fcc378db08f4 187 wait(0.035);
ddrew73 16:028a8548ab22 188
ddrew73 16:028a8548ab22 189 scan_select = 1;
ddrew73 16:028a8548ab22 190 scan_select = 0;
ddrew73 17:fcc378db08f4 191 wait(0.02);
ddrew73 16:028a8548ab22 192 in_val = adc.read();
ddrew73 16:028a8548ab22 193
ddrew73 16:028a8548ab22 194
jn80842 21:4ec999be140a 195 if ((in_val < voltages[sn]-0.008) || (in_val > voltages[sn]+0.008)){
jn80842 19:fea62e9c1ac4 196 voltages[sn] = 100.0;
ddrew73 16:028a8548ab22 197
ddrew73 16:028a8548ab22 198 }
ddrew73 16:028a8548ab22 199
ddrew73 16:028a8548ab22 200
ddrew73 16:028a8548ab22 201 }
ddrew73 16:028a8548ab22 202 }
ddrew73 16:028a8548ab22 203
ddrew73 16:028a8548ab22 204
ddrew73 16:028a8548ab22 205
jn80842 21:4ec999be140a 206 void compare_voltages(float voltages[48], float clientdata[48], int colselect, int rowselect, float vddval, float floatchecked[48], float newvoltages[48]) {
jn80842 14:2d47b97c2028 207 // get selected row voltage
jn80842 21:4ec999be140a 208 float voltbuffer[48] = {};
ddrew73 16:028a8548ab22 209 scan_select = 0;
ddrew73 15:236d90e38951 210 float rowval = voltages[(colselect*24)+ rowselect];
jn80842 14:2d47b97c2028 211 for (int i=0;i<48;i++) {
ddrew73 15:236d90e38951 212 int sn = i;//(colselect+1)*(rowselect+1);
ddrew73 15:236d90e38951 213 D_in = (sn)%2;
ddrew73 15:236d90e38951 214 E_in = ((sn)/2)%2;
ddrew73 15:236d90e38951 215 F_in = ((sn)/4)%2;
ddrew73 15:236d90e38951 216 A_in = ((sn)/8)%2;
ddrew73 15:236d90e38951 217 B_in = ((sn)/16)%2;
ddrew73 15:236d90e38951 218 C_in = ((sn)/32)%2;
jn80842 21:4ec999be140a 219
jn80842 21:4ec999be140a 220 for (int j=0;j<10;j++) {
jn80842 21:4ec999be140a 221 wait(0.0025);
jn80842 21:4ec999be140a 222 voltbuffer[sn] = (adc.read()/10) + voltbuffer[sn];
jn80842 21:4ec999be140a 223 }
jn80842 21:4ec999be140a 224 newvoltages[sn] = voltbuffer[sn];
jn80842 21:4ec999be140a 225
jn80842 21:4ec999be140a 226 // float in_val = adc.read();
jn80842 21:4ec999be140a 227 // newvoltages[i] = in_val;
ddrew73 15:236d90e38951 228
ddrew73 16:028a8548ab22 229 if (floatchecked[sn] == 100){
ddrew73 16:028a8548ab22 230 set_led(i,LED_OFF);
jn80842 19:fea62e9c1ac4 231 clientdata[i] = 100.0;
ddrew73 16:028a8548ab22 232 }
ddrew73 16:028a8548ab22 233 else {
ddrew73 15:236d90e38951 234
jn80842 21:4ec999be140a 235
jn80842 21:4ec999be140a 236 if (!voltages_equal(voltages[i],newvoltages[sn])) {
jn80842 14:2d47b97c2028 237 // this row is floating
ddrew73 15:236d90e38951 238 set_led(i,LED_OFF);
jn80842 19:fea62e9c1ac4 239 clientdata[i] = 100.0;
jn80842 21:4ec999be140a 240 } else if (voltages_equal(voltages[i],vddval) || voltages_equal(newvoltages[i],vddval)) {
jn80842 14:2d47b97c2028 241 // this row matches vdd
jn80842 14:2d47b97c2028 242 set_led(i,LED_RED);
jn80842 19:fea62e9c1ac4 243 clientdata[i] = vddval;
jn80842 21:4ec999be140a 244 } else if (voltages_equal(voltages[i],0.0) || voltages_equal(newvoltages[i],0.0)) {
jn80842 14:2d47b97c2028 245 // this row matches ground
jn80842 14:2d47b97c2028 246 set_led(i,LED_YELLOW);
jn80842 19:fea62e9c1ac4 247 clientdata[i] = 0.0;
jn80842 21:4ec999be140a 248 } else if (voltages_equal(voltages[i],rowval) || voltages_equal(newvoltages[i],rowval)) {
jn80842 14:2d47b97c2028 249 // this row matches selected row
jn80842 14:2d47b97c2028 250 set_led(i,LED_GREEN);
jn80842 19:fea62e9c1ac4 251 clientdata[i] = rowval;
jn80842 14:2d47b97c2028 252 } else {
ddrew73 15:236d90e38951 253 set_led(i,LED_OFF);
jn80842 19:fea62e9c1ac4 254 clientdata[i] = voltages[i];
jn80842 12:c4b046975527 255 }
ddrew73 16:028a8548ab22 256 } // else if closing
ddrew73 16:028a8548ab22 257 } //for loop closing
ddrew73 16:028a8548ab22 258 } //compare_voltages function closing
jn80842 12:c4b046975527 259
ddrew73 7:7fbe8dc5e4fa 260
ddrew73 0:16d2619002d7 261 int main()
ddrew73 0:16d2619002d7 262 {
ddrew73 0:16d2619002d7 263
ddrew73 0:16d2619002d7 264 //Scan init
jn80842 14:2d47b97c2028 265 float originalvoltages[48] = {};
jn80842 21:4ec999be140a 266 float newvoltages[48] = {};
jn80842 21:4ec999be140a 267
ddrew73 7:7fbe8dc5e4fa 268 float clientdata[48] = {};
jn80842 14:2d47b97c2028 269 float vddval = 0.0;
ddrew73 15:236d90e38951 270 float rowval = 0.0;
ddrew73 16:028a8548ab22 271 float dacval = 0.1;
ddrew73 16:028a8548ab22 272
ddrew73 16:028a8548ab22 273 float floatout[48] = {};
ddrew73 0:16d2619002d7 274
ddrew73 0:16d2619002d7 275 //LED init
ddrew73 15:236d90e38951 276 int rowselect = 0, moved = 1, colselect = 0, selected = 0, oldselected = 49;
ddrew73 4:5d27966f93e4 277 ledbar_left.begin(0x70);
ddrew73 4:5d27966f93e4 278 ledbar_left.clear();
ddrew73 4:5d27966f93e4 279 ledbar_left.writeDisplay();
ddrew73 5:03d75ad40d5e 280
ddrew73 4:5d27966f93e4 281 ledbar_right.begin(0x70);
ddrew73 4:5d27966f93e4 282 ledbar_right.clear();
ddrew73 4:5d27966f93e4 283 ledbar_right.writeDisplay();
ddrew73 0:16d2619002d7 284
ddrew73 0:16d2619002d7 285 //LCD init
ddrew73 0:16d2619002d7 286 lcd.cls();
jn80842 14:2d47b97c2028 287 int written = 0;
jn80842 14:2d47b97c2028 288
ddrew73 17:fcc378db08f4 289 wifi.init();
jn80842 20:b30b958dbd86 290 char * writable;
ddrew73 11:b520586dc0a1 291
ddrew73 9:5fa90677ff3e 292 //Osci
ddrew73 9:5fa90677ff3e 293 int loopcount = 0, pressed = 0;
ddrew73 9:5fa90677ff3e 294 float begintime = 0, endtime = 0, elapsed = 0;
jn80842 20:b30b958dbd86 295
jn80842 20:b30b958dbd86 296 int datatosend = 0;
jn80842 20:b30b958dbd86 297
ddrew73 0:16d2619002d7 298
ddrew73 0:16d2619002d7 299
ddrew73 0:16d2619002d7 300 while(1) {
jn80842 20:b30b958dbd86 301 if (wifi.is_connected() == false) {
jn80842 21:4ec999be140a 302 pc.printf("trying to connect to v\r\n");
jn80842 20:b30b958dbd86 303 if (wifi.connect() == -1) {
jn80842 20:b30b958dbd86 304 pc.printf("Failed to connect\r\n");
jn80842 20:b30b958dbd86 305 } else {
jn80842 20:b30b958dbd86 306 pc.printf("IP address: %s \r\n", wifi.getIPAddress());
jn80842 20:b30b958dbd86 307 }
jn80842 14:2d47b97c2028 308 } else {
jn80842 20:b30b958dbd86 309 if (datatosend) {
jn80842 20:b30b958dbd86 310 pc.printf("json in queue to be sent out\r\n");
jn80842 20:b30b958dbd86 311 Websocket ws("ws://sockets.mbed.org/ws/toastboard/rw");
jn80842 20:b30b958dbd86 312 ws.connect();
jn80842 20:b30b958dbd86 313 if (ws.send(writable) != -1) {
jn80842 20:b30b958dbd86 314 datatosend = 0;
jn80842 20:b30b958dbd86 315 pc.printf("we have sent a message!\r\n");
jn80842 20:b30b958dbd86 316 delete writable;
jn80842 20:b30b958dbd86 317 }
jn80842 20:b30b958dbd86 318 }
jn80842 20:b30b958dbd86 319
jn80842 14:2d47b97c2028 320 }
jn80842 19:fea62e9c1ac4 321
jn80842 21:4ec999be140a 322
ddrew73 17:fcc378db08f4 323
ddrew73 0:16d2619002d7 324 //Display
jn80842 14:2d47b97c2028 325 if (moved ==1) {
ddrew73 5:03d75ad40d5e 326 ledbar_left.clear();
ddrew73 5:03d75ad40d5e 327 ledbar_right.clear();
jn80842 14:2d47b97c2028 328 set_led((colselect*24+rowselect),LED_GREEN);
ddrew73 5:03d75ad40d5e 329 ledbar_left.writeDisplay();
ddrew73 5:03d75ad40d5e 330 ledbar_right.writeDisplay();
ddrew73 7:7fbe8dc5e4fa 331 }
ddrew73 0:16d2619002d7 332 //Moving the selected row
ddrew73 0:16d2619002d7 333 if (upbutton.read() == 0) {
ddrew73 0:16d2619002d7 334 rowselect = rowselect-1;
ddrew73 0:16d2619002d7 335 moved = 1;
jn80842 14:2d47b97c2028 336 written = 0;
jn80842 18:f7a00c31ff58 337 pc.printf("moved up\r\n");
ddrew73 15:236d90e38951 338 wait(0.3);
ddrew73 0:16d2619002d7 339 }
ddrew73 0:16d2619002d7 340
ddrew73 0:16d2619002d7 341 if (downbutton.read() == 0) {
ddrew73 0:16d2619002d7 342 rowselect = rowselect+1;
ddrew73 0:16d2619002d7 343 moved = 1;
jn80842 14:2d47b97c2028 344 written = 0;
jn80842 18:f7a00c31ff58 345 pc.printf("moved down\r\n");
ddrew73 15:236d90e38951 346 wait(0.3);
ddrew73 0:16d2619002d7 347 }
ddrew73 5:03d75ad40d5e 348
ddrew73 4:5d27966f93e4 349 if (leftbutton.read() == 0) {
ddrew73 4:5d27966f93e4 350 colselect = 0;
ddrew73 5:03d75ad40d5e 351 ledbar_right.clear();
ddrew73 5:03d75ad40d5e 352 moved =1;
jn80842 14:2d47b97c2028 353 written = 0;
jn80842 18:f7a00c31ff58 354 pc.printf("moved left\r\n");
ddrew73 15:236d90e38951 355 wait(0.3);
ddrew73 4:5d27966f93e4 356 }
ddrew73 5:03d75ad40d5e 357
ddrew73 4:5d27966f93e4 358 if (rightbutton.read() == 0) {
ddrew73 4:5d27966f93e4 359 colselect = 1;
ddrew73 5:03d75ad40d5e 360 ledbar_left.clear();
ddrew73 5:03d75ad40d5e 361 moved =1;
jn80842 14:2d47b97c2028 362 written = 0;
jn80842 18:f7a00c31ff58 363 pc.printf("moved right\r\n");
ddrew73 15:236d90e38951 364 wait(0.3);
ddrew73 5:03d75ad40d5e 365 }
ddrew73 0:16d2619002d7 366
ddrew73 0:16d2619002d7 367 //Boundary checking
ddrew73 0:16d2619002d7 368 if (rowselect > 23) {
ddrew73 0:16d2619002d7 369 rowselect = 23;
ddrew73 0:16d2619002d7 370 }
ddrew73 0:16d2619002d7 371 if (rowselect < 0) {
ddrew73 0:16d2619002d7 372 rowselect = 0;
ddrew73 0:16d2619002d7 373 }
ddrew73 0:16d2619002d7 374
ddrew73 15:236d90e38951 375 selected = (colselect * 24) + (rowselect+1);
jn80842 20:b30b958dbd86 376 // pc.printf("selected is %d\r\n",selected);
ddrew73 15:236d90e38951 377
ddrew73 0:16d2619002d7 378 //Implementing scanning
ddrew73 0:16d2619002d7 379
ddrew73 0:16d2619002d7 380 if (scanbutton.read() == 0) {
jn80842 21:4ec999be140a 381
jn80842 21:4ec999be140a 382 lcd.cls();
jn80842 21:4ec999be140a 383 lcd.locate(0,0);
jn80842 21:4ec999be140a 384 lcd.printf("Scanning....");
jn80842 21:4ec999be140a 385
jn80842 21:4ec999be140a 386 float vddbuff = 0;
ddrew73 15:236d90e38951 387 A_in = 0;
ddrew73 7:7fbe8dc5e4fa 388 B_in = 1;
ddrew73 7:7fbe8dc5e4fa 389 C_in = 1;
ddrew73 7:7fbe8dc5e4fa 390 D_in = 1;
ddrew73 15:236d90e38951 391 E_in = 0;
ddrew73 15:236d90e38951 392 F_in = 0;
ddrew73 11:b520586dc0a1 393
jn80842 21:4ec999be140a 394 for (int j=0;j<10;j++) {
jn80842 21:4ec999be140a 395 wait(0.0025);
jn80842 21:4ec999be140a 396 vddbuff = (adc.read()/10) + vddbuff;
jn80842 21:4ec999be140a 397 }
jn80842 21:4ec999be140a 398 vddval = vddbuff;
jn80842 21:4ec999be140a 399
jn80842 21:4ec999be140a 400
jn80842 21:4ec999be140a 401
ddrew73 0:16d2619002d7 402
ddrew73 7:7fbe8dc5e4fa 403 ledbar_left.clear();
ddrew73 7:7fbe8dc5e4fa 404 ledbar_right.clear();
ddrew73 1:0183a7d38878 405
jn80842 14:2d47b97c2028 406 // first set of voltages read into old_volt_mat
jn80842 21:4ec999be140a 407
jn80842 21:4ec999be140a 408 //float_check(floatout,dacval);
ddrew73 17:fcc378db08f4 409 wait(0.2);
jn80842 14:2d47b97c2028 410 read_voltages(originalvoltages);
jn80842 14:2d47b97c2028 411 // second set for comparison, read into clientdata
ddrew73 17:fcc378db08f4 412 wait(0.2);
jn80842 21:4ec999be140a 413 compare_voltages(originalvoltages,clientdata,colselect,rowselect,vddval,floatout,newvoltages);
ddrew73 16:028a8548ab22 414
ddrew73 17:fcc378db08f4 415
ddrew73 0:16d2619002d7 416
ddrew73 15:236d90e38951 417 selected = (colselect * 24) + (rowselect+1);
ddrew73 17:fcc378db08f4 418 rowval = originalvoltages[selected-1];
ddrew73 11:b520586dc0a1 419
jn80842 14:2d47b97c2028 420 written = 0;
jn80842 14:2d47b97c2028 421 moved = 0;
ddrew73 11:b520586dc0a1 422
ddrew73 8:725d938b301b 423 //DEBUGGING TOOLS //////////////
ddrew73 11:b520586dc0a1 424
ddrew73 15:236d90e38951 425 pc.printf("\r\n%1.3f %1.3f \r\n", vddval, rowval);
jn80842 14:2d47b97c2028 426 for (int i = 0; i<48; i++) {
jn80842 21:4ec999be140a 427 pc.printf(" %1.4f ", clientdata[i]);
jn80842 14:2d47b97c2028 428 }
jn80842 14:2d47b97c2028 429 pc.printf(" \r\n \r\n ");
jn80842 14:2d47b97c2028 430 for (int x = 0; x < 48; x++) {
jn80842 21:4ec999be140a 431 pc.printf("%1.4f %1.4f %d \r\n", originalvoltages[x], newvoltages[x], x+1);
jn80842 14:2d47b97c2028 432 }
jn80842 14:2d47b97c2028 433 ////////////////////////
ddrew73 11:b520586dc0a1 434
ddrew73 11:b520586dc0a1 435
ddrew73 17:fcc378db08f4 436 //THIS NEEDS TO GO AWAY!
ddrew73 11:b520586dc0a1 437
ddrew73 11:b520586dc0a1 438 } // END OF SCANBUTTON IF STATEMENT
ddrew73 11:b520586dc0a1 439
jn80842 14:2d47b97c2028 440 if (moved==0 && written == 0) {
ddrew73 7:7fbe8dc5e4fa 441 ledbar_left.writeDisplay();
ddrew73 7:7fbe8dc5e4fa 442 ledbar_right.writeDisplay();
ddrew73 15:236d90e38951 443 lcd_write_voltage_info(vddval*3.3,selected,rowval*3.3);
ddrew73 15:236d90e38951 444
ddrew73 17:fcc378db08f4 445
jn80842 13:209da1dcb6e1 446 // send data to websocket
jn80842 20:b30b958dbd86 447 datatosend = 1;
jn80842 20:b30b958dbd86 448 std::string json = build_json(vddval,selected,clientdata);
jn80842 20:b30b958dbd86 449 // delete writable;
jn80842 20:b30b958dbd86 450 writable = new char[json.size() + 1];
jn80842 20:b30b958dbd86 451 std::copy(json.begin(), json.end(), writable);
jn80842 20:b30b958dbd86 452 writable[json.size()] = '\0';
jn80842 20:b30b958dbd86 453 pc.printf(writable);
jn80842 20:b30b958dbd86 454 pc.printf("\r\n");
jn80842 20:b30b958dbd86 455
jn80842 21:4ec999be140a 456
jn80842 21:4ec999be140a 457
jn80842 14:2d47b97c2028 458 written = 1;
ddrew73 15:236d90e38951 459 } else if (oldselected != selected) {
jn80842 14:2d47b97c2028 460 lcd_write_selected_info(selected);
ddrew73 15:236d90e38951 461
ddrew73 11:b520586dc0a1 462 }
ddrew73 15:236d90e38951 463 oldselected = selected;
ddrew73 5:03d75ad40d5e 464
ddrew73 5:03d75ad40d5e 465
ddrew73 5:03d75ad40d5e 466
ddrew73 5:03d75ad40d5e 467
ddrew73 4:5d27966f93e4 468
ddrew73 11:b520586dc0a1 469
ddrew73 7:7fbe8dc5e4fa 470
ddrew73 0:16d2619002d7 471
ddrew73 0:16d2619002d7 472
ddrew73 4:5d27966f93e4 473
ddrew73 4:5d27966f93e4 474
ddrew73 4:5d27966f93e4 475
ddrew73 7:7fbe8dc5e4fa 476 } // END OF WHILE(1)
ddrew73 7:7fbe8dc5e4fa 477
ddrew73 7:7fbe8dc5e4fa 478
ddrew73 7:7fbe8dc5e4fa 479
ddrew73 4:5d27966f93e4 480
ddrew73 7:7fbe8dc5e4fa 481 } // END OF INT MAIN
ddrew73 7:7fbe8dc5e4fa 482
ddrew73 7:7fbe8dc5e4fa 483
ddrew73 11:b520586dc0a1 484 /*
ddrew73 11:b520586dc0a1 485 OSCILLISCOPE
ddrew73 7:7fbe8dc5e4fa 486
ddrew73 7:7fbe8dc5e4fa 487
ddrew73 11:b520586dc0a1 488 while (scanbutton == 0){
ddrew73 11:b520586dc0a1 489 if (loopcount = 0){
ddrew73 11:b520586dc0a1 490 timer.reset();
ddrew73 11:b520586dc0a1 491 timer.start();
ddrew73 11:b520586dc0a1 492 begintime = timer.read_ms();
ddrew73 11:b520586dc0a1 493 pressed == 1;
ddrew73 11:b520586dc0a1 494 }
ddrew73 7:7fbe8dc5e4fa 495
ddrew73 11:b520586dc0a1 496 int sn = (colselect + 1)*(rowselect + 1);
ddrew73 11:b520586dc0a1 497 A_in = (sn-1)&2;
ddrew73 11:b520586dc0a1 498 B_in = ((sn-1)/2)%2;
ddrew73 11:b520586dc0a1 499 C_in = ((sn-1)/4)%2;
ddrew73 11:b520586dc0a1 500 D_in = ((sn-1)/8)%2;
ddrew73 11:b520586dc0a1 501 E_in = ((sn-1)/16)%2;
ddrew73 11:b520586dc0a1 502 F_in = ((sn-1)/32)%2;
ddrew73 11:b520586dc0a1 503 volt_buffer[loopcount] = adc.read();
ddrew73 8:725d938b301b 504
ddrew73 8:725d938b301b 505
ddrew73 11:b520586dc0a1 506 loopcount = loopcount +1;
ddrew73 11:b520586dc0a1 507 } // BREAK THE WHILE SCANBUTTON
ddrew73 8:725d938b301b 508
ddrew73 11:b520586dc0a1 509 if (pressed == 1){
ddrew73 11:b520586dc0a1 510 timer.stop();
ddrew73 11:b520586dc0a1 511 endtime = timer.read_ms();
ddrew73 11:b520586dc0a1 512 elapsed = endtime - begintime;
ddrew73 8:725d938b301b 513
ddrew73 11:b520586dc0a1 514 DO ENTIRE SCAN STUFF
ddrew73 8:725d938b301b 515
ddrew73 11:b520586dc0a1 516 pressed = 0;
ddrew73 11:b520586dc0a1 517 }
ddrew73 8:725d938b301b 518
ddrew73 11:b520586dc0a1 519 */