Maček Dorijan Miljković Dominik Napon i temperatura sa istog slave-a

Dependencies:   Display1602 mbed-rtos mbed nRF24L01P

main.cpp

Committer:
DorijanMacek
Date:
2016-01-28
Revision:
3:07d5ce3c32e3
Parent:
2:d0f85a573b89

File content as of revision 3:07d5ce3c32e3:

#include "mbed.h"
#include "rtos.h"
#include "nRF24L01P.h"
#include "Display1602.h"

//Mutex stdio_mutex;
Semaphore semMSP430G(1);
Semaphore semLCD(1);
Semaphore semJoystick(1);


I2C MSP430G(p9, p10); //sda, sc1
nRF24L01P odasiljac(p11,p12,p13,p14,p28,p27);  //// mosi, miso, sck, csn, ce, irq
AnalogIn upDown(p15);
AnalogIn leftRight(p16);
Display1602 display(p19, p20, p21, p22, p23, p24,p25,p26,p29,p30,p18); 
Serial pc(USBTX, USBRX);

DigitalOut myled1(LED1);
DigitalOut myled2(LED2);
DigitalOut myled3(LED3);
DigitalOut myled4(LED4);
DigitalOut res(p17);

void startLCD(void);
void startNRF(int);

void printTempAndVoltOnLCD(void const *args);
void printJoystickOnLCD(void const *args);

void readJoystick(void const *args);
void readTempFromMSP430G(void const *args);
void readVoltFromMSP430G(void const *args);

//nrf
const int transfer_size = 4;
char txData[transfer_size],rxData[transfer_size];
int txDataCnt = 0;
int rxDataCnt = 0;
    
//joystick
float velocity=upDown;
float direction =leftRight;
    
//MSP430g
const int addr= 0x94;
float temp=0.00;
float volt=0.00;

int testT=0;
int testY=0;


int main() 
{


    
     res=1;
    startLCD();
    startNRF(transfer_size);
    wait(1);
    
    Thread t0(readJoystick, (void *)"readJoystick");
    //Thread t1(readTempFromMSP430G, (void *)"readTemp");
    Thread t2(readVoltFromMSP430G, (void *)"readVoltage");
    Thread t3(printTempAndVoltOnLCD, (void *)"printTemp");
    Thread t4(printJoystickOnLCD, (void *)"printJoytick");
    
   
    
    
    //Thread t0(readJoystick, (void *)"readJoystick");
    //Thread t1(readTempFromMSP430G, (void *)"readTemp");
    //Thread t2(readVoltFromMSP430G, (void *)"readVoltage");
    //Thread t3(printTempAndVoltOnLCD, (void *)"printTemp");
    //Thread t4(printJoystickOnLCD, (void *)"printJoytick");
    
    //printTempAndVoltOnLCD((void *)"printemAndVolt");    
    //printJoystickOnLCD((void *)"printjoystick");
    //readJoystick((void *)"readJoystick");
    //readTempFromMSP430G((void *)"readTemp");
    
    
    //readVoltFromMSP430G((void *)"readVoltage");
    //Thread printOnLCD(temp,volt,1);
    //Thread t2(test_thread, (void *)"Th 2");
    
    while(1){}
    
}

void startLCD()
{
     display.Clear();
     display.SetXY(0,0);
     display.printf("Dorijan Macek"); // print on screen
     display.SetXY(0,1);
     display.printf("TVZ  2015 / 2016");
     wait(1);
     display.SetXY(0,0);
     display.printf("Dobro dosli  ");
     display.SetXY(0,1);
     display.printf("................");
     wait(0.5);    
}
void startNRF(int size)
{
    odasiljac.setTransferSize( size);
    odasiljac.setTransmitMode();
    odasiljac.enable();
    
    display.Clear();
    display.SetXY(0,0);
    display.printf( "Odasiljac ");
    display.SetXY(0,1);
    pc.printf( "                ");
    wait(1);
    display.Clear();
    
    display.printf( "Frequency : ");
    display.SetXY(0,1);
    display.printf ("%d MHz",odasiljac.getRfFrequency() );
    wait(1);
    display.Clear();
    display.SetXY(0,0);
    
    display.printf( "Output power : ");
    display.SetXY(0,1);
    display.printf("%d dBm",  odasiljac.getRfOutputPower() );
    wait(1);
    display.Clear();
    display.SetXY(0,0);
    
    display.printf( "Data Rate : ");
    display.SetXY(0,1);
    display.printf("%d kbps", odasiljac.getAirDataRate() );
    wait(1);
    display.Clear();
    display.SetXY(0,0);
    
    display.printf( "TX Address : ");
    display.SetXY(0,1);
    display.printf("0x%010llX", odasiljac.getTxAddress() );
    wait(1);
    display.Clear();
    display.SetXY(0,0);
    
    display.printf( "RX Address : ");
    display.SetXY(0,1);
    display.printf("0x%010llX", odasiljac.getRxAddress() );
    wait(1);
    display.Clear();
    display.SetXY(0,0);
    
    wait(0.5);
    
}

void printTempAndVoltOnLCD(void const *args)
{
    while(true)
    {
        semLCD.wait();
        
        int znakgore=30;
        int znakdolje=31;
        int znaklijevo=174;
        int znakdesno=175;
    
        display.SetXY(8,0);
        display.printf("T = %.2f ",temp);  
        display.SetXY(8,1);
        display.printf("V = %.2f ",volt);
        //pc.printf("printTempAndVoltOnLCD \n\r");
        
          
        Thread::wait(500);        
        semLCD.release();
    }  
}

void printJoystickOnLCD(void const *args)
{
    while(true)
    {
        semLCD.wait();
        
        display.SetXY(0,0);
        display.printf("Up %.2f ",velocity);
        display.SetXY(0,1);
        display.printf("LR %.2f ",direction);
        //pc.printf("printJoystickOnLCD \n\r ");
        
                
        Thread::wait(500);
        semLCD.release();
    }
}
        


void readJoystick(void const *args)
{
    while(true)
    {
        semJoystick.wait();
        
        velocity=upDown;
        direction =leftRight;
        //pc.printf("readJoystick \n\r ");
        
        Thread::wait(50);
        semJoystick.release();
    }
        
} 

void readTempFromMSP430G(void const *args)
{
    while(true)
    {
        semMSP430G.wait();
        //MSP430G.stop();
        //Thread::wait(500);

        //res=1;
        char config_t[2]; // transmitt buffer
        char value_read[2]; // read buffer
        config_t[0] = 0xC0; //config slave to int temp
        config_t[1] = 0x55; // config data byte1, BOut
        //MSP430G.start();
        //Thread::wait(20);
              
        MSP430G.write(addr, config_t, 2);
        Thread::wait(20);                                    
        //wait_us(20);
        MSP430G.read(addr, value_read, 2); //read the two-byte temp data            
        temp = ((value_read[0]+value_read[1]*256)/10.0);
        pc.printf("readTempFromMSP430G %f \n\r ",temp);
        res=0;
        Thread::wait(5);
        res=1;
        Thread::wait(500);
        
        //MSP430G.abort_transfer();
        //wait(0.5);
        
        
        //config_t[0] = 0xC1; //config slave to int temp
        //config_t[1] = 0xff; // config data byte1, BOut
        
        //MSP430G.write(addr, config_t, 2);
        //Thread::wait(20);                                    
        //wait_us(20);
        //MSP430G.read(addr, value_read, 2); //read the two-byte temp data
        //volt = ((value_read[0]+value_read[1]*256)*(1.5/1024));
        //pc.printf("readVoltFromMSP430G \n\r %f",volt);
        
        Thread::wait(500);
        
        //wait(0.5);
                      
        
        
        semMSP430G.release();    
    }    
}    


void readVoltFromMSP430G(void const *args)
{
    while(true)
    {
        semMSP430G.wait(); 
        //MSP430G.stop();
        
        char config_t[2]; // transmitt buffer
        char value_read[2]; // read buffer
        config_t[0] = 0xC1; //config slave to int temp
        config_t[1] = 0xff; // config data byte1, BOut
        //MSP430G.start();
          
        //Thread::wait(20);
        
        MSP430G.write(addr, config_t, 2);
        //MSP430G.stop();
        Thread::wait(20);
        
                       
        MSP430G.read(addr, value_read, 2); //read the two-byte temp data 
        //Thread::wait(500);
        
        volt = (value_read[0]+value_read[1]*256)*(1.5/1024);        
        pc.printf("readVoltFromMSP430G \n\r %f",volt);
        
        //MSP430G.stop();
        res=0;
        Thread::wait(5);
        res=1;
        Thread::wait(500);
        
        //MSP430G.stop();
        semMSP430G.release(); 
    }
}