Test program to send MAX!-Messages with a RFM22-Module
Dependencies: RF22 TextLCD TextLCDScroll mbed RF22Max
main.cpp@4:6c72714f5886, 2013-10-22 (annotated)
- Committer:
- charly
- Date:
- Tue Oct 22 19:43:01 2013 +0000
- Revision:
- 4:6c72714f5886
- Parent:
- 3:4254b4c3557e
Work in progrss version of sending code
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
charly | 4:6c72714f5886 | 1 | // Testprogramm for RFM22B with RF22Max-Library to read ELV MAX! window Shutter-Contacts and PushBottons |
charly | 3:4254b4c3557e | 2 | |
charly | 4:6c72714f5886 | 3 | //show debug output on Serial pc |
charly | 4:6c72714f5886 | 4 | #define DEBUG |
charly |
0:94dd393bd9bb | 5 | |
charly |
0:94dd393bd9bb | 6 | #include "mbed.h" |
charly | 4:6c72714f5886 | 7 | #include <RF22Max.h> |
charly | 2:941c46d37d7e | 8 | #include "TextLCDScroll.h" |
charly | 2:941c46d37d7e | 9 | |
charly | 4:6c72714f5886 | 10 | // show debug-output on console |
charly | 4:6c72714f5886 | 11 | //#define DEBUG |
charly |
0:94dd393bd9bb | 12 | |
charly |
0:94dd393bd9bb | 13 | Serial pc(USBTX, USBRX); |
charly |
0:94dd393bd9bb | 14 | |
charly | 4:6c72714f5886 | 15 | Ticker SendTicker; |
charly | 3:4254b4c3557e | 16 | |
charly | 4:6c72714f5886 | 17 | volatile int doSend = 0; // set to 1 by Ticker-Interrupt and read in main-loop |
charly | 4:6c72714f5886 | 18 | |
charly | 2:941c46d37d7e | 19 | TextLCDScroll lcd(p30, p29, p28, p27, p26, p25, TextLCD::LCD16x2); // rs, e, d4-d7 |
charly |
1:b71f9a293c54 | 20 | |
charly |
0:94dd393bd9bb | 21 | // mbed LEDs |
charly | 2:941c46d37d7e | 22 | DigitalOut led1(LED1); |
charly | 2:941c46d37d7e | 23 | DigitalOut led2(LED2); |
charly | 2:941c46d37d7e | 24 | DigitalOut led3(LED3); |
charly | 2:941c46d37d7e | 25 | DigitalOut led4(LED4); |
charly |
0:94dd393bd9bb | 26 | |
charly |
0:94dd393bd9bb | 27 | // Singleton instance of the radio |
charly |
0:94dd393bd9bb | 28 | //rf22(PinName slaveSelectPin , PinName mosi, PinName miso, PinName sclk, PinName interrupt ); |
charly | 4:6c72714f5886 | 29 | RF22Max rf22(p14,p11,p12,p13,p15); |
charly | 2:941c46d37d7e | 30 | |
charly | 4:6c72714f5886 | 31 | void Ticker_isr() |
charly | 4:6c72714f5886 | 32 | { |
charly | 4:6c72714f5886 | 33 | led1 = !led1; |
charly | 4:6c72714f5886 | 34 | doSend = 1; |
charly |
0:94dd393bd9bb | 35 | } |
charly |
0:94dd393bd9bb | 36 | |
charly | 3:4254b4c3557e | 37 | |
charly | 2:941c46d37d7e | 38 | int main() |
charly | 2:941c46d37d7e | 39 | { |
charly |
1:b71f9a293c54 | 40 | |
charly | 3:4254b4c3557e | 41 | |
charly | 4:6c72714f5886 | 42 | char lcdline[500]; |
charly | 4:6c72714f5886 | 43 | |
charly | 4:6c72714f5886 | 44 | RF22Max::max_message MyMessage; |
charly | 3:4254b4c3557e | 45 | int i; |
charly | 3:4254b4c3557e | 46 | |
charly | 4:6c72714f5886 | 47 | uint8_t sbuf[RF22_MAX_MESSAGE_LEN]; |
charly | 3:4254b4c3557e | 48 | |
charly | 4:6c72714f5886 | 49 | uint8_t slen = sizeof(sbuf); |
charly | 3:4254b4c3557e | 50 | |
charly |
0:94dd393bd9bb | 51 | pc.baud(115200); |
charly |
0:94dd393bd9bb | 52 | |
charly |
0:94dd393bd9bb | 53 | pc.printf("\n\rConnected to mbed\n\r"); |
charly |
0:94dd393bd9bb | 54 | |
charly |
0:94dd393bd9bb | 55 | |
charly | 4:6c72714f5886 | 56 | char version_str [80] = "RF22-Send-Test!-V1.0"; |
charly | 2:941c46d37d7e | 57 | lcd.cls(); |
charly | 2:941c46d37d7e | 58 | lcd.setLine(0,version_str); |
charly | 2:941c46d37d7e | 59 | pc.printf("%s\n\r",version_str); |
charly |
1:b71f9a293c54 | 60 | |
charly | 3:4254b4c3557e | 61 | |
charly | 2:941c46d37d7e | 62 | pc.printf("Pre-init|"); |
charly | 2:941c46d37d7e | 63 | if (!rf22.init()) |
charly | 4:6c72714f5886 | 64 | pc.printf("RF22Max init failed\n\r"); |
charly | 2:941c46d37d7e | 65 | pc.printf("Post-init\n\r"); |
charly |
1:b71f9a293c54 | 66 | |
charly |
1:b71f9a293c54 | 67 | |
charly | 2:941c46d37d7e | 68 | rf22.setModeRx(); |
charly |
1:b71f9a293c54 | 69 | |
charly |
1:b71f9a293c54 | 70 | |
charly | 4:6c72714f5886 | 71 | SendTicker.attach(&Ticker_isr, 5.0); // Send every 5 seconds |
charly |
1:b71f9a293c54 | 72 | |
charly | 3:4254b4c3557e | 73 | //wait forever and see what comes in |
charly | 2:941c46d37d7e | 74 | while (1) { |
charly |
1:b71f9a293c54 | 75 | |
charly | 3:4254b4c3557e | 76 | // did we get a MAX!-Message? |
charly | 4:6c72714f5886 | 77 | if (rf22.recv_max(&MyMessage)) { |
charly | 3:4254b4c3557e | 78 | // we got a message |
charly | 4:6c72714f5886 | 79 | led2 = !led2; |
charly | 4:6c72714f5886 | 80 | sprintf(lcdline,"Got Message type: %s Msg-Nr:%i from Device-ID:%06X State:%s Battery %s", MyMessage.type_str,MyMessage.cnt, MyMessage.frm_adr, MyMessage.state, MyMessage.battery_state); |
charly | 4:6c72714f5886 | 81 | pc.printf("%s\n\r",lcdline); |
charly | 4:6c72714f5886 | 82 | lcd.setLine(0,lcdline); |
charly | 3:4254b4c3557e | 83 | |
charly | 4:6c72714f5886 | 84 | } |
charly | 3:4254b4c3557e | 85 | |
charly | 4:6c72714f5886 | 86 | if (doSend) { |
charly | 4:6c72714f5886 | 87 | //we should send something |
charly | 4:6c72714f5886 | 88 | doSend = 0; |
charly | 4:6c72714f5886 | 89 | led4=1; |
charly | 4:6c72714f5886 | 90 | // try to send a simulated window-shutterContact-message |
charly | 4:6c72714f5886 | 91 | // wait some time |
charly | 4:6c72714f5886 | 92 | sbuf[0] = 11; // MsgLen |
charly | 4:6c72714f5886 | 93 | sbuf[1] = 0x21; // MsgCount ?? |
charly | 4:6c72714f5886 | 94 | sbuf[2] = 0x00; // Flag |
charly | 4:6c72714f5886 | 95 | sbuf[3] = 0x30; // Type = Cmd = ShutterContactState |
charly | 4:6c72714f5886 | 96 | sbuf[4] = 0x11; // From Fake Address |
charly | 4:6c72714f5886 | 97 | sbuf[5] = 0x11; // From |
charly | 4:6c72714f5886 | 98 | sbuf[6] = 0x11; // From |
charly | 4:6c72714f5886 | 99 | sbuf[7] = 0x00; // To Address : broadcast |
charly | 4:6c72714f5886 | 100 | sbuf[8] = 0x00; |
charly | 4:6c72714f5886 | 101 | sbuf[9] = 0x00; |
charly | 4:6c72714f5886 | 102 | sbuf[10] = 0x00; // GroupId |
charly | 4:6c72714f5886 | 103 | sbuf[11] = 0x02; //Payload is 0x02: State Open, Battery: good |
charly | 4:6c72714f5886 | 104 | slen = 12+2; //+2Byte CRC???? |
charly | 4:6c72714f5886 | 105 | /* Calculate CRC */ |
charly | 4:6c72714f5886 | 106 | uint16_t scrc = rf22.calc_crc(sbuf, slen - 2); |
charly | 4:6c72714f5886 | 107 | sbuf[12] = scrc >> 8; |
charly | 4:6c72714f5886 | 108 | sbuf[13] = scrc & 0xff; |
charly | 4:6c72714f5886 | 109 | |
charly | 4:6c72714f5886 | 110 | |
charly | 4:6c72714f5886 | 111 | if (rf22.send(sbuf,slen)) { |
charly | 4:6c72714f5886 | 112 | #ifdef DEBUG |
charly | 4:6c72714f5886 | 113 | pc.printf("Send window-shutterContact-message OK\n\r"); |
charly | 4:6c72714f5886 | 114 | #endif |
charly | 3:4254b4c3557e | 115 | } else { |
charly | 4:6c72714f5886 | 116 | #ifdef DEBUG |
charly | 4:6c72714f5886 | 117 | pc.printf("Send window-shutterContact-message NOT OK\n\r"); |
charly | 4:6c72714f5886 | 118 | #endif |
charly | 3:4254b4c3557e | 119 | } |
charly | 4:6c72714f5886 | 120 | led4 = 0; |
charly | 3:4254b4c3557e | 121 | |
charly | 3:4254b4c3557e | 122 | } |
charly | 3:4254b4c3557e | 123 | |
charly | 3:4254b4c3557e | 124 | } |
charly |
0:94dd393bd9bb | 125 | } |
charly |
0:94dd393bd9bb | 126 | |
charly |
0:94dd393bd9bb | 127 |