done

Dependencies:   mbed

Fork of ESE350-Whack-a-Mole by Eric Berdinis

Committer:
ese350billjack
Date:
Wed Feb 24 02:35:10 2016 +0000
Revision:
1:60d092c638bf
created 2 whacks;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ese350billjack 1:60d092c638bf 1 /* ESE 350 Lab
ese350billjack 1:60d092c638bf 2 * Part 1
ese350billjack 1:60d092c638bf 3 * Jack Harkins and Bill He
ese350billjack 1:60d092c638bf 4 */
ese350billjack 1:60d092c638bf 5
ese350billjack 1:60d092c638bf 6 #include "mbed.h"
ese350billjack 1:60d092c638bf 7 #include "MRF24J40.h"
ese350billjack 1:60d092c638bf 8 #include <iostream>
ese350billjack 1:60d092c638bf 9
ese350billjack 1:60d092c638bf 10 #include <string>
ese350billjack 1:60d092c638bf 11
ese350billjack 1:60d092c638bf 12 // RF tranceiver to link with handheld.
ese350billjack 1:60d092c638bf 13 MRF24J40 mrf(p11, p12, p13, p14, p21);
ese350billjack 1:60d092c638bf 14
ese350billjack 1:60d092c638bf 15 // LEDs you can treat these as variables (led2 = 1 will turn led2 on!)
ese350billjack 1:60d092c638bf 16 DigitalOut led1(LED1);
ese350billjack 1:60d092c638bf 17 DigitalOut led2(LED2);
ese350billjack 1:60d092c638bf 18 DigitalOut led3(LED3);
ese350billjack 1:60d092c638bf 19 DigitalOut led4(LED4);
ese350billjack 1:60d092c638bf 20
ese350billjack 1:60d092c638bf 21 // Timer
ese350billjack 1:60d092c638bf 22 Timer timer;
ese350billjack 1:60d092c638bf 23
ese350billjack 1:60d092c638bf 24 // Serial port for showing RX data.
ese350billjack 1:60d092c638bf 25 Serial pc(USBTX, USBRX);
ese350billjack 1:60d092c638bf 26
ese350billjack 1:60d092c638bf 27 // Used for sending and receiving
ese350billjack 1:60d092c638bf 28 char txBuffer[128];
ese350billjack 1:60d092c638bf 29 char rxBuffer[128];
ese350billjack 1:60d092c638bf 30 int rxLen;
ese350billjack 1:60d092c638bf 31
ese350billjack 1:60d092c638bf 32 //***************** Do not change these methods (please) *****************//
ese350billjack 1:60d092c638bf 33
ese350billjack 1:60d092c638bf 34 /**
ese350billjack 1:60d092c638bf 35 * Receive data from the MRF24J40.
ese350billjack 1:60d092c638bf 36 *
ese350billjack 1:60d092c638bf 37 * @param data A pointer to a char array to hold the data
ese350billjack 1:60d092c638bf 38 * @param maxLength The max amount of data to read.
ese350billjack 1:60d092c638bf 39 */
ese350billjack 1:60d092c638bf 40 int rf_receive(char *data, uint8_t maxLength)
ese350billjack 1:60d092c638bf 41 {
ese350billjack 1:60d092c638bf 42 uint8_t len = mrf.Receive((uint8_t *)data, maxLength);
ese350billjack 1:60d092c638bf 43 uint8_t header[8]= {1, 8, 0, 0xA1, 0xB2, 0xC3, 0xD4, 0x00};
ese350billjack 1:60d092c638bf 44
ese350billjack 1:60d092c638bf 45 if(len > 10) {
ese350billjack 1:60d092c638bf 46 //Remove the header and footer of the message
ese350billjack 1:60d092c638bf 47 for(uint8_t i = 0; i < len-2; i++) {
ese350billjack 1:60d092c638bf 48 if(i<8) {
ese350billjack 1:60d092c638bf 49 //Make sure our header is valid first
ese350billjack 1:60d092c638bf 50 if(data[i] != header[i])
ese350billjack 1:60d092c638bf 51 return 0;
ese350billjack 1:60d092c638bf 52 } else {
ese350billjack 1:60d092c638bf 53 data[i-8] = data[i];
ese350billjack 1:60d092c638bf 54 }
ese350billjack 1:60d092c638bf 55 }
ese350billjack 1:60d092c638bf 56
ese350billjack 1:60d092c638bf 57 //pc.printf("Received: %s length:%d\r\n", data, ((int)len)-10);
ese350billjack 1:60d092c638bf 58 }
ese350billjack 1:60d092c638bf 59 return ((int)len)-10;
ese350billjack 1:60d092c638bf 60 }
ese350billjack 1:60d092c638bf 61
ese350billjack 1:60d092c638bf 62 /**
ese350billjack 1:60d092c638bf 63 * Send data to another MRF24J40.
ese350billjack 1:60d092c638bf 64 *
ese350billjack 1:60d092c638bf 65 * @param data The string to send
ese350billjack 1:60d092c638bf 66 * @param maxLength The length of the data to send.
ese350billjack 1:60d092c638bf 67 * If you are sending a null-terminated string you can pass strlen(data)+1
ese350billjack 1:60d092c638bf 68 */
ese350billjack 1:60d092c638bf 69 void rf_send(char *data, uint8_t len)
ese350billjack 1:60d092c638bf 70 {
ese350billjack 1:60d092c638bf 71 //We need to prepend the message with a valid ZigBee header
ese350billjack 1:60d092c638bf 72 uint8_t header[8]= {1, 8, 0, 0xA1, 0xB2, 0xC3, 0xD4, 0x00};
ese350billjack 1:60d092c638bf 73 uint8_t *send_buf = (uint8_t *) malloc( sizeof(uint8_t) * (len+8) );
ese350billjack 1:60d092c638bf 74
ese350billjack 1:60d092c638bf 75 for(uint8_t i = 0; i < len+8; i++) {
ese350billjack 1:60d092c638bf 76 //prepend the 8-byte header
ese350billjack 1:60d092c638bf 77 send_buf[i] = (i<8) ? header[i] : data[i-8];
ese350billjack 1:60d092c638bf 78 }
ese350billjack 1:60d092c638bf 79 //pc.printf("Sent: %s\r\n", send_buf+8);
ese350billjack 1:60d092c638bf 80
ese350billjack 1:60d092c638bf 81 mrf.Send(send_buf, len+8);
ese350billjack 1:60d092c638bf 82 free(send_buf);
ese350billjack 1:60d092c638bf 83 }
ese350billjack 1:60d092c638bf 84
ese350billjack 1:60d092c638bf 85
ese350billjack 1:60d092c638bf 86 //***************** You can start coding here *****************//
ese350billjack 1:60d092c638bf 87 int main (void)
ese350billjack 1:60d092c638bf 88 {
ese350billjack 1:60d092c638bf 89 uint8_t channel = 2;
ese350billjack 1:60d092c638bf 90
ese350billjack 1:60d092c638bf 91 //Set the Channel. 0 is default, 15 is max
ese350billjack 1:60d092c638bf 92 mrf.SetChannel(channel);
ese350billjack 1:60d092c638bf 93
ese350billjack 1:60d092c638bf 94 //Start the timer
ese350billjack 1:60d092c638bf 95 timer.start();
ese350billjack 1:60d092c638bf 96
ese350billjack 1:60d092c638bf 97 while(true) {
ese350billjack 1:60d092c638bf 98 //Try to receive some data
ese350billjack 1:60d092c638bf 99 rxLen = rf_receive(rxBuffer, 128);
ese350billjack 1:60d092c638bf 100 if(rxLen > 0) {
ese350billjack 1:60d092c638bf 101 //Toggle the Led
ese350billjack 1:60d092c638bf 102 led1 = led1^1;
ese350billjack 1:60d092c638bf 103 pc.printf("Received: %s\r\n", rxBuffer);
ese350billjack 1:60d092c638bf 104 }
ese350billjack 1:60d092c638bf 105
ese350billjack 1:60d092c638bf 106 //Send some data every second
ese350billjack 1:60d092c638bf 107 if(timer.read_ms() >= 1000) {
ese350billjack 1:60d092c638bf 108 //Reset the timer to 0
ese350billjack 1:60d092c638bf 109 timer.reset();
ese350billjack 1:60d092c638bf 110 // Toggle LED 2.
ese350billjack 1:60d092c638bf 111 led2 = led2^1;
ese350billjack 1:60d092c638bf 112 //Add to the buffer. You may want to check out sprintf
ese350billjack 1:60d092c638bf 113 strcpy(txBuffer, "Jeff is the best TA!");
ese350billjack 1:60d092c638bf 114 //Send the buffer
ese350billjack 1:60d092c638bf 115 rf_send(txBuffer, strlen(txBuffer) + 1);
ese350billjack 1:60d092c638bf 116 pc.printf("Sent: %s\r\n", txBuffer);
ese350billjack 1:60d092c638bf 117 }
ese350billjack 1:60d092c638bf 118 }
ese350billjack 1:60d092c638bf 119 }