IGGE Power board
Dependencies: mbed ADS1015 USBDevice MCP4725
Diff: main.cpp
- Revision:
- 4:d29a7b77b1c6
- Parent:
- 3:a01ea06ca9ab
- Child:
- 5:6b90ed7f3eb1
diff -r a01ea06ca9ab -r d29a7b77b1c6 main.cpp --- a/main.cpp Tue Apr 01 14:47:21 2014 +0000 +++ b/main.cpp Mon Apr 07 04:32:52 2014 +0000 @@ -1,17 +1,33 @@ #include "mbed.h" #include "Adafruit_ADS1015.h" -#include "USBSerial.h" +//#include "USBSerial.h" -#define SERIAL_BAUD_RATE 9600 +#include <iostream> +#include <map> +#include <string> +#include <stdio.h> + +//#define SERIAL_BAUD_RATE 9600 //library function setup I2C i2c(p28, p27); Adafruit_ADS1015 ads(&i2c); -USBSerial pc; // USB CDC serial port +//USBSerial pc; // USB CDC serial port CAN cantbus(p30, p29); Ticker graph; + +//can stuff +Ticker ticker; +CAN can1(p9, p10); +CAN can2(p30, p29); +char counter[8] = {1,1,1,1,1,1,1,1}; +int test=0x0; +char counter2=0; + + + //leds DigitalOut led0(LED1); DigitalOut led1(LED2); @@ -19,9 +35,9 @@ DigitalOut led3(LED4); //current readings -AnalogIn iBat(p15); //75a +AnalogIn iBat(p15); //75a PROTO AnalogIn iTwelve(p17); //31a -AnalogIn iFive(p18);//31a +AnalogIn iFive(p18);//31a PROTO AnalogIn iMot(p16);//75a AnalogIn iCpu(p20);//31a AnalogIn iPeri(p19);//31a @@ -33,7 +49,7 @@ #define fiveScal 12.2 //Relays -DigitalOut relSens(p21); +DigitalOut relSens(p21); // PROTO DigitalOut relUsr(p22); DigitalOut relNet(p23); DigitalOut relCpuRst(p24); @@ -41,88 +57,139 @@ //30 minute graph arrays -uint16_t iBatArr [180]; -uint16_t vBatArr [180]; -uint16_t iTwelveArr [180]; -uint16_t vTwelveArr [180]; -uint16_t iFiveArr [180]; -uint16_t vFiveArr [180]; -uint16_t iMotArr [180]; -uint16_t vMotArr [180]; -uint16_t iCpuArr [180]; -uint16_t iPeriArr [180]; +uint16_t powerArr [10]; //{iBat,vBat,iTwelve, vTwelve, iFive, vFive, iMot, vMot, iCpu, iPeri} + + +float ibat =0; +float ifive = 0; //volt uint16_t vBat, vTwelve,vFive,vMot ; + +void sending_values(long int int1,long int int2,long int int3,long int int4, int ID ) +{ + //val(); + counter[0]=int1 >> 8; + counter[1]=int1 & 0xFF; + counter[2]=int2 >> 8; + counter[3]=int2 & 0xFF; + counter[4]=int3 >> 8; + counter[5]=int3 & 0xFF; + counter[6]=int4 >> 8; + counter[7]=int4 & 0xFF; + + if(can1.write(CANMessage(ID, counter, 8))) { + + printf("Message sent: %x%x\r\n", counter[1],counter[0]); + printf("Should be: %d, %d, %d, %d\r\n", int1,int2,int3,int4); +} +} + + + + + + +void Can_main(bool send,long int val1,long int val2,long int val3,long int val4, int the_ID) { + + + + std::map <int,string> CanIDMap; + + //CanIDMap[0]="Motor Controller String"; + CanIDMap[1]="Motor Controller Ints"; + //CanIDMap[2]="Power Controller Voltage_Battery"; + CanIDMap[3]="Power Controller Voltage_5V"; + //CanIDMap[4]="Power Controller Voltage_12V"; + CanIDMap[5]="Power Controller Voltage_Motor"; + CanIDMap[6]="Power Controller Current_Battery"; + CanIDMap[7]="Power Controller Current_5V"; + CanIDMap[8]="Power Controller Current_12V"; + CanIDMap[9]="Power Controller Current_Motor"; + CanIDMap[10]="LCD Controller String"; + CanIDMap[11]="LCD Controller Ints"; + CanIDMap[12]="Zac is the Best"; + + + + //ticker.attach(&sending_values,1); + CANMessage msg; + int fixer1=0; + int fixer2=0; + int fixer3=0; + int fixer4=0; + while(1) { + if (send==true){ + sending_values(val1,val2,val3,val4,the_ID); + } + if(can2.read(msg)) { + bool tester= CanIDMap.find(msg.id) != CanIDMap.end(); + if (tester){ + printf("Message received: %x %x \r\n", msg.data[0], msg.data[1]); + + //printf("ID of message: %s \r\n", CanIDMap[msg.id]); + + std::string str=CanIDMap[msg.id]; + unsigned pos = str.find("_"); // position of "_" in str + std::string str3 = str.substr (pos+1); // get from past"_" to the end + // printf("Dealing with: %s \r\n",str3); + fixer1=((msg.data[0]<<8) | (msg.data[1])); + fixer2=((msg.data[2]<<8) | (msg.data[3])); + fixer3=((msg.data[4]<<8) | (msg.data[5])); + fixer4=((msg.data[6]<<8) | (msg.data[7])); + led2 = !led2; + + printf("Resulting Answer back is: %d, %d, %d, %d\r\n\r\n\r\n",fixer1,fixer2,fixer3,fixer4 ); + break; + } + + else{ + + printf("Can Message, not related to this controller\r\n\r\n"); + + } + + wait(0.2); + } + + +} + + +} + + + + void updateArray (void) { - vBat = ads.readADC_SingleEnded(0); // read channel 0 + + printf("reading Vbat: %d\r\n", vBat); // print reading + printf("reading Battery Current: %2.8f\r\n", ibat); // print reading + printf("reading Five Volt Current: %2.8f\r\n", ifive); // print reading + Can_main(true,15,84,1254,3254,1); + // printf("reading: %d\r\n", vMot); // print reading + /* + + vBat = ads.readADC_SingleEnded(0); // read channel 0 PROTO vTwelve = ads.readADC_SingleEnded(1); // read channel 0 vFive = ads.readADC_SingleEnded(2); // read channel 0 vMot = ads.readADC_SingleEnded(3); // read channel 0 - for(int i =179; i >0; i--) { - iBatArr[i] =iBatArr[i-1]; - } - iBatArr[0]= iBat.read_u16(); - - for(int i =179; i >0; i--) { - vBatArr[i] =vBatArr[i-1]; - } - vBatArr[0]= vBat; - - for(int i =179; i >0; i--) { - iTwelveArr[i] =iTwelveArr[i-1]; - } - iTwelveArr[0]= iTwelve.read_u16(); - - for(int i =179; i >0; i--) { - vTwelveArr[i] =vTwelveArr[i-1]; - } - vTwelveArr[0]= vTwelve; - - for(int i =179; i >0; i--) { - iFiveArr[i] =iFiveArr[i-1]; - } - iFiveArr[0]= iFive.read_u16(); - - for(int i =179; i >0; i--) { - vFiveArr[i] =vFiveArr[i-1]; - } - vFiveArr[0]= vFive; - - for(int i =179; i >0; i--) { - iMotArr[i] =iMotArr[i-1]; - } - iMotArr[0]= iMot.read_u16(); - - for(int i =179; i >0; i--) { - vMotArr[i] =vMotArr[i-1]; - } - vMotArr[0]= vMot; - - for(int i =179; i >0; i--) { - iCpuArr[i] =iCpuArr[i-1]; - } - iCpuArr[0]= iCpu.read_u16(); - - for(int i =179; i >0; i--) { - iPeriArr[i] =iPeriArr[i-1]; - } - iPeriArr[0]= iPeri.read_u16(); - led0= !led0; + + */ } void setup(void) { - graph.attach(&updateArray, 10); //update array every 10 seconds - cantbus.frequency(500000); - CANMessage can_MsgRx; + graph.attach(&updateArray, 10); //update array every 10 seconds + // cantbus.frequency(500000); + // CANMessage can_MsgRx; //initialize relays relSens= 0; @@ -139,9 +206,9 @@ { setup(); - graph.attach(updateArray, 1); //update array every 10 seconds - cantbus.frequency(500000); - CANMessage can_MsgRx; + graph.attach(updateArray, 2); //update array every 10 seconds + //cantbus.frequency(500000); + // CANMessage can_MsgRx; //initialize relays relSens= 0; @@ -150,14 +217,14 @@ relCpuRst =0; relUsr=0; while (1) { +vBat = ads.readADC_SingleEnded(0); // read channel 0 +ibat = (iBat.read())*3.3; +ifive = (iFive.read())*3.3; - pc.printf("reading: %d\r\n", vBat); // print reading - pc.printf("reading: %d\r\n", vTwelve); // print reading - pc.printf("reading: %d\r\n", vFive); // print reading - pc.printf("reading: %d\r\n", vMot); // print reading - wait(2); +led0=!led0; + } } @@ -173,3 +240,10 @@ + + + + + + +