:)

Dependencies:   MbedJSONValue DebounceIn TextLCD USBDevice mbed WebSocketClient cc3000_hostdriver_mbedsocket Adafruit_LEDBackpack_2

Committer:
ddrew73
Date:
Mon Nov 24 17:52:11 2014 +0000
Revision:
5:03d75ad40d5e
Parent:
4:5d27966f93e4
Child:
6:d0a1eba7f943
LED/LCD code included in commented loop...

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"
ddrew73 0:16d2619002d7 7 #include "USBKeyboard.h"
jn80842 3:161fed8bd027 8 #include "cc3000.h"
jn80842 3:161fed8bd027 9 #include "Websocket.h"
jn80842 3:161fed8bd027 10 #include "MbedJSONValue.h"
ddrew73 0:16d2619002d7 11
ddrew73 0:16d2619002d7 12 //LED stuff
ddrew73 0:16d2619002d7 13 I2C i2c(D7,D6);
ddrew73 4:5d27966f93e4 14 Adafruit_24bargraph ledbar_left=Adafruit_24bargraph(&i2c);
ddrew73 4:5d27966f93e4 15
ddrew73 5:03d75ad40d5e 16 I2C i2c(D7,D6);
ddrew73 5:03d75ad40d5e 17 Adafruit_24bargraph ledbar_right=Adafruit_24bargraph(&i2c);
ddrew73 4:5d27966f93e4 18
ddrew73 0:16d2619002d7 19 DebounceIn upbutton(D9);
ddrew73 0:16d2619002d7 20 DebounceIn downbutton(D8);
ddrew73 5:03d75ad40d5e 21 DebounceIn leftbutton( );
ddrew73 5:03d75ad40d5e 22 DebounceIn rightbutton( );
ddrew73 0:16d2619002d7 23
ddrew73 0:16d2619002d7 24 //Scanner stuff
ddrew73 0:16d2619002d7 25
ddrew73 0:16d2619002d7 26 DebounceIn scanbutton(D10);
ddrew73 0:16d2619002d7 27
ddrew73 0:16d2619002d7 28 DigitalOut A_in(D0);
ddrew73 0:16d2619002d7 29 DigitalOut B_in(D1);
ddrew73 0:16d2619002d7 30 DigitalOut C_in(D2);
ddrew73 0:16d2619002d7 31
ddrew73 0:16d2619002d7 32 DigitalOut A_out(PTC7);
ddrew73 0:16d2619002d7 33 DigitalOut B_out(PTC0);
ddrew73 0:16d2619002d7 34 DigitalOut C_out(PTC3);
ddrew73 0:16d2619002d7 35
ddrew73 0:16d2619002d7 36 AnalogOut dac(PTE30);
ddrew73 0:16d2619002d7 37 AnalogIn adc(PTB0);
ddrew73 0:16d2619002d7 38
ddrew73 0:16d2619002d7 39 //USBKeyboard keyboard;
ddrew73 0:16d2619002d7 40
ddrew73 0:16d2619002d7 41
ddrew73 0:16d2619002d7 42 //LCD stuff
ddrew73 1:0183a7d38878 43 TextLCD lcd(D13,D12,PTA17,PTA16,PTC17,PTC16,TextLCD::LCD20x4);
ddrew73 0:16d2619002d7 44
jn80842 3:161fed8bd027 45 // cc3000 KL25Z wifi connection
jn80842 3:161fed8bd027 46 // we need to define connection pins for:
jn80842 3:161fed8bd027 47 // - IRQ => (pin D3)
jn80842 3:161fed8bd027 48 // - Enable => (pin D5)
jn80842 3:161fed8bd027 49 // - SPI CS => (pin D10)
jn80842 3:161fed8bd027 50 // - SPI MOSI => (pin D11)
jn80842 3:161fed8bd027 51 // - SPI MISO => (pin D12)
jn80842 3:161fed8bd027 52 // - SPI CLK => (pin D13)
jn80842 3:161fed8bd027 53 // plus wifi network SSID, password, security level and smart-configuration flag.
jn80842 3:161fed8bd027 54
jn80842 3:161fed8bd027 55 mbed_cc3000::cc3000 wifi(D3, D5, D10, SPI(D11, D12, D13),
jn80842 3:161fed8bd027 56 "SSID", "PASSWORD", WPA2, false);
jn80842 3:161fed8bd027 57 Websocket ws("ws://sockets.mbed.org/ws/toastboard/rw");
jn80842 3:161fed8bd027 58
ddrew73 0:16d2619002d7 59 int main()
ddrew73 0:16d2619002d7 60 {
ddrew73 0:16d2619002d7 61
ddrew73 0:16d2619002d7 62 //Scan init
ddrew73 0:16d2619002d7 63
ddrew73 0:16d2619002d7 64 float test_val = .001;
ddrew73 1:0183a7d38878 65 float row_volt = 0;
ddrew73 4:5d27966f93e4 66 int con_mat[24][2] = {};
ddrew73 0:16d2619002d7 67 int a1,b1,c1,a2,b2,c2;
ddrew73 4:5d27966f93e4 68 float volt_mat[24][2] = {};
ddrew73 0:16d2619002d7 69 //dac = test_val;
ddrew73 0:16d2619002d7 70
ddrew73 0:16d2619002d7 71
ddrew73 0:16d2619002d7 72 //LED init
ddrew73 4:5d27966f93e4 73 int redcount = 0, greencount = 0, rowselect = 0, rowselect_old = 0, moved = 1, colselect = 0;
ddrew73 4:5d27966f93e4 74 ledbar_left.begin(0x70);
ddrew73 4:5d27966f93e4 75 ledbar_left.clear();
ddrew73 4:5d27966f93e4 76 ledbar_left.writeDisplay();
ddrew73 5:03d75ad40d5e 77
ddrew73 4:5d27966f93e4 78 ledbar_right.begin(0x70);
ddrew73 4:5d27966f93e4 79 ledbar_right.clear();
ddrew73 4:5d27966f93e4 80 ledbar_right.writeDisplay();
ddrew73 0:16d2619002d7 81
ddrew73 0:16d2619002d7 82 //LCD init
ddrew73 0:16d2619002d7 83 lcd.cls();
ddrew73 1:0183a7d38878 84 string programname = "Dan's UI Test";
ddrew73 0:16d2619002d7 85
ddrew73 1:0183a7d38878 86 lcd.printf("%s",programname.c_str());
ddrew73 0:16d2619002d7 87
ddrew73 0:16d2619002d7 88 while(1) {
ddrew73 5:03d75ad40d5e 89
ddrew73 0:16d2619002d7 90 //Display
ddrew73 0:16d2619002d7 91
ddrew73 4:5d27966f93e4 92 if (colselect == 0) {
ddrew73 5:03d75ad40d5e 93 ledbar_left.clear();
ddrew73 5:03d75ad40d5e 94 ledbar_right.clear();
ddrew73 5:03d75ad40d5e 95 ledbar_left.setBar(rowselect,LED_GREEN);
ddrew73 5:03d75ad40d5e 96 ledbar_left.writeDisplay();
ddrew73 5:03d75ad40d5e 97 ledbar_right.writeDisplay();
ddrew73 5:03d75ad40d5e 98 } else
ddrew73 5:03d75ad40d5e 99 ledbar_left.clear();
ddrew73 5:03d75ad40d5e 100 ledbar_right.clear();
ddrew73 4:5d27966f93e4 101 ledbar_right.setBar(rowselect,LED_GREEN);
ddrew73 4:5d27966f93e4 102 ledbar_right.writeDisplay();
ddrew73 4:5d27966f93e4 103 ledbar_left.writeDisplay();
ddrew73 0:16d2619002d7 104
ddrew73 0:16d2619002d7 105 //Moving the selected row
ddrew73 0:16d2619002d7 106 if (upbutton.read() == 0) {
ddrew73 0:16d2619002d7 107 rowselect_old = rowselect;
ddrew73 0:16d2619002d7 108 rowselect = rowselect-1;
ddrew73 0:16d2619002d7 109 moved = 1;
ddrew73 0:16d2619002d7 110 wait(0.75);
ddrew73 0:16d2619002d7 111 }
ddrew73 0:16d2619002d7 112
ddrew73 0:16d2619002d7 113 if (downbutton.read() == 0) {
ddrew73 0:16d2619002d7 114 rowselect_old = rowselect;
ddrew73 0:16d2619002d7 115 rowselect = rowselect+1;
ddrew73 0:16d2619002d7 116 moved = 1;
ddrew73 0:16d2619002d7 117 wait(0.75);
ddrew73 0:16d2619002d7 118 }
ddrew73 5:03d75ad40d5e 119
ddrew73 4:5d27966f93e4 120 if (leftbutton.read() == 0) {
ddrew73 4:5d27966f93e4 121 colselect = 0;
ddrew73 5:03d75ad40d5e 122 ledbar_right.clear();
ddrew73 5:03d75ad40d5e 123 moved =1;
ddrew73 4:5d27966f93e4 124 wait(0.75);
ddrew73 5:03d75ad40d5e 125
ddrew73 4:5d27966f93e4 126 }
ddrew73 5:03d75ad40d5e 127
ddrew73 4:5d27966f93e4 128 if (rightbutton.read() == 0) {
ddrew73 4:5d27966f93e4 129 colselect = 1;
ddrew73 5:03d75ad40d5e 130 ledbar_left.clear();
ddrew73 5:03d75ad40d5e 131 moved =1;
ddrew73 4:5d27966f93e4 132 wait(0.75);
ddrew73 5:03d75ad40d5e 133
ddrew73 5:03d75ad40d5e 134
ddrew73 5:03d75ad40d5e 135 }
ddrew73 0:16d2619002d7 136
ddrew73 0:16d2619002d7 137 //Boundary checking
ddrew73 0:16d2619002d7 138 if (rowselect > 23) {
ddrew73 0:16d2619002d7 139 rowselect = 23;
ddrew73 0:16d2619002d7 140 }
ddrew73 0:16d2619002d7 141 if (rowselect < 0) {
ddrew73 0:16d2619002d7 142 rowselect = 0;
ddrew73 0:16d2619002d7 143 }
ddrew73 0:16d2619002d7 144
ddrew73 0:16d2619002d7 145 //Implementing scanning
ddrew73 0:16d2619002d7 146
ddrew73 0:16d2619002d7 147 if (scanbutton.read() == 0) {
ddrew73 0:16d2619002d7 148
ddrew73 0:16d2619002d7 149 for (int x = 0; x < 8; x++) {
ddrew73 0:16d2619002d7 150 for (int y = 0; y < 8; y++) {
ddrew73 0:16d2619002d7 151 // Stupid logic to convert count value to binary...
ddrew73 0:16d2619002d7 152 A_in = x%2;
ddrew73 0:16d2619002d7 153 a1 = x%2;
ddrew73 0:16d2619002d7 154 B_in = (x/2)%2;
ddrew73 0:16d2619002d7 155 b1 = (x/2)%2;
ddrew73 0:16d2619002d7 156 C_in = (x/4)%2;
ddrew73 0:16d2619002d7 157 c1 = (x/4)%2;
ddrew73 0:16d2619002d7 158
ddrew73 0:16d2619002d7 159 A_out = y%2;
ddrew73 0:16d2619002d7 160 int a2 = y%2;
ddrew73 0:16d2619002d7 161 B_out = (y/2)%2;
ddrew73 0:16d2619002d7 162 b2 = (y/2)%2;
ddrew73 0:16d2619002d7 163 C_out = (y/4)%2;
ddrew73 0:16d2619002d7 164 c2 = (y/4)%2;
ddrew73 0:16d2619002d7 165
ddrew73 0:16d2619002d7 166 // Now we do the scan test, results are stored in con_mat
ddrew73 0:16d2619002d7 167 //wait(0.01);
ddrew73 0:16d2619002d7 168 dac = test_val;
ddrew73 0:16d2619002d7 169 float in_val = adc.read();
ddrew73 0:16d2619002d7 170
ddrew73 0:16d2619002d7 171 if ((in_val > .0010) && (in_val < .0025))
ddrew73 0:16d2619002d7 172 con_mat[x][y] = 1;
ddrew73 0:16d2619002d7 173 else
ddrew73 0:16d2619002d7 174 con_mat[x][y] = 0;
ddrew73 0:16d2619002d7 175
ddrew73 0:16d2619002d7 176 //keyboard.printf("%f %f \n",dac.read(),in_val);
ddrew73 0:16d2619002d7 177 //keyboard.printf("%d %d %d\n",a2,b2,c2);
ddrew73 0:16d2619002d7 178 }
ddrew73 0:16d2619002d7 179 }
ddrew73 1:0183a7d38878 180
ddrew73 1:0183a7d38878 181 /*
ddrew73 1:0183a7d38878 182 for (int x=0;x<8;x++) {
ddrew73 1:0183a7d38878 183 for (int y=0;y<8;y++) {
ddrew73 1:0183a7d38878 184 keyboard.printf("%d ",con_mat[x][y]);
ddrew73 1:0183a7d38878 185 }}
ddrew73 1:0183a7d38878 186 */
ddrew73 0:16d2619002d7 187 //Displaying all connected rows as red light!
ddrew73 0:16d2619002d7 188 ledbar.clear();
ddrew73 0:16d2619002d7 189 for (int i=0; i<8; i++) {
ddrew73 0:16d2619002d7 190 if (con_mat[rowselect][i] == 1) {
ddrew73 0:16d2619002d7 191 ledbar.setBar(i,LED_RED);
ddrew73 0:16d2619002d7 192 }
ddrew73 0:16d2619002d7 193 }
ddrew73 0:16d2619002d7 194 ledbar.writeDisplay();
ddrew73 1:0183a7d38878 195
ddrew73 1:0183a7d38878 196 float vddmeasure = 3.14259;
ddrew73 1:0183a7d38878 197 float vrowmeasure = 1.1234;
ddrew73 1:0183a7d38878 198 lcd.cls();
ddrew73 1:0183a7d38878 199 lcd.locate(0,1);
ddrew73 1:0183a7d38878 200 lcd.printf("Vdd: %1.1f V",vddmeasure);
ddrew73 1:0183a7d38878 201 lcd.locate(0,0);
ddrew73 1:0183a7d38878 202 lcd.printf("Row: %1.1f V",vrowmeasure);
ddrew73 1:0183a7d38878 203
ddrew73 0:16d2619002d7 204 wait(2.5);
ddrew73 0:16d2619002d7 205 ledbar.clear();
ddrew73 0:16d2619002d7 206 ledbar.writeDisplay();
ddrew73 1:0183a7d38878 207 lcd.cls();
ddrew73 1:0183a7d38878 208 string programname = "Dan's UI Test";
ddrew73 1:0183a7d38878 209 lcd.printf("%s",programname.c_str());
ddrew73 0:16d2619002d7 210
ddrew73 0:16d2619002d7 211 }
ddrew73 0:16d2619002d7 212 }
ddrew73 0:16d2619002d7 213
ddrew73 0:16d2619002d7 214
ddrew73 0:16d2619002d7 215
ddrew73 0:16d2619002d7 216
ddrew73 0:16d2619002d7 217 }
ddrew73 0:16d2619002d7 218
ddrew73 0:16d2619002d7 219
ddrew73 4:5d27966f93e4 220 /*
ddrew73 4:5d27966f93e4 221
ddrew73 5:03d75ad40d5e 222 ///// PUT ALL BELOW IN SCAN BUTTON IF ////////
ddrew73 4:5d27966f93e4 223 //Scans rows connected to vdd and ground. Vdd = 2 in con mat, Ground = 3. Rows connected to selected row = 1.
ddrew73 4:5d27966f93e4 224
ddrew73 4:5d27966f93e4 225 //SET MULTIPLEXER TO READ VDD
ddrew73 4:5d27966f93e4 226 vddval = adc.read();
ddrew73 4:5d27966f93e4 227
ddrew73 4:5d27966f93e4 228 //SET MULTIPLEXER TO READ SELECTED ROW
ddrew73 4:5d27966f93e4 229 rowval = adc.read();
ddrew73 4:5d27966f93e4 230
ddrew73 5:03d75ad40d5e 231 ledbar_left.clear();
ddrew73 5:03d75ad40d5e 232 ledbar_right.clear();
ddrew73 5:03d75ad40d5e 233
ddrew73 4:5d27966f93e4 234 for (int x = 0; x < 2; x++) {
ddrew73 4:5d27966f93e4 235 for (int y = 0; y < 24; y++) {
ddrew73 4:5d27966f93e4 236 A_in = x%2;
ddrew73 4:5d27966f93e4 237 a1 = x%2;
ddrew73 4:5d27966f93e4 238 B_in = (x/2)%2;
ddrew73 4:5d27966f93e4 239 b1 = (x/2)%2;
ddrew73 4:5d27966f93e4 240 C_in = (x/4)%2;
ddrew73 4:5d27966f93e4 241 c1 = (x/4)%2;
ddrew73 4:5d27966f93e4 242
ddrew73 4:5d27966f93e4 243 A_out = y%2;
ddrew73 4:5d27966f93e4 244 int a2 = y%2;
ddrew73 4:5d27966f93e4 245 B_out = (y/2)%2;
ddrew73 4:5d27966f93e4 246 b2 = (y/2)%2;
ddrew73 4:5d27966f93e4 247 C_out = (y/4)%2;
ddrew73 4:5d27966f93e4 248 c2 = (y/4)%2;
ddrew73 4:5d27966f93e4 249
ddrew73 4:5d27966f93e4 250 float in_val = adc.read();
ddrew73 4:5d27966f93e4 251 volt_mat[x][y] = in_val;
ddrew73 5:03d75ad40d5e 252
ddrew73 4:5d27966f93e4 253 if (in_val == vddval){
ddrew73 4:5d27966f93e4 254 con_mat[x][y] = 2;
ddrew73 5:03d75ad40d5e 255 if (x == 0){
ddrew73 5:03d75ad40d5e 256 ledbar_left.setBar(y,LED_RED);
ddrew73 5:03d75ad40d5e 257 }
ddrew73 5:03d75ad40d5e 258 else {
ddrew73 5:03d75ad40d5e 259 ledbar_right.setBar(y,LED_RED);
ddrew73 5:03d75ad40d5e 260 }
ddrew73 4:5d27966f93e4 261 }
ddrew73 4:5d27966f93e4 262 if (in_val == 0){
ddrew73 4:5d27966f93e4 263 con_mat[x][y] = 3;
ddrew73 5:03d75ad40d5e 264 if (x == 0){
ddrew73 5:03d75ad40d5e 265 ledbar_left.setBar(y,LED_YELLOW);
ddrew73 5:03d75ad40d5e 266 }
ddrew73 5:03d75ad40d5e 267 else {
ddrew73 5:03d75ad40d5e 268 ledbar_right.setBar(y,LED_YELLOW);
ddrew73 5:03d75ad40d5e 269 }
ddrew73 4:5d27966f93e4 270 }
ddrew73 4:5d27966f93e4 271 if (in_val == rowval){
ddrew73 4:5d27966f93e4 272 con_mat[x][y] = 1;
ddrew73 5:03d75ad40d5e 273 if (x == 0){
ddrew73 5:03d75ad40d5e 274 ledbar_left.setBar(y,LED_GREEN);
ddrew73 5:03d75ad40d5e 275 }
ddrew73 5:03d75ad40d5e 276 else {
ddrew73 5:03d75ad40d5e 277 ledbar_right.setBar(y,LED_GREEN);
ddrew73 5:03d75ad40d5e 278 }
ddrew73 4:5d27966f93e4 279 }
ddrew73 4:5d27966f93e4 280 else
ddrew73 4:5d27966f93e4 281 con_mat[x][y] = 0;
ddrew73 4:5d27966f93e4 282 }
ddrew73 4:5d27966f93e4 283 }
ddrew73 5:03d75ad40d5e 284 moved = 0;
ddrew73 5:03d75ad40d5e 285
ddrew73 5:03d75ad40d5e 286 //// PUT ALL ABOVE IN SCAN BUTTON IF /////
ddrew73 5:03d75ad40d5e 287
ddrew73 5:03d75ad40d5e 288
ddrew73 5:03d75ad40d5e 289
ddrew73 5:03d75ad40d5e 290 if (moved==0) {
ddrew73 5:03d75ad40d5e 291 ledbar_left.writeDisplay();
ddrew73 5:03d75ad40d5e 292 ledbar_right.writeDisplay();
ddrew73 5:03d75ad40d5e 293 lcd.cls();
ddrew73 5:03d75ad40d5e 294 lcd.locate(0,1);
ddrew73 5:03d75ad40d5e 295 lcd.printf("Vdd: %1.1f V",vddval);
ddrew73 5:03d75ad40d5e 296 lcd.locate(0,0);
ddrew73 5:03d75ad40d5e 297 lcd.printf("Row: %1.1f V",rowval);
ddrew73 5:03d75ad40d5e 298 }
ddrew73 5:03d75ad40d5e 299 else {
ddrew73 5:03d75ad40d5e 300 lcd.cls();
ddrew73 5:03d75ad40d5e 301 string programname = "Dan's UI Test";
ddrew73 5:03d75ad40d5e 302 string instructions = "Select a row and scan it";
ddrew73 5:03d75ad40d5e 303 lcd.locate(0,0);
ddrew73 5:03d75ad40d5e 304 lcd.printf("%s",programname.c_str());
ddrew73 5:03d75ad40d5e 305 lcd.locate(0,1);
ddrew73 5:03d75ad40d5e 306 lcd.printf("%s",instructions.c_str());
ddrew73 5:03d75ad40d5e 307 }
ddrew73 5:03d75ad40d5e 308
ddrew73 5:03d75ad40d5e 309
ddrew73 5:03d75ad40d5e 310
ddrew73 5:03d75ad40d5e 311
ddrew73 4:5d27966f93e4 312
ddrew73 4:5d27966f93e4 313 //Q: Do we need to do the same test for ground or can 0.00 be assumed?
ddrew73 5:03d75ad40d5e 314 //Q: What is the most efficient way to compare all the "volt_mat" elements?
ddrew73 4:5d27966f93e4 315 //Q: Do we need to add a "confidence interval" around the rowval and vdd tests?
ddrew73 0:16d2619002d7 316
ddrew73 0:16d2619002d7 317
ddrew73 4:5d27966f93e4 318
ddrew73 4:5d27966f93e4 319
ddrew73 4:5d27966f93e4 320
ddrew73 4:5d27966f93e4 321 */
ddrew73 4:5d27966f93e4 322