IGGE Power board

Dependencies:   mbed ADS1015 USBDevice MCP4725

Committer:
jamesdem1123
Date:
Mon Apr 07 04:32:52 2014 +0000
Revision:
4:d29a7b77b1c6
Parent:
3:a01ea06ca9ab
Child:
5:6b90ed7f3eb1
working 1230

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jamesdem1123 1:dd6f8dc1e54e 1
jamesdem1123 0:54d5ccfcb14c 2 #include "mbed.h"
jamesdem1123 1:dd6f8dc1e54e 3 #include "Adafruit_ADS1015.h"
jamesdem1123 4:d29a7b77b1c6 4 //#include "USBSerial.h"
jamesdem1123 1:dd6f8dc1e54e 5
jamesdem1123 4:d29a7b77b1c6 6 #include <iostream>
jamesdem1123 4:d29a7b77b1c6 7 #include <map>
jamesdem1123 4:d29a7b77b1c6 8 #include <string>
jamesdem1123 4:d29a7b77b1c6 9 #include <stdio.h>
jamesdem1123 4:d29a7b77b1c6 10
jamesdem1123 4:d29a7b77b1c6 11 //#define SERIAL_BAUD_RATE 9600
jamesdem1123 1:dd6f8dc1e54e 12
jamesdem1123 1:dd6f8dc1e54e 13 //library function setup
jamesdem1123 1:dd6f8dc1e54e 14 I2C i2c(p28, p27);
jamesdem1123 1:dd6f8dc1e54e 15 Adafruit_ADS1015 ads(&i2c);
jamesdem1123 4:d29a7b77b1c6 16 //USBSerial pc; // USB CDC serial port
jamesdem1123 1:dd6f8dc1e54e 17 CAN cantbus(p30, p29);
jamesdem1123 2:321c8783ea30 18 Ticker graph;
jamesdem1123 1:dd6f8dc1e54e 19
jamesdem1123 4:d29a7b77b1c6 20
jamesdem1123 4:d29a7b77b1c6 21 //can stuff
jamesdem1123 4:d29a7b77b1c6 22 Ticker ticker;
jamesdem1123 4:d29a7b77b1c6 23 CAN can1(p9, p10);
jamesdem1123 4:d29a7b77b1c6 24 CAN can2(p30, p29);
jamesdem1123 4:d29a7b77b1c6 25 char counter[8] = {1,1,1,1,1,1,1,1};
jamesdem1123 4:d29a7b77b1c6 26 int test=0x0;
jamesdem1123 4:d29a7b77b1c6 27 char counter2=0;
jamesdem1123 4:d29a7b77b1c6 28
jamesdem1123 4:d29a7b77b1c6 29
jamesdem1123 4:d29a7b77b1c6 30
jamesdem1123 1:dd6f8dc1e54e 31 //leds
jamesdem1123 1:dd6f8dc1e54e 32 DigitalOut led0(LED1);
jamesdem1123 1:dd6f8dc1e54e 33 DigitalOut led1(LED2);
jamesdem1123 1:dd6f8dc1e54e 34 DigitalOut led2(LED3);
jamesdem1123 1:dd6f8dc1e54e 35 DigitalOut led3(LED4);
jamesdem1123 0:54d5ccfcb14c 36
jamesdem1123 1:dd6f8dc1e54e 37 //current readings
jamesdem1123 4:d29a7b77b1c6 38 AnalogIn iBat(p15); //75a PROTO
jamesdem1123 1:dd6f8dc1e54e 39 AnalogIn iTwelve(p17); //31a
jamesdem1123 4:d29a7b77b1c6 40 AnalogIn iFive(p18);//31a PROTO
jamesdem1123 1:dd6f8dc1e54e 41 AnalogIn iMot(p16);//75a
jamesdem1123 1:dd6f8dc1e54e 42 AnalogIn iCpu(p20);//31a
jamesdem1123 1:dd6f8dc1e54e 43 AnalogIn iPeri(p19);//31a
jamesdem1123 1:dd6f8dc1e54e 44
jamesdem1123 1:dd6f8dc1e54e 45 //voltage scalers
jamesdem1123 1:dd6f8dc1e54e 46 #define batScal 12.2
jamesdem1123 1:dd6f8dc1e54e 47 #define motScal 12.2
jamesdem1123 1:dd6f8dc1e54e 48 #define twelveScal 12.2
jamesdem1123 1:dd6f8dc1e54e 49 #define fiveScal 12.2
jamesdem1123 1:dd6f8dc1e54e 50
jamesdem1123 1:dd6f8dc1e54e 51 //Relays
jamesdem1123 4:d29a7b77b1c6 52 DigitalOut relSens(p21); // PROTO
jamesdem1123 1:dd6f8dc1e54e 53 DigitalOut relUsr(p22);
jamesdem1123 1:dd6f8dc1e54e 54 DigitalOut relNet(p23);
jamesdem1123 3:a01ea06ca9ab 55 DigitalOut relCpuRst(p24);
jamesdem1123 1:dd6f8dc1e54e 56 DigitalOut relCpuPower(p25);
jamesdem1123 1:dd6f8dc1e54e 57
jamesdem1123 0:54d5ccfcb14c 58
jamesdem1123 1:dd6f8dc1e54e 59 //30 minute graph arrays
jamesdem1123 4:d29a7b77b1c6 60 uint16_t powerArr [10]; //{iBat,vBat,iTwelve, vTwelve, iFive, vFive, iMot, vMot, iCpu, iPeri}
jamesdem1123 4:d29a7b77b1c6 61
jamesdem1123 4:d29a7b77b1c6 62
jamesdem1123 4:d29a7b77b1c6 63 float ibat =0;
jamesdem1123 4:d29a7b77b1c6 64 float ifive = 0;
jamesdem1123 1:dd6f8dc1e54e 65
jamesdem1123 1:dd6f8dc1e54e 66
jamesdem1123 1:dd6f8dc1e54e 67 //volt
jamesdem1123 1:dd6f8dc1e54e 68 uint16_t vBat, vTwelve,vFive,vMot ;
jamesdem1123 1:dd6f8dc1e54e 69
jamesdem1123 2:321c8783ea30 70
jamesdem1123 4:d29a7b77b1c6 71
jamesdem1123 4:d29a7b77b1c6 72 void sending_values(long int int1,long int int2,long int int3,long int int4, int ID )
jamesdem1123 4:d29a7b77b1c6 73 {
jamesdem1123 4:d29a7b77b1c6 74 //val();
jamesdem1123 4:d29a7b77b1c6 75 counter[0]=int1 >> 8;
jamesdem1123 4:d29a7b77b1c6 76 counter[1]=int1 & 0xFF;
jamesdem1123 4:d29a7b77b1c6 77 counter[2]=int2 >> 8;
jamesdem1123 4:d29a7b77b1c6 78 counter[3]=int2 & 0xFF;
jamesdem1123 4:d29a7b77b1c6 79 counter[4]=int3 >> 8;
jamesdem1123 4:d29a7b77b1c6 80 counter[5]=int3 & 0xFF;
jamesdem1123 4:d29a7b77b1c6 81 counter[6]=int4 >> 8;
jamesdem1123 4:d29a7b77b1c6 82 counter[7]=int4 & 0xFF;
jamesdem1123 4:d29a7b77b1c6 83
jamesdem1123 4:d29a7b77b1c6 84 if(can1.write(CANMessage(ID, counter, 8))) {
jamesdem1123 4:d29a7b77b1c6 85
jamesdem1123 4:d29a7b77b1c6 86 printf("Message sent: %x%x\r\n", counter[1],counter[0]);
jamesdem1123 4:d29a7b77b1c6 87 printf("Should be: %d, %d, %d, %d\r\n", int1,int2,int3,int4);
jamesdem1123 4:d29a7b77b1c6 88 }
jamesdem1123 4:d29a7b77b1c6 89 }
jamesdem1123 4:d29a7b77b1c6 90
jamesdem1123 4:d29a7b77b1c6 91
jamesdem1123 4:d29a7b77b1c6 92
jamesdem1123 4:d29a7b77b1c6 93
jamesdem1123 4:d29a7b77b1c6 94
jamesdem1123 4:d29a7b77b1c6 95
jamesdem1123 4:d29a7b77b1c6 96 void Can_main(bool send,long int val1,long int val2,long int val3,long int val4, int the_ID) {
jamesdem1123 4:d29a7b77b1c6 97
jamesdem1123 4:d29a7b77b1c6 98
jamesdem1123 4:d29a7b77b1c6 99
jamesdem1123 4:d29a7b77b1c6 100 std::map <int,string> CanIDMap;
jamesdem1123 4:d29a7b77b1c6 101
jamesdem1123 4:d29a7b77b1c6 102 //CanIDMap[0]="Motor Controller String";
jamesdem1123 4:d29a7b77b1c6 103 CanIDMap[1]="Motor Controller Ints";
jamesdem1123 4:d29a7b77b1c6 104 //CanIDMap[2]="Power Controller Voltage_Battery";
jamesdem1123 4:d29a7b77b1c6 105 CanIDMap[3]="Power Controller Voltage_5V";
jamesdem1123 4:d29a7b77b1c6 106 //CanIDMap[4]="Power Controller Voltage_12V";
jamesdem1123 4:d29a7b77b1c6 107 CanIDMap[5]="Power Controller Voltage_Motor";
jamesdem1123 4:d29a7b77b1c6 108 CanIDMap[6]="Power Controller Current_Battery";
jamesdem1123 4:d29a7b77b1c6 109 CanIDMap[7]="Power Controller Current_5V";
jamesdem1123 4:d29a7b77b1c6 110 CanIDMap[8]="Power Controller Current_12V";
jamesdem1123 4:d29a7b77b1c6 111 CanIDMap[9]="Power Controller Current_Motor";
jamesdem1123 4:d29a7b77b1c6 112 CanIDMap[10]="LCD Controller String";
jamesdem1123 4:d29a7b77b1c6 113 CanIDMap[11]="LCD Controller Ints";
jamesdem1123 4:d29a7b77b1c6 114 CanIDMap[12]="Zac is the Best";
jamesdem1123 4:d29a7b77b1c6 115
jamesdem1123 4:d29a7b77b1c6 116
jamesdem1123 4:d29a7b77b1c6 117
jamesdem1123 4:d29a7b77b1c6 118 //ticker.attach(&sending_values,1);
jamesdem1123 4:d29a7b77b1c6 119 CANMessage msg;
jamesdem1123 4:d29a7b77b1c6 120 int fixer1=0;
jamesdem1123 4:d29a7b77b1c6 121 int fixer2=0;
jamesdem1123 4:d29a7b77b1c6 122 int fixer3=0;
jamesdem1123 4:d29a7b77b1c6 123 int fixer4=0;
jamesdem1123 4:d29a7b77b1c6 124 while(1) {
jamesdem1123 4:d29a7b77b1c6 125 if (send==true){
jamesdem1123 4:d29a7b77b1c6 126 sending_values(val1,val2,val3,val4,the_ID);
jamesdem1123 4:d29a7b77b1c6 127 }
jamesdem1123 4:d29a7b77b1c6 128 if(can2.read(msg)) {
jamesdem1123 4:d29a7b77b1c6 129 bool tester= CanIDMap.find(msg.id) != CanIDMap.end();
jamesdem1123 4:d29a7b77b1c6 130 if (tester){
jamesdem1123 4:d29a7b77b1c6 131 printf("Message received: %x %x \r\n", msg.data[0], msg.data[1]);
jamesdem1123 4:d29a7b77b1c6 132
jamesdem1123 4:d29a7b77b1c6 133 //printf("ID of message: %s \r\n", CanIDMap[msg.id]);
jamesdem1123 4:d29a7b77b1c6 134
jamesdem1123 4:d29a7b77b1c6 135 std::string str=CanIDMap[msg.id];
jamesdem1123 4:d29a7b77b1c6 136 unsigned pos = str.find("_"); // position of "_" in str
jamesdem1123 4:d29a7b77b1c6 137 std::string str3 = str.substr (pos+1); // get from past"_" to the end
jamesdem1123 4:d29a7b77b1c6 138 // printf("Dealing with: %s \r\n",str3);
jamesdem1123 4:d29a7b77b1c6 139 fixer1=((msg.data[0]<<8) | (msg.data[1]));
jamesdem1123 4:d29a7b77b1c6 140 fixer2=((msg.data[2]<<8) | (msg.data[3]));
jamesdem1123 4:d29a7b77b1c6 141 fixer3=((msg.data[4]<<8) | (msg.data[5]));
jamesdem1123 4:d29a7b77b1c6 142 fixer4=((msg.data[6]<<8) | (msg.data[7]));
jamesdem1123 4:d29a7b77b1c6 143 led2 = !led2;
jamesdem1123 4:d29a7b77b1c6 144
jamesdem1123 4:d29a7b77b1c6 145 printf("Resulting Answer back is: %d, %d, %d, %d\r\n\r\n\r\n",fixer1,fixer2,fixer3,fixer4 );
jamesdem1123 4:d29a7b77b1c6 146 break;
jamesdem1123 4:d29a7b77b1c6 147 }
jamesdem1123 4:d29a7b77b1c6 148
jamesdem1123 4:d29a7b77b1c6 149 else{
jamesdem1123 4:d29a7b77b1c6 150
jamesdem1123 4:d29a7b77b1c6 151 printf("Can Message, not related to this controller\r\n\r\n");
jamesdem1123 4:d29a7b77b1c6 152
jamesdem1123 4:d29a7b77b1c6 153 }
jamesdem1123 4:d29a7b77b1c6 154
jamesdem1123 4:d29a7b77b1c6 155 wait(0.2);
jamesdem1123 4:d29a7b77b1c6 156 }
jamesdem1123 4:d29a7b77b1c6 157
jamesdem1123 4:d29a7b77b1c6 158
jamesdem1123 4:d29a7b77b1c6 159 }
jamesdem1123 4:d29a7b77b1c6 160
jamesdem1123 4:d29a7b77b1c6 161
jamesdem1123 4:d29a7b77b1c6 162 }
jamesdem1123 4:d29a7b77b1c6 163
jamesdem1123 4:d29a7b77b1c6 164
jamesdem1123 4:d29a7b77b1c6 165
jamesdem1123 4:d29a7b77b1c6 166
jamesdem1123 2:321c8783ea30 167 void updateArray (void)
jamesdem1123 2:321c8783ea30 168 {
jamesdem1123 4:d29a7b77b1c6 169
jamesdem1123 4:d29a7b77b1c6 170 printf("reading Vbat: %d\r\n", vBat); // print reading
jamesdem1123 4:d29a7b77b1c6 171 printf("reading Battery Current: %2.8f\r\n", ibat); // print reading
jamesdem1123 4:d29a7b77b1c6 172 printf("reading Five Volt Current: %2.8f\r\n", ifive); // print reading
jamesdem1123 4:d29a7b77b1c6 173 Can_main(true,15,84,1254,3254,1);
jamesdem1123 4:d29a7b77b1c6 174 // printf("reading: %d\r\n", vMot); // print reading
jamesdem1123 4:d29a7b77b1c6 175 /*
jamesdem1123 4:d29a7b77b1c6 176
jamesdem1123 4:d29a7b77b1c6 177 vBat = ads.readADC_SingleEnded(0); // read channel 0 PROTO
jamesdem1123 2:321c8783ea30 178 vTwelve = ads.readADC_SingleEnded(1); // read channel 0
jamesdem1123 2:321c8783ea30 179 vFive = ads.readADC_SingleEnded(2); // read channel 0
jamesdem1123 2:321c8783ea30 180 vMot = ads.readADC_SingleEnded(3); // read channel 0
jamesdem1123 2:321c8783ea30 181
jamesdem1123 2:321c8783ea30 182
jamesdem1123 4:d29a7b77b1c6 183
jamesdem1123 4:d29a7b77b1c6 184 */
jamesdem1123 2:321c8783ea30 185
jamesdem1123 2:321c8783ea30 186 }
jamesdem1123 2:321c8783ea30 187
jamesdem1123 1:dd6f8dc1e54e 188 void setup(void)
jamesdem1123 1:dd6f8dc1e54e 189 {
jamesdem1123 4:d29a7b77b1c6 190 graph.attach(&updateArray, 10); //update array every 10 seconds
jamesdem1123 4:d29a7b77b1c6 191 // cantbus.frequency(500000);
jamesdem1123 4:d29a7b77b1c6 192 // CANMessage can_MsgRx;
jamesdem1123 3:a01ea06ca9ab 193
jamesdem1123 1:dd6f8dc1e54e 194 //initialize relays
jamesdem1123 1:dd6f8dc1e54e 195 relSens= 0;
jamesdem1123 1:dd6f8dc1e54e 196 relNet =0;
jamesdem1123 1:dd6f8dc1e54e 197 relCpuPower=0;
jamesdem1123 1:dd6f8dc1e54e 198 relCpuRst =0;
jamesdem1123 1:dd6f8dc1e54e 199 relUsr=0;
jamesdem1123 1:dd6f8dc1e54e 200
jamesdem1123 1:dd6f8dc1e54e 201 }
jamesdem1123 1:dd6f8dc1e54e 202
jamesdem1123 1:dd6f8dc1e54e 203
jamesdem1123 2:321c8783ea30 204
jamesdem1123 1:dd6f8dc1e54e 205 int main()
jamesdem1123 1:dd6f8dc1e54e 206 {
jamesdem1123 1:dd6f8dc1e54e 207 setup();
jamesdem1123 3:a01ea06ca9ab 208
jamesdem1123 4:d29a7b77b1c6 209 graph.attach(updateArray, 2); //update array every 10 seconds
jamesdem1123 4:d29a7b77b1c6 210 //cantbus.frequency(500000);
jamesdem1123 4:d29a7b77b1c6 211 // CANMessage can_MsgRx;
jamesdem1123 3:a01ea06ca9ab 212
jamesdem1123 3:a01ea06ca9ab 213 //initialize relays
jamesdem1123 3:a01ea06ca9ab 214 relSens= 0;
jamesdem1123 3:a01ea06ca9ab 215 relNet =0;
jamesdem1123 3:a01ea06ca9ab 216 relCpuPower=0;
jamesdem1123 3:a01ea06ca9ab 217 relCpuRst =0;
jamesdem1123 3:a01ea06ca9ab 218 relUsr=0;
jamesdem1123 1:dd6f8dc1e54e 219 while (1) {
jamesdem1123 4:d29a7b77b1c6 220 vBat = ads.readADC_SingleEnded(0); // read channel 0
jamesdem1123 4:d29a7b77b1c6 221 ibat = (iBat.read())*3.3;
jamesdem1123 4:d29a7b77b1c6 222 ifive = (iFive.read())*3.3;
jamesdem1123 2:321c8783ea30 223
jamesdem1123 1:dd6f8dc1e54e 224
jamesdem1123 1:dd6f8dc1e54e 225
jamesdem1123 4:d29a7b77b1c6 226 led0=!led0;
jamesdem1123 4:d29a7b77b1c6 227
jamesdem1123 0:54d5ccfcb14c 228 }
jamesdem1123 0:54d5ccfcb14c 229 }
jamesdem1123 1:dd6f8dc1e54e 230
jamesdem1123 1:dd6f8dc1e54e 231
jamesdem1123 1:dd6f8dc1e54e 232
jamesdem1123 1:dd6f8dc1e54e 233
jamesdem1123 1:dd6f8dc1e54e 234
jamesdem1123 1:dd6f8dc1e54e 235
jamesdem1123 1:dd6f8dc1e54e 236
jamesdem1123 1:dd6f8dc1e54e 237
jamesdem1123 1:dd6f8dc1e54e 238
jamesdem1123 1:dd6f8dc1e54e 239
jamesdem1123 1:dd6f8dc1e54e 240
jamesdem1123 1:dd6f8dc1e54e 241
jamesdem1123 1:dd6f8dc1e54e 242
jamesdem1123 4:d29a7b77b1c6 243
jamesdem1123 4:d29a7b77b1c6 244
jamesdem1123 4:d29a7b77b1c6 245
jamesdem1123 4:d29a7b77b1c6 246
jamesdem1123 4:d29a7b77b1c6 247
jamesdem1123 4:d29a7b77b1c6 248
jamesdem1123 4:d29a7b77b1c6 249