chad

Dependencies:   MCP23017 WattBob_TextLCD mbed-rtos mbed

main.cpp

Committer:
f_legge
Date:
2017-03-08
Revision:
15:85616bc0e2ae
Parent:
14:ede0e7ed2745
Child:
16:bebcc7d24f3e

File content as of revision 15:85616bc0e2ae:

// Paramater Allocation
// Paramater: 17
// Log Option: 1 (uSD)
// Watchdog Pulse Length: 6ms
// Watchdog Repetion Rate: 0.5
// Error Display: 1 (LCD)
// Execution time display: Task5 (LDC display) 

#include "main.h"



// Pointers to LCD Screen
MCP23017            *par_port;  // pointer to 16-bit parallel I/O chip
WattBob_TextLCD     *lcd;       // pointer to 2*16 character LCD object
FILE                *fp;        // pointer to uSD object

//SDFileSystem sd(p5, p6, p7, p8, "sd");    //uSD pinout

// Digital I/O p11 to p20
DigitalIn Fq(p11);              // Digital frequency in for measurement
DigitalIn DS(p12);              // Digital switch input
DigitalIn DS_s(p13);            // Digital shutdown switch
DigitalOut WD_pulse_out(p14);   // Watchdog Pulse
DigitalOut led1(LED1);
DigitalOut led2(LED2);

// Analogue I/O p15 to p20
AnalogIn A1_(p15);              // Analogue input to be filtered  
AnalogIn A2_(p16);              // Analogue input to be filtered

// Timer objects
//Ticker tick;                  // Clock timer for CycExec
Ticker ticker;
Timer timer;                    // Frequency Timer
Timer T5;                       // Timer for idle states

// Constant Declaration
const int SampFreq = 100;       // Sampling Frequency
const int WD = 6000;            // Watchdog pulse length

// Variable Declaration
int tck = 1;               // Used to define what task is called (CycExec)

int FqIn;                  // Frequency input boolean
int period = 0;                 // Frequency timer variable (Frequency Check)
int freq = 0;                   // Frequency return variable (Frequency Check)

int DSIn;                  // Switch Input boolean
int switch_state = 0;

int WD_pulse = 0;


float A1_in;                // Analogue 1 input variable
float A2_in;                // Analogue 2 input variable    
float A1_val = 0;                 // Analogue 1 return variable (Analogue In)
float A2_val = 0;                 // Analogue 2 return variable (Analogue In)

int DS_sIn = DS_s;              // Shutdown Switch
int error_code = 0;             // Error code variable

int logcount = 0;               // Keep track of log number



////////////////////////////////////////////////////////////////////////////////
//
// Main Program
//

void CycExec()
{
    /*
        if(tck == 2){          // Every Second (needs offset)
         //Task1();
         lcd->locate(0,0);
        }
        else if(tck == 4){     // Every 1/3 sec
         //Task2();
         lcd->printf("Test");
        } 
        else if(tck % 80 == 7){     // Every 2 sec
            Task3();
        }
        else if(tck % 20 == 0){     // Every 1/2 sec
            Task4();
        }
        else if(tck % 80 == 1){     // Every 2 sec 
            Task5();
        }
        else if(tck % 20 == 3){     // Every 0.5 sec
            Task6();
        }
        else if(tck % 20 == 10){    // Every 1/2 sec
            Task7();
        }
        else{
            Task8();
        } */
        
        Task4();
        
        //lcd->locate(0,0);
        //lcd->printf("Tck: %d", tck);
        led2 = !led2;
        
        FqIn = Fq;
        DSIn = DS;
        A1_in = A1_;
        A2_in = A2_;
        DS_sIn = DS_s;
        WD_pulse_out = WD_pulse;    
        
        /*lcd->locate(0,0);
        lcd->printf("S: %d", switch_state);*/
        
        tck++;
        
}


int main()
{ 
    // LCD Init
    par_port = new MCP23017(p9, p10, 0x40); // initialise 16-bit I/O chip
    par_port->config(0x0F00, 0x0F00, 0x0F00);
    
    lcd = new WattBob_TextLCD(par_port);    // initialise 2*26 char display
    par_port->write_bit(1,BL_BIT);          // turn LCD backlight ON
    
    lcd->cls(); // clear display 
    
    
    
    // .csv log Init
    //mkdir("/sd/logs", 0777);
    //fp = fopen ("/sd/logs/log.txt", "w");       // Pointer to log file on uSD
    //fprintf(fp, "Log of Frazer Legge's Embedded Software Assignment 2\n\n"); 
    
    //tick.start(CycExec);
    
    ticker.attach(&CycExec, 0.025);          // Period set to 25ms
    
    /*lcd->locate(0,0);
    lcd->printf("Tck: %d", tck);*/
    
    while(1){
        led1 = !led1;
        wait(0.2);   
        }
}