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();
}
}