IGGE Power board

Dependencies:   mbed ADS1015 USBDevice MCP4725

main.cpp

Committer:
jamesdem1123
Date:
2014-04-07
Revision:
4:d29a7b77b1c6
Parent:
3:a01ea06ca9ab
Child:
5:6b90ed7f3eb1

File content as of revision 4:d29a7b77b1c6:


#include "mbed.h"
#include "Adafruit_ADS1015.h"
//#include "USBSerial.h"

#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
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);
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(p22);
DigitalOut relNet(p23);
DigitalOut relCpuRst(p24);
DigitalOut relCpuPower(p25);


//30 minute graph arrays
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)
{
            
            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


    
    */

}

void setup(void)
{
   graph.attach(&updateArray, 10); //update array every 10 seconds
  //  cantbus.frequency(500000);
   // CANMessage can_MsgRx;
    
    //initialize relays
    relSens= 0;
    relNet =0;
    relCpuPower=0;
    relCpuRst =0;
    relUsr=0;

}



int main()
{
    setup();
    
       graph.attach(updateArray, 2); //update array every 10 seconds
    //cantbus.frequency(500000);
 //   CANMessage can_MsgRx;
    
    //initialize relays
    relSens= 0;
    relNet =0;
    relCpuPower=0;
    relCpuRst =0;
    relUsr=0;
    while (1) {
vBat = ads.readADC_SingleEnded(0); // read channel 0
ibat = (iBat.read())*3.3;
ifive = (iFive.read())*3.3;



led0=!led0;

    }
}