IGGE Power board
Dependencies: mbed ADS1015 USBDevice MCP4725
main.cpp
- Committer:
- jamesdem1123
- Date:
- 2014-05-08
- Revision:
- 7:cdd74b6e2595
- Parent:
- 6:7691e36d2337
File content as of revision 7:cdd74b6e2595:
#include "mbed.h" #include "Adafruit_ADS1015.h" //#include "USBSerial.h" #include <iostream> #include <map> #include <string> #include <stdio.h> #define SERIALOUT //#define SERIAL_BAUD_RATE 9600 //library function setup I2C i2c(p28, p27); Adafruit_ADS1015 ads(&i2c); //USBSerial pc; // USB CDC serial port 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; bool fromUsr[5] = {false,false,false,false,false}; //cpupwr, cpu rst, sensor, net, usrint //leds DigitalOut led0(LED1); DigitalOut led1(LED2); DigitalOut led2(LED3); DigitalOut led3(LED4); //current readings AnalogIn iBat(p15); //75a PROTO AnalogIn iTwelve(p17); //31a AnalogIn iFive(p18);//31a PROTO AnalogIn iMot(p16);//75a AnalogIn iCpu(p20);//31a AnalogIn iPeri(p19);//31a //voltage scalers #define batScal 12.2 #define motScal 12.2 #define twelveScal 12.2 #define fiveScal 12.2 //Relays DigitalOut relSens(p21); // PROTO DigitalOut relUsr(p24); DigitalOut relNet(p23); DigitalOut relCpuRst(p22); DigitalOut relCpuPower(p25); //30 minute graph arrays uint16_t powerArr [10]; //{iBat,vBat,iTwelve, vTwelve, iFive, vFive, iMot, vMot, iCpu, iPeri} uint16_t ibat,vbat,itwelve, vtwelve, ifive, vfive, imot, vmot, icpu, iperi= 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(); led1=1; 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; led2=1; if(can2.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);"); led1=0; } else printf("CAN ERROR"); } void Can_main(long int val1,long int val2,long int val3,long int val4, int the_ID) { std::map <int,string> CanIDMap; CanIDMap[0]=" "; CanIDMap[1]="Message id 1: Batt Cur, Batt Volt, Twelve Cur, Twelve Volt"; CanIDMap[2]="Message id 2: Five Cur, Five Volt, Mot Cur, Mot Volt,"; CanIDMap[3]="Message id 3: Cpu Cur, Perifferal Cur, null, null...."; CanIDMap[4]="Message id 4: Network switch, usrint switch, sensor on switch, null"; CanIDMap[5]="Message id 5: cpupwr switch, cpu rst switch,null,null."; CanIDMap[6]=" "; CanIDMap[7]=" "; CanIDMap[8]=" "; CanIDMap[9]=" "; CanIDMap[10]=" "; CanIDMap[11]=" "; CanIDMap[12]="Zac is the Worst"; CanIDMap[13]="Auto"; CanIDMap[14]="Manual"; //ticker.attach(&sending_values,1); CANMessage msg; int fixer1=0; int fixer2=0; int fixer3=0; int fixer4=0; 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])); if(msg.id==4) { // "Message id 4: Network switch, usrint switch, sensor on switch, null"; fromUsr[3]=fixer1; //fromUsr=cpupwr, cpu rst, sensor, net, usrint fromUsr[4]= fixer2; fromUsr[2]=fixer3; } else if(msg.id==5) { // "Message id 5: cpupwr switch, cpu rst switch,"; fromUsr[0]=fixer1; //fromUsr=cpupwr, cpu rst, sensor, net, usrint fromUsr[1]= fixer2; } else{ led3=!led3; } led2 = !led2; // printf("Resulting Answer back is: %d, %d, %d, %d\r\n\r\n\r\n",fixer1,fixer2,fixer3,fixer4 ); } else { // printf("Can Message, not related to this controller\r\n\r\n"); } //wait(0.2); } } void sendArray (void) { #ifdef SERIALOUT printf("___________________________\r\n"); printf("Sending messages....\r\n"); printf("Message id 1: Batt Cur = %d, Batt Volt = %d, Twelve Cur = %d, Twelve Volt = %d....",powerArr[0],powerArr[1],powerArr[2],powerArr[3]); sending_values(powerArr[0],powerArr[1],powerArr[2],powerArr[3],1); printf("....sent\r\n"); printf("Message id 2: Five Cur = %d, Five Volt = %d, Mot Cur = %d, Mot Volt = %d....",powerArr[4],powerArr[5],powerArr[6],powerArr[7]); sending_values(powerArr[4],powerArr[5],powerArr[6],powerArr[7],2); printf("....sent\r\n"); printf("Message id 3: Cpu Cur = %d, Perifferal Cur = %d, null, null....",powerArr[8],powerArr[9]); sending_values(powerArr[8],powerArr[9],0,0,3); printf("....sent\r\n"); printf("CANBUS TRANMISSION COMPLETE\r\n"); printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n"); //relNet=!relNet; // relSens= !relSens; //relCpuPower=!relCpuPower; //relCpuRst =!relCpuRst; // relUsr=!relUsr; float neW =(powerArr[1]*.003); printf("actual vbat= %2.4f volt\r\n", neW); #endif #ifndef SERIALOUT sending_values(powerArr[0],powerArr[1],powerArr[2],powerArr[3],1); sending_values(powerArr[4],powerArr[5],powerArr[6],powerArr[7],2); sending_values(powerArr[8],powerArr[9],0,0,3); // relNet=!relNet; //relSens= !relSens; //relCpuPower=!relCpuPower; //relCpuRst =!relCpuRst; // relUsr=!relUsr; #endif } void setup(void) { graph.attach(&sendArray, (1)); //update array every 10 seconds can2.frequency(500000); //initialize relays relSens= 0; relNet =0; relCpuPower=0; relCpuRst =0; relUsr=0; wait(3); sending_values(1,1,1,1,4); wait(.01); sending_values(0,0,0,0,4); } int main() { setup(); while (1) { Can_main(0,0,0,0,0); powerArr[0]=ibat = (iBat.read_u16()); powerArr[1]=vBat = ads.readADC_SingleEnded(0); // read channel 0 PROTO powerArr[2]=itwelve = (iTwelve.read_u16()); powerArr[3]=vtwelve = ads.readADC_SingleEnded(1); // read channel 1 powerArr[4]=ifive = (iFive.read_u16()); powerArr[5]=vfive = ads.readADC_SingleEnded(2); // read channel 0 powerArr[6]=imot = (iMot.read_u16()); powerArr[7]=vmot = ads.readADC_SingleEnded(3); // read channel 0 powerArr[8]=icpu = (iCpu.read_u16()); powerArr[9]=iperi = (iPeri.read_u16()); //powerArr[] = {ibat,vbat,itwelve, vtwelve, ifive, vfive, imot, vmot, icpu, iperi}; relCpuPower=fromUsr[0]; relCpuRst =fromUsr[1]; relSens= fromUsr[2]; relNet =fromUsr[3]; relUsr=fromUsr[4]; //cpupwr, cpu rst, sensor, net, usrint led0=!led0; } }