attempt to fix posible power issues with the sharp

Dependencies:   ADS1115 BME280 CronoDot SDFileSystem mbed

Fork of Outdoor_UPAS_v1_2_Tboard by scott kelleher

main.cpp

Committer:
jelord
Date:
2016-02-03
Revision:
2:88fcbfadec6a
Parent:
1:9fbb5b665068
Child:
3:122bfc998c4c

File content as of revision 2:88fcbfadec6a:

#include "mbed.h"
#include "SDFileSystem.h"
#include "Adafruit_ADS1015.h"
#include "MCP40D17.h"
#include "STC3100.h"
#include "LSM303.h"
#include "BME280.h"
#include "SI1145.h"
#include "NCP5623BMUTBG.h"
#include "CronoDot.h"
#include "EEPROM.h"
#include "Calibration.h" 
Serial pc(USBTX, USBRX);
Serial microChannel(D8, D2); // tx, rx
Timer t;
struct tm tt;

I2C                 i2c(D14, D15);
Adafruit_ADS1115    ads(&i2c);
MCP40D17            DigPot(&i2c);
BME280              bmesensor(D14, D15);
STC3100             gasG(D14, D15);
DigitalOut          blower(D9, 0);
DigitalOut          pbKill(D7, 1);
LSM303              movementsensor(D14, D15);
SI1145              lightsensor(D14, D15);
NCP5623BMUTBG       RGB_LED(D14, D15);
//CronoDot            RTC(D14, D15);
EEPROM              E2PROM(D14, D15);
//DigitalOut          GPS_EN(p4,0);       //pin 4 is used to enable and disable the GPS, in order to recive serial communications
Calibration         calibrations(1);     //Default serial/calibration if there are no values for the selected option

void sendData(); 

int timeout = 2;

void pc_recv(void){
    while(pc.readable()){
        pc.getc();
    }
}

static uint8_t rx_buf[20];
static uint8_t rx_len=0;
static int haltBLE = 1;
static int transmissionValue = 0;
uint8_t writeData[20] = {0,};
static uint8_t dataLength = 0;

void uartMicro(void){

    haltBLE = 2;
    //if(transmissionValue==4)pc.printf("DEBUG");
    while(microChannel.readable()){
        rx_buf[rx_len++] = microChannel.getc();
        
        //Code block to verify what is being transmitted.  To function correctly, all data must terminate with \0 or \n
        if(transmissionValue==0){
            
            if     (rx_buf[0] == 0x01)transmissionValue = 1;      //rtc
            else if(rx_buf[0] == 0x02)transmissionValue = 2; //sample start and end times
            else if(rx_buf[0] == 0x03)transmissionValue = 3; //sample name
            else if(rx_buf[0] == 0x04)transmissionValue = 4; //Run Check

            else if(rx_buf[0] == 0x05)transmissionValue = 5; //log interval
            else if(rx_buf[0] == 0x06)transmissionValue = 6; //Flow Rate
            else if(rx_buf[0] == 0x07)transmissionValue = 7; //Serial Number
            else                      transmissionValue = 100; //Not useful data
        }
        
        if(rx_buf[rx_len-1]=='\0' || rx_buf[rx_len-1]=='\n' || rx_buf[rx_len-1] == 0xff){
            if((transmissionValue == 1 || transmissionValue == 2 || transmissionValue == 3 || transmissionValue == 4 || transmissionValue == 5 ||
                transmissionValue == 6 || transmissionValue == 7) &&  rx_buf[rx_len-1] != 0xff)
            {}else{
                if(transmissionValue == 4)sendData();
                haltBLE = 1;
                transmissionValue = 0;
                dataLength = 0;
            }
        }
    }
    if(haltBLE!=1){
        
        if((transmissionValue!=100) && (dataLength!= 0)) writeData[dataLength-1] = rx_buf[0];
        
        if(transmissionValue ==100){
            pc.putc(rx_buf[0]); 
        
        }else if(transmissionValue ==1){ //process and store RTC values
            
           // if(dataLength==6)RTC.set_time(writeData[0],writeData[1],writeData[2],writeData[3],writeData[3],writeData[4],writeData[5]);

        }else if(transmissionValue ==2){ //process and store sample start/end 
            if(dataLength ==12)E2PROM.write(0x00015, writeData, 12);
            
        }else if(transmissionValue ==3){ //process and store sample name
            if(dataLength ==8)E2PROM.write(0x00001,writeData,8);  
        }else if(transmissionValue ==4){ //process and store Run Check
            //if(dataLength==1)E2PROM.write(0x00033,writeData,1);
            
            
            
        }else if(transmissionValue ==5){ //process and store Log Interval
             if(dataLength ==1)E2PROM.write(0x00014,writeData,1);
        
        }else if(transmissionValue ==6){ //process and store Flow Rate
            if(dataLength ==4)E2PROM.write(0x00010,writeData,4);
            
        }else if(transmissionValue ==7){ //process and store Serial Number
            if(dataLength ==2)E2PROM.write(0x00034,writeData,2);
        }
        dataLength++;        
    }
    //
    rx_len = 0;  
    
}
void sendData(){
    
    uint8_t sampleTimePassValues[13] = {0x01,};
    uint8_t subjectLabelOriginal[9] = {0x02,};
    uint8_t dataLogOriginal[2] = {0x03,};
    uint8_t flowRateOriginal[5] = {0x04,};
    //uint8_t presetRunModeCheck[1] = {0,}; Commented and currently unused to prevent mem issues
    E2PROM.read(0x00015, sampleTimePassValues+1, 12);
    E2PROM.read(0x00001, subjectLabelOriginal+1,8);
    E2PROM.read(0x00014,dataLogOriginal+1,1);
    E2PROM.read(0x00010,flowRateOriginal+1,4);
    
    for(int i=0; i<13; i++){
         microChannel.putc(sampleTimePassValues[i]);        
    }  
    wait(.25);
        
    for(int i=0; i<9; i++){
        microChannel.putc(subjectLabelOriginal[i]);        
    }  
    wait(.25);
    
    for(int i=0; i<2; i++){
        microChannel.putc(dataLogOriginal[i]);        
    }  
    wait(.25);
    
    for(int i=0; i<5; i++){
        microChannel.putc(flowRateOriginal[i]);        
    } 
    //pc.printf("End of data");

    
} 
 
int main(){
    
    pc.baud(115200);  // set what you want here depending on your terminal program speed
    pc.printf("\f\n\r-------------Startup-------------\n\r");
    wait(0.5);
    timeout=2;

    pc.attach(pc_recv);
    microChannel.attach(uartMicro,microChannel.RxIrq);
    microChannel.baud(115200);   // change this to the new ESP8266 baudrate if it is changed at any time.

    //uint8_t tempBuf[20] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,0x11,0x12,0x13};
    microChannel.printf("$$$");
    wait(1);
    microChannel.printf("SN, JakeMicroX\r");
    wait(1);
    microChannel.printf("A\r");
    wait(1);
    microChannel.printf("---\r");
    wait(2);
    

        
    
    RGB_LED.set_led(1,1,1);
    while(1) {
        for(int i=0;i<10000000;i++);
    }
}