Test program to send MAX!-Messages with a RFM22-Module

Dependencies:   RF22 TextLCD TextLCDScroll mbed RF22Max

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?

UserRevisionLine numberNew 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