Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@0:015c04037667, 2015-10-23 (annotated)
- 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?
User | Revision | Line number | New 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 | } |