:)

Dependencies:   MbedJSONValue DebounceIn TextLCD USBDevice mbed WebSocketClient cc3000_hostdriver_mbedsocket Adafruit_LEDBackpack_2

Files at this revision

API Documentation at this revision

Comitter:
jn80842
Date:
Thu Dec 11 19:15:20 2014 +0000
Parent:
20:b30b958dbd86
Commit message:
dan/filip's changes to handle floating rows

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Thu Dec 11 03:08:30 2014 +0000
+++ b/main.cpp	Thu Dec 11 19:15:20 2014 +0000
@@ -35,8 +35,8 @@
 
 //Scanner stuff
 
-//DebounceIn scanbutton(PTC13);
-DebounceIn scanbutton(D7);
+DebounceIn scanbutton(PTC13);
+//DebounceIn scanbutton(D7);
 
 DigitalOut A_in(PTB10);
 DigitalOut B_in(PTB11);
@@ -67,9 +67,9 @@
 void lcd_write_voltage_info(float vddval,int selected,float rowval) {
     lcd.cls();
     lcd.locate(0,1);
-    lcd.printf("Vdd: %1.1f V",vddval);
+    lcd.printf("Vdd: %1.2f V",vddval);
     lcd.locate(0,0);
-    lcd.printf("Row %d: %1.1f V",selected,rowval);
+    lcd.printf("Row %d: %1.2f V",selected,rowval);
 }
 
 
@@ -140,11 +140,13 @@
 }
 
 
+
 bool voltages_equal(float voltage1,float voltage2) {
-    return (voltage1 > voltage2-0.008) && (voltage1 < voltage2+0.008);
+    return (voltage1 > voltage2-0.005) && (voltage1 < voltage2+0.005);
 }
 
 void read_voltages(float voltages[48]) {
+    float voltbuffer[48] = {};
     scan_select = 0;
     int sn = 0;
     for (int i=0;i<48;i++) {
@@ -155,9 +157,12 @@
             A_in = ((sn)/8)%2;
             B_in = ((sn)/16)%2;
             C_in = ((sn)/32)%2;
-
-            voltages[sn] = adc.read();
-        
+            
+            for (int j=0;j<10;j++) {
+            wait(0.0025);
+            voltbuffer[sn] = (adc.read()/10) + voltbuffer[sn];
+            }
+            voltages[sn] = voltbuffer[sn]; 
     }
 }
 
@@ -187,7 +192,7 @@
             in_val = adc.read();
    
             
-            if ((in_val < voltages[sn]-0.0008) || (in_val > voltages[sn]+0.0008)){
+            if ((in_val < voltages[sn]-0.008) || (in_val > voltages[sn]+0.008)){
                 voltages[sn] = 100.0;
             
             }
@@ -198,8 +203,9 @@
 
 
 
-void compare_voltages(float voltages[48], float clientdata[48], int colselect, int rowselect, float vddval, float floatchecked[48]) {
+void compare_voltages(float voltages[48], float clientdata[48], int colselect, int rowselect, float vddval, float floatchecked[48], float newvoltages[48]) {
     // get selected row voltage
+    float voltbuffer[48] = {};
     scan_select = 0;
     float rowval = voltages[(colselect*24)+ rowselect];
     for (int i=0;i<48;i++) {
@@ -210,8 +216,15 @@
         A_in = ((sn)/8)%2;
         B_in = ((sn)/16)%2;
         C_in = ((sn)/32)%2;
-
-        float in_val = adc.read();
+        
+         for (int j=0;j<10;j++) {
+            wait(0.0025);
+            voltbuffer[sn] = (adc.read()/10) + voltbuffer[sn];
+            }
+        newvoltages[sn] = voltbuffer[sn]; 
+        
+    //    float in_val = adc.read();
+    //    newvoltages[i] = in_val;
         
         if (floatchecked[sn] == 100){
             set_led(i,LED_OFF);
@@ -219,19 +232,20 @@
             }
         else {    
         
-        if (!voltages_equal(voltages[i],in_val)) {
+        
+        if (!voltages_equal(voltages[i],newvoltages[sn])) {
             // this row is floating
             set_led(i,LED_OFF);
             clientdata[i] = 100.0;
-        } else if (voltages_equal(voltages[i],vddval)) {
+        } else if (voltages_equal(voltages[i],vddval) || voltages_equal(newvoltages[i],vddval)) {
             // this row matches vdd
             set_led(i,LED_RED);
             clientdata[i] = vddval;
-        } else if (voltages_equal(voltages[i],0.0)) {
+        } else if (voltages_equal(voltages[i],0.0) || voltages_equal(newvoltages[i],0.0)) {
             // this row matches ground
             set_led(i,LED_YELLOW);
             clientdata[i] = 0.0;
-        } else if (voltages_equal(voltages[i],rowval)) {
+        } else if (voltages_equal(voltages[i],rowval) || voltages_equal(newvoltages[i],rowval)) {
             // this row matches selected row
             set_led(i,LED_GREEN);
             clientdata[i] = rowval;
@@ -249,6 +263,8 @@
 
     //Scan init
     float originalvoltages[48] = {};
+    float newvoltages[48] = {};
+
     float clientdata[48] = {};
     float vddval = 0.0;
     float rowval = 0.0;
@@ -272,7 +288,6 @@
 
     wifi.init();
     char * writable;
-   // Websocket ws("ws://sockets.mbed.org/ws/toastboard/rw");
 
     //Osci
     int loopcount = 0, pressed = 0;
@@ -284,7 +299,7 @@
 
     while(1) {
              if (wifi.is_connected() == false) {
-                pc.printf("trying to connect to wifi\r\n");
+                pc.printf("trying to connect to v\r\n");
                 if (wifi.connect() == -1) {
                     pc.printf("Failed to connect\r\n");
                 } else {
@@ -304,7 +319,7 @@
 
             }
 
-
+       
         
         //Display
         if (moved ==1) {
@@ -363,6 +378,12 @@
         //Implementing scanning
 
         if (scanbutton.read() == 0) {
+            
+            lcd.cls();
+            lcd.locate(0,0);
+            lcd.printf("Scanning....");
+            
+            float vddbuff = 0;
             A_in = 0;
             B_in = 1;
             C_in = 1;
@@ -370,19 +391,26 @@
             E_in = 0;
             F_in = 0;
 
-            vddval = adc.read();
+            for (int j=0;j<10;j++) {
+            wait(0.0025);
+            vddbuff = (adc.read()/10) + vddbuff;
+            }
+            vddval = vddbuff; 
+           
+            
+            
 
             ledbar_left.clear();
             ledbar_right.clear();
 
             // first set of voltages read into old_volt_mat
-            float_check(floatout,dacval);
+            
+            //float_check(floatout,dacval);
             wait(0.2);
             read_voltages(originalvoltages);
-           
             // second set for comparison, read into clientdata
             wait(0.2);
-            compare_voltages(originalvoltages,clientdata,colselect,rowselect,vddval,floatout);
+            compare_voltages(originalvoltages,clientdata,colselect,rowselect,vddval,floatout,newvoltages);
         
            
 
@@ -396,11 +424,11 @@
 
             pc.printf("\r\n%1.3f %1.3f \r\n", vddval, rowval);
             for (int i = 0; i<48; i++) {
-                pc.printf(" %1.3f ", clientdata[i]);
+                pc.printf(" %1.4f ", clientdata[i]);
             }
             pc.printf(" \r\n \r\n ");
             for (int x = 0; x < 48; x++) {
-                    pc.printf("%1.4f  %1.4f %d  \r\n", originalvoltages[x], floatout[x], x+1);
+                    pc.printf("%1.4f  %1.4f  %d  \r\n", originalvoltages[x], newvoltages[x], x+1);
             }
             ////////////////////////
 
@@ -425,6 +453,8 @@
                 pc.printf(writable);
                 pc.printf("\r\n");
 
+                
+                
                 written = 1;
             } else if (oldselected != selected) {
                 lcd_write_selected_info(selected);