Philip McKenna / Mbed 2 deprecated MBED_LIN_RGB_Master_Example

Dependencies:   LIN mbed

Committer:
pmckenna
Date:
Fri Oct 23 15:32:21 2015 +0000
Revision:
0:015c04037667
Child:
1:bf50812995c6
Example to show LIN Master functionality on MBED using MLX80020 LIN Transceiver

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pmckenna 0:015c04037667 1 #include "mbed.h"
pmckenna 0:015c04037667 2 #include "LIN/LinMaster.h"
pmckenna 0:015c04037667 3
pmckenna 0:015c04037667 4 /*
pmckenna 0:015c04037667 5 *Author: PMK
pmckenna 0:015c04037667 6 *Connect MLX80020 EVB from Melexis to enable MBED to act as a LIN Master
pmckenna 0:015c04037667 7 *This example sends messages specific to Melexis LIN RGB nodes with FW V 4.1.3
pmckenna 0:015c04037667 8 */
pmckenna 0:015c04037667 9
pmckenna 0:015c04037667 10 /********* Configurable Data for LIN RGB portion **********/
pmckenna 0:015c04037667 11 DigitalIn LINtransReset(p8); //p8 can be connected to enable of LIN Transceiver
pmckenna 0:015c04037667 12 LinMaster LinMaster(p10, p9); /* p10 = RXD, p9 = TXD */
pmckenna 0:015c04037667 13
pmckenna 0:015c04037667 14 const char NUMBEROFNODES = 20; //Number of RGB slave devices
pmckenna 0:015c04037667 15 const char FIRSTNAD = 0x61; //Node address of first RGB slave in string
pmckenna 0:015c04037667 16
pmckenna 0:015c04037667 17 /**********************************************************/
pmckenna 0:015c04037667 18
pmckenna 0:015c04037667 19 LinMaster::Frame_t M2SFrame =
pmckenna 0:015c04037667 20 {
pmckenna 0:015c04037667 21 LinMaster::M2S, // Direction
pmckenna 0:015c04037667 22 LinMaster::Enhanced, // CRC Type
pmckenna 0:015c04037667 23 LinMaster::Normal, // Break Type
pmckenna 0:015c04037667 24 8, // Data Length
pmckenna 0:015c04037667 25 0x24, // Frame ID
pmckenna 0:015c04037667 26 {0x7F, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00} // Data BroadCast + LEDs OFF + USE NAD
pmckenna 0:015c04037667 27 };
pmckenna 0:015c04037667 28
pmckenna 0:015c04037667 29 void SetLED(int Address, int OnOff, int R, int G, int B, int I, int FadingTime, int FadingOnOff);
pmckenna 0:015c04037667 30 void SetIntensity(int arg);
pmckenna 0:015c04037667 31 void SetLEDsOnOff(int arg);
pmckenna 0:015c04037667 32 void SetFadingTime(int arg);
pmckenna 0:015c04037667 33 void SetFadingOnOff(int arg);
pmckenna 0:015c04037667 34
pmckenna 0:015c04037667 35 int main()
pmckenna 0:015c04037667 36 {
pmckenna 0:015c04037667 37
pmckenna 0:015c04037667 38 //************ LIN Initialization ************************
pmckenna 0:015c04037667 39 LINtransReset.mode(PullUp); //set enable high
pmckenna 0:015c04037667 40 (void)LinMaster.init(); //initialize lin driver
pmckenna 0:015c04037667 41 LinMaster.baudrate(19200); //set lin baudrate
pmckenna 0:015c04037667 42 wait_ms(500); //For init() to be completed
pmckenna 0:015c04037667 43 //*******************************************************
pmckenna 0:015c04037667 44
pmckenna 0:015c04037667 45 SetLED(127, 1, 0, 255, 0, 0, 0, 0); //turn All LEDS Off
pmckenna 0:015c04037667 46 wait_ms(20);
pmckenna 0:015c04037667 47
pmckenna 0:015c04037667 48 for(;;)
pmckenna 0:015c04037667 49 {
pmckenna 0:015c04037667 50 SetLED(FIRSTNAD + (rand()%NUMBEROFNODES), 1, rand()%255, rand()%255, rand()%255, rand()%100, 1, 1); //set random node to random color and intensity
pmckenna 0:015c04037667 51 wait_ms(40);
pmckenna 0:015c04037667 52 }
pmckenna 0:015c04037667 53 }
pmckenna 0:015c04037667 54
pmckenna 0:015c04037667 55 void SetLED(int Address, int OnOff, int R, int G, int B, int I, int FadingOnOff, int FadingTime)
pmckenna 0:015c04037667 56 {
pmckenna 0:015c04037667 57 M2SFrame.Data[0] = Address;
pmckenna 0:015c04037667 58 SetLEDsOnOff(OnOff);
pmckenna 0:015c04037667 59 SetFadingTime(FadingTime);
pmckenna 0:015c04037667 60 SetFadingOnOff(FadingOnOff);
pmckenna 0:015c04037667 61 SetIntensity(I);
pmckenna 0:015c04037667 62 M2SFrame.Data[5] = R;
pmckenna 0:015c04037667 63 M2SFrame.Data[6] = G;
pmckenna 0:015c04037667 64 M2SFrame.Data[7] = B;
pmckenna 0:015c04037667 65
pmckenna 0:015c04037667 66 (void)LinMaster.send_frame(&M2SFrame);
pmckenna 0:015c04037667 67 while(LinMaster.status() != LinMaster::IDLE);
pmckenna 0:015c04037667 68 }
pmckenna 0:015c04037667 69
pmckenna 0:015c04037667 70 void SetLEDsOnOff(int arg)
pmckenna 0:015c04037667 71 {
pmckenna 0:015c04037667 72 if (arg == 1 or arg == 0)
pmckenna 0:015c04037667 73 {
pmckenna 0:015c04037667 74 M2SFrame.Data[2] = (M2SFrame.Data[2] & 0x7F) | (arg << 7);
pmckenna 0:015c04037667 75 }
pmckenna 0:015c04037667 76 }
pmckenna 0:015c04037667 77
pmckenna 0:015c04037667 78 void SetFadingTime(int arg)
pmckenna 0:015c04037667 79 {
pmckenna 0:015c04037667 80 if (arg >= 0 and arg <= 63) //FadingTime = 0-6.3ms, in steps of 100ms
pmckenna 0:015c04037667 81 {
pmckenna 0:015c04037667 82 M2SFrame.Data[3] = (M2SFrame.Data[3] & 0xC0) | (arg & 0x3F);
pmckenna 0:015c04037667 83 }
pmckenna 0:015c04037667 84 }
pmckenna 0:015c04037667 85
pmckenna 0:015c04037667 86 void SetFadingOnOff(int arg)
pmckenna 0:015c04037667 87 {
pmckenna 0:015c04037667 88 if (arg == 1 or arg == 0)
pmckenna 0:015c04037667 89 {
pmckenna 0:015c04037667 90 M2SFrame.Data[4] = (M2SFrame.Data[4] & 0x7F) | (arg << 7);
pmckenna 0:015c04037667 91 }
pmckenna 0:015c04037667 92 }
pmckenna 0:015c04037667 93
pmckenna 0:015c04037667 94 void SetIntensity(int arg)
pmckenna 0:015c04037667 95 {
pmckenna 0:015c04037667 96 if (arg >= 0 and arg <= 100)
pmckenna 0:015c04037667 97 {
pmckenna 0:015c04037667 98 M2SFrame.Data[4] = (M2SFrame.Data[4] & 0x80) | (arg & 0x7F);
pmckenna 0:015c04037667 99 }
pmckenna 0:015c04037667 100 }