:)
Dependencies: MbedJSONValue DebounceIn TextLCD USBDevice mbed WebSocketClient cc3000_hostdriver_mbedsocket Adafruit_LEDBackpack_2
main.cpp.orig
- Committer:
- jn80842
- Date:
- 2014-12-11
- Revision:
- 21:4ec999be140a
- Parent:
- 13:209da1dcb6e1
File content as of revision 21:4ec999be140a:
#include "mbed.h"
#include <string>
#include "Adafruit_LEDBackpack.h"
#include "Adafruit_GFX.h"
#include "TextLCD.h"
#include "DebounceIn.h"
#include "cc3000.h"
#include "Websocket.h"
#include "MbedJSONValue.h"
//Debug
Serial pc(USBTX, USBRX); // tx, rx
//For oscilliscope
Timer timer;
//LED stuff
I2C i2c_left(PTC11,PTC10);
Adafruit_24bargraph ledbar_left=Adafruit_24bargraph(&i2c_left);
I2C i2c_right(D7,D6);
Adafruit_24bargraph ledbar_right=Adafruit_24bargraph(&i2c_right);
DebounceIn upbutton(PTA16);
DebounceIn downbutton(PTC12);
DebounceIn leftbutton(PTC17);
DebounceIn rightbutton(PTC16);
//Scanner stuff
DebounceIn scanbutton(PTC13);
DigitalOut A_in(PTB10);
DigitalOut B_in(PTB11);
DigitalOut C_in(PTE2);
DigitalOut D_in(PTE3);
DigitalOut E_in(PTE4);
DigitalOut F_in(PTE5);
AnalogIn adc(PTB0);
//LCD stuff
//extLCD(PinName rs, PinName e, PinName d4, PinName d5, PinName d6, PinName d7, LCDType type = LCD16x2);
TextLCD lcd(PTC6,PTC5,D5,D4,D3,D2,TextLCD::LCD20x4);
//WIFI STUFF
/*
// cc3000 KL25Z wifi connection
// we need to define connection pins for:
// - IRQ => (pin D3)
// - Enable => (pin D5)
// - SPI CS => (pin D10)
// - SPI MOSI => (pin D11)
// - SPI MISO => (pin D12)
// - SPI CLK => (pin D13)
// plus wifi network SSID, password, security level and smart-configuration flag.
mbed_cc3000::cc3000 wifi(D8, D9, D10, SPI(D11, D12, D13),
"SSID", "PASSWORD", WPA2, false);
Websocket ws("ws://sockets.mbed.org/ws/toastboard/rw");
MbedJSONValue demo;
*/
int main()
{
//Scan init
int con_mat[24][2] = {};
float volt_mat[24][2] = {};
float clientdata[48] = {};
float rowval = 0, vddval = 0;
//LED init
int rowselect = 0, moved = 1, colselect = 0, selected = 0;
ledbar_left.begin(0x70);
ledbar_left.clear();
ledbar_left.writeDisplay();
ledbar_right.begin(0x70);
ledbar_right.clear();
ledbar_right.writeDisplay();
//LCD init
lcd.cls();
//Osci
int loopcount = 0, pressed = 0;
float begintime = 0, endtime = 0, elapsed = 0;
while(1) {
//Display
if (colselect == 0 && moved == 1) {
ledbar_left.clear();
ledbar_right.clear();
ledbar_left.setBar(rowselect,LED_GREEN);
ledbar_left.writeDisplay();
ledbar_right.writeDisplay();
} else if (colselect == 1 && moved == 1) {
ledbar_left.clear();
ledbar_right.clear();
ledbar_right.setBar(rowselect,LED_GREEN);
ledbar_right.writeDisplay();
ledbar_left.writeDisplay();
}
//Moving the selected row
if (upbutton.read() == 0) {
rowselect = rowselect-1;
moved = 1;
wait(0.75);
}
if (downbutton.read() == 0) {
rowselect = rowselect+1;
moved = 1;
wait(0.75);
}
if (leftbutton.read() == 0) {
colselect = 0;
ledbar_right.clear();
moved =1;
wait(0.75);
}
if (rightbutton.read() == 0) {
colselect = 1;
ledbar_left.clear();
moved =1;
wait(0.75);
}
//Boundary checking
if (rowselect > 23) {
rowselect = 23;
}
if (rowselect < 0) {
rowselect = 0;
}
//Implementing scanning
if (scanbutton.read() == 0) {
A_in = 1;
B_in = 1;
C_in = 1;
D_in = 1;
E_in = 1;
F_in = 1;
vddval = adc.read();
//SET MULTIPLEXER TO READ SELECTED ROW
// Sample the 'selected' node
int sn = (colselect + 1)*(rowselect + 1);
A_in = (sn-1)&2;
B_in = ((sn-1)/2)%2;
C_in = ((sn-1)/4)%2;
D_in = ((sn-1)/8)%2;
E_in = ((sn-1)/16)%2;
F_in = ((sn-1)/32)%2;
rowval = adc.read();
ledbar_left.clear();
ledbar_right.clear();
for (int u = 0; u < 2; u++) {
for (int x = 0; x < 2; x++) {
for (int y = 0; y < 24; y++) {
int sn = (colselect+1)*(rowselect+1);
A_in = (sn-1)&2;
B_in = ((sn-1)/2)%2;
C_in = ((sn-1)/4)%2;
D_in = ((sn-1)/8)%2;
E_in = ((sn-1)/16)%2;
F_in = ((sn-1)/32)%2;
float in_val = adc.read();
if (u == 0) {
old_volt_map[x][y] = in_val
} else {
volt_map[x][y] = in_val
if (old_volt_map[x][y] != volt_map[x][y] ) {
volt_map[x][y] = 100;
}
if (x == 1) {
int z = y+24;
clientdata[z] = in_val;
} else {
clientdata[y] = in_val;
}
if ((in_val > vddval-0.01) && (in_val < vddval+0.01)) {
con_mat[x][y] = 2;
if (x == 0) {
ledbar_left.setBar(y,LED_RED);
} else {
ledbar_right.setBar(y,LED_RED);
}
} else if (in_val == 0) {
con_mat[x][y] = 3;
if (x == 0) {
ledbar_left.setBar(y,LED_YELLOW);
} else {
ledbar_right.setBar(y,LED_YELLOW);
}
} else if ((in_val > rowval-0.01) && (in_val < rowval+0.01)) {
con_mat[x][y] = 1;
if (x == 0) {
ledbar_left.setBar(y,LED_GREEN);
} else {
ledbar_right.setBar(y,LED_GREEN);
}
}
else if (volt_mat[x][y]==100) {
con_mat[x][y] = 4;
if (x == 0) {
ledbar_left.setBar(y,LED_OFF);
} else {
ledbar_right.setBar(y,LED_OFF);
}
}
else {
con_mat[x][y] = 0;
}
}}} //END OF ROWSCAN FOR LOOP
selected = rowselect;
if (colselect == 1) {
selected = selected+24;
}
/*
//STUFF INTO JSON FORMAT
char str[1];
for (int i= 0; i < 48; i++) {
sprintf(str, "%d", i);
demo[str] = clientdata[i];
}
demo["vdd"] = vddval;
demo["rowval"] = rowval;
demo["selected"] = selected;
*/
moved = 0;
//DEBUGGING TOOLS //////////////
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(" \r\n \r\n ");
for (int x = 0; x < 2; x++) {
for (int y = 0; y < 24; y++) {
pc.printf("%1.3f \r\n", volt_mat[x][y]);
}
}
////////////////////////
wait(1); //THIS NEEDS TO GO AWAY! :}
} // END OF SCANBUTTON IF STATEMENT
if (moved==0) {
ledbar_left.writeDisplay();
ledbar_right.writeDisplay();
lcd.cls();
lcd.locate(0,1);
lcd.printf("Vdd: %1.1f V",vddval);
lcd.locate(0,0);
lcd.printf("Row %d: %1.1f V",selected,rowval);
} else {
lcd.cls();
string programname = "The ToastBoard";
string instructions = "Select a row";
lcd.locate(0,0);
lcd.printf("%s",programname.c_str());
lcd.locate(0,1);
lcd.printf("%s",instructions.c_str());
}
} // END OF WHILE(1)
} // END OF INT MAIN
/*
FLOAT NODE CHECKER
add another "for" around the two for the 48 row checker:
if (u == 0){
old_volt_map[x,y] = in_val
}
else{
volt_map[x,y] = in_val
if (old_volt_map[x,y] != volt_map[x,y] ) {
volt_map[x,y] = 100;
}
PUT ALL ROW LIGHTING (CON_MAT) STUFF HERE
}
*/
/*
OSCILLISCOPE
while (scanbutton == 0){
if (loopcount = 0){
timer.reset();
timer.start();
begintime = timer.read_ms();
pressed == 1;
}
int sn = (colselect + 1)*(rowselect + 1);
A_in = (sn-1)&2;
B_in = ((sn-1)/2)%2;
C_in = ((sn-1)/4)%2;
D_in = ((sn-1)/8)%2;
E_in = ((sn-1)/16)%2;
F_in = ((sn-1)/32)%2;
volt_buffer[loopcount] = adc.read();
loopcount = loopcount +1;
} // BREAK THE WHILE SCANBUTTON
if (pressed == 1){
timer.stop();
endtime = timer.read_ms();
elapsed = endtime - begintime;
DO ENTIRE SCAN STUFF
pressed = 0;
}
*/