Real controller code

Dependencies:   Joystick_skeleton_neverused mbed

Fork of ESE519_Lab6_part1_skeleton by Carter Sharer

Committer:
britneyd
Date:
Wed Apr 26 21:02:51 2017 +0000
Revision:
6:74cc716a4ae3
Parent:
4:3044edf0cc5d
real controller; ;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
csharer 3:1d10014a4646 1 //ESE519 Lab6 Controller Part 1 (INCOMPLETE IMPLIMENTATION)
csharer 0:0ebe6f55caee 2 //Author: Carter Sharer
csharer 0:0ebe6f55caee 3 //Date: 10/18/2016
csharer 0:0ebe6f55caee 4 //Sources: ESE350 Whack-A-Mole: https://developer.mbed.org/users/mlab4/code/ESE350-Whack-a-Mole/
csharer 0:0ebe6f55caee 5 //This is a simple working templete for sending and receving between two MRF24J40 Modules
csharer 0:0ebe6f55caee 6 //Contains a communication protocol for sending a receiving
csharer 0:0ebe6f55caee 7
csharer 0:0ebe6f55caee 8 #include "mbed.h"
csharer 0:0ebe6f55caee 9 #include "MRF24J40.h"
csharer 0:0ebe6f55caee 10 #include <string>
csharer 0:0ebe6f55caee 11 #include "Joystick.h"
csharer 0:0ebe6f55caee 12
csharer 0:0ebe6f55caee 13 #define SEND //Uncomment if you want to transmit data
britneyd 6:74cc716a4ae3 14 //#define RECEIVE //Uncomment if you want to receive data
britneyd 6:74cc716a4ae3 15 #define RF_BUFLEN 200
britneyd 6:74cc716a4ae3 16
britneyd 6:74cc716a4ae3 17 char serialBuffer[128];
britneyd 6:74cc716a4ae3 18 int serialBufferIndex = 0;
britneyd 6:74cc716a4ae3 19 volatile int receivedSerialData = 0;
csharer 0:0ebe6f55caee 20
csharer 0:0ebe6f55caee 21 #define NONE 250
csharer 0:0ebe6f55caee 22
csharer 0:0ebe6f55caee 23 //============================
csharer 0:0ebe6f55caee 24 //== Pin Assignments ==
csharer 0:0ebe6f55caee 25 //============================
csharer 0:0ebe6f55caee 26 //Knobs
csharer 0:0ebe6f55caee 27 #define POT1 p17 //Knob1
csharer 0:0ebe6f55caee 28 #define POT2 p18 //Knob2
csharer 0:0ebe6f55caee 29 #define POT3 p16 //Knob3
csharer 0:0ebe6f55caee 30 #define POT4 p15 //Knob4
csharer 0:0ebe6f55caee 31 //JoyStick
csharer 0:0ebe6f55caee 32 #define POTV p19 //Vertial
csharer 0:0ebe6f55caee 33 #define POTH p20 //Horizontal
csharer 0:0ebe6f55caee 34 //MRF24J
csharer 0:0ebe6f55caee 35 #define SDI p11
csharer 0:0ebe6f55caee 36 #define SDO p12
csharer 0:0ebe6f55caee 37 #define SCK p13
csharer 0:0ebe6f55caee 38 #define CS p7
csharer 0:0ebe6f55caee 39 #define RESET p8
csharer 0:0ebe6f55caee 40 //Button
csharer 0:0ebe6f55caee 41 #define BUTTON1 p21
britneyd 6:74cc716a4ae3 42 #define COMMUNICATION_FORMAT "Jstick_h: %0.0f Jstick_v: %0.0f Button: %d Theta: %f Distance: %f"
csharer 0:0ebe6f55caee 43
csharer 0:0ebe6f55caee 44 //============================
csharer 0:0ebe6f55caee 45 //== Objects ==
csharer 0:0ebe6f55caee 46 //============================
csharer 0:0ebe6f55caee 47 //Knobs
csharer 0:0ebe6f55caee 48 AnalogIn pot1(POT1);
csharer 0:0ebe6f55caee 49 AnalogIn pot2(POT2);
csharer 0:0ebe6f55caee 50 AnalogIn pot3(POT3);
csharer 0:0ebe6f55caee 51 AnalogIn pot4(POT4);
csharer 0:0ebe6f55caee 52 float knob1, knob2, knob3, knob4;
csharer 0:0ebe6f55caee 53
csharer 0:0ebe6f55caee 54 //Joystick
csharer 0:0ebe6f55caee 55 Joystick jstick(POTV, POTH);
csharer 0:0ebe6f55caee 56 float jstick_h, jstick_v;
britneyd 6:74cc716a4ae3 57 float theta;
britneyd 6:74cc716a4ae3 58 float dis;
britneyd 6:74cc716a4ae3 59 float waypoints[100];
britneyd 6:74cc716a4ae3 60 float theta_send;
britneyd 6:74cc716a4ae3 61 float dis_send;
britneyd 6:74cc716a4ae3 62 int sending_index = 0;
britneyd 6:74cc716a4ae3 63 int sending = 0;
britneyd 6:74cc716a4ae3 64 int index = 0;
csharer 0:0ebe6f55caee 65
csharer 0:0ebe6f55caee 66 //MRF24J40
csharer 0:0ebe6f55caee 67 PinName mosi(SDI);
csharer 0:0ebe6f55caee 68 PinName miso(SDO);
csharer 0:0ebe6f55caee 69 PinName sck(SCK);
csharer 0:0ebe6f55caee 70 PinName cs(CS);
csharer 0:0ebe6f55caee 71 PinName reset(RESET);
csharer 0:0ebe6f55caee 72 // RF tranceiver
csharer 0:0ebe6f55caee 73 MRF24J40 mrf(mosi, miso, sck, cs, reset);
csharer 0:0ebe6f55caee 74
csharer 0:0ebe6f55caee 75 //Button
csharer 0:0ebe6f55caee 76 DigitalIn Button(BUTTON1);
britneyd 6:74cc716a4ae3 77 volatile bool button;
csharer 0:0ebe6f55caee 78
csharer 0:0ebe6f55caee 79 // LEDs
csharer 0:0ebe6f55caee 80 DigitalOut led1(LED1);
csharer 0:0ebe6f55caee 81 DigitalOut led2(LED2);
csharer 0:0ebe6f55caee 82 DigitalOut led3(LED3);
csharer 0:0ebe6f55caee 83 DigitalOut led4(LED4);
csharer 0:0ebe6f55caee 84
csharer 0:0ebe6f55caee 85 // Timer
csharer 0:0ebe6f55caee 86 Timer timer;
csharer 0:0ebe6f55caee 87
csharer 0:0ebe6f55caee 88 // Serial port for showing RX data.
csharer 0:0ebe6f55caee 89 Serial pc(USBTX, USBRX);
csharer 0:0ebe6f55caee 90
csharer 0:0ebe6f55caee 91 // Send / receive buffers.
csharer 0:0ebe6f55caee 92 // IMPORTANT: The MRF24J40 is intended as zigbee tranceiver; it tends
csharer 0:0ebe6f55caee 93 // to reject data that doesn't have the right header. So the first
csharer 0:0ebe6f55caee 94 // 8 bytes in txBuffer look like a valid header. The remaining 120
csharer 0:0ebe6f55caee 95 // bytes can be used for anything you like.
britneyd 6:74cc716a4ae3 96 char txBuffer[RF_BUFLEN];
britneyd 6:74cc716a4ae3 97 char rxBuffer[RF_BUFLEN];
csharer 0:0ebe6f55caee 98 int rxLen;
csharer 0:0ebe6f55caee 99
csharer 0:0ebe6f55caee 100 //***************** Do not change these methods (please) *****************//
csharer 0:0ebe6f55caee 101 /**
csharer 0:0ebe6f55caee 102 * Receive data from the MRF24J40.
csharer 0:0ebe6f55caee 103 *
csharer 0:0ebe6f55caee 104 * @param data A pointer to a char array to hold the data
csharer 0:0ebe6f55caee 105 * @param maxLength The max amount of data to read.
csharer 0:0ebe6f55caee 106 */
csharer 0:0ebe6f55caee 107 int rf_receive(char *data, uint8_t maxLength)
csharer 0:0ebe6f55caee 108 {
csharer 0:0ebe6f55caee 109 uint8_t len = mrf.Receive((uint8_t *)data, maxLength);
csharer 0:0ebe6f55caee 110 uint8_t header[8]= {1, 8, 0, 0xA1, 0xB2, 0xC3, 0xD4, 0x00};
csharer 0:0ebe6f55caee 111
csharer 0:0ebe6f55caee 112 if(len > 10) {
csharer 0:0ebe6f55caee 113 //Remove the header and footer of the message
csharer 0:0ebe6f55caee 114 for(uint8_t i = 0; i < len-2; i++) {
csharer 0:0ebe6f55caee 115 if(i<8) {
csharer 0:0ebe6f55caee 116 //Make sure our header is valid first
csharer 0:0ebe6f55caee 117 if(data[i] != header[i])
csharer 0:0ebe6f55caee 118 return 0;
csharer 0:0ebe6f55caee 119 } else {
csharer 0:0ebe6f55caee 120 data[i-8] = data[i];
csharer 0:0ebe6f55caee 121 }
csharer 0:0ebe6f55caee 122 }
csharer 0:0ebe6f55caee 123 //pc.printf("Received: %s length:%d\r\n", data, ((int)len)-10);
csharer 0:0ebe6f55caee 124 }
csharer 0:0ebe6f55caee 125 return ((int)len)-10;
csharer 0:0ebe6f55caee 126 }
csharer 0:0ebe6f55caee 127
csharer 0:0ebe6f55caee 128 /**
csharer 0:0ebe6f55caee 129 * Send data to another MRF24J40.
csharer 0:0ebe6f55caee 130 *
csharer 0:0ebe6f55caee 131 * @param data The string to send
csharer 0:0ebe6f55caee 132 * @param maxLength The length of the data to send.
csharer 0:0ebe6f55caee 133 * If you are sending a null-terminated string you can pass strlen(data)+1
csharer 0:0ebe6f55caee 134 */
csharer 0:0ebe6f55caee 135 void rf_send(char *data, uint8_t len)
csharer 0:0ebe6f55caee 136 {
csharer 0:0ebe6f55caee 137 //We need to prepend the message with a valid ZigBee header
csharer 0:0ebe6f55caee 138 uint8_t header[8]= {1, 8, 0, 0xA1, 0xB2, 0xC3, 0xD4, 0x00};
csharer 0:0ebe6f55caee 139 uint8_t *send_buf = (uint8_t *) malloc( sizeof(uint8_t) * (len+8) );
csharer 0:0ebe6f55caee 140
csharer 0:0ebe6f55caee 141 for(uint8_t i = 0; i < len+8; i++) {
csharer 0:0ebe6f55caee 142 //prepend the 8-byte header
csharer 0:0ebe6f55caee 143 send_buf[i] = (i<8) ? header[i] : data[i-8];
csharer 0:0ebe6f55caee 144 }
csharer 0:0ebe6f55caee 145 //pc.printf("Sent: %s\r\n", send_buf+8);
csharer 0:0ebe6f55caee 146
csharer 0:0ebe6f55caee 147 mrf.Send(send_buf, len+8);
britneyd 6:74cc716a4ae3 148 //mrf.Send((uint8_t*)data, len);
britneyd 6:74cc716a4ae3 149 //pc.printf("len+8: %d\r\n", len + 8);
csharer 0:0ebe6f55caee 150 free(send_buf);
csharer 0:0ebe6f55caee 151 }
csharer 0:0ebe6f55caee 152 //***************** You can start coding here *****************//
csharer 0:0ebe6f55caee 153
csharer 1:98c414bbfe8a 154 //Returns true if c is a letter (upper or lower case), false otherwise
csharer 0:0ebe6f55caee 155 bool isLetter(char c) {
csharer 1:98c414bbfe8a 156
britneyd 6:74cc716a4ae3 157 if(((c>64)&&(c<91))||(c>96)&&(c<123)){
britneyd 6:74cc716a4ae3 158 return true;
britneyd 6:74cc716a4ae3 159 }
csharer 1:98c414bbfe8a 160
csharer 0:0ebe6f55caee 161 return false;
csharer 0:0ebe6f55caee 162 }
csharer 0:0ebe6f55caee 163
csharer 1:98c414bbfe8a 164 //Returns true if c is a number character (0-9), false otherwise
csharer 0:0ebe6f55caee 165 bool isNumber(char c) {
csharer 1:98c414bbfe8a 166
britneyd 6:74cc716a4ae3 167 if((c>47)&&(c<58)){
britneyd 6:74cc716a4ae3 168 return true;
britneyd 6:74cc716a4ae3 169 }
csharer 1:98c414bbfe8a 170
csharer 0:0ebe6f55caee 171 return false;
csharer 0:0ebe6f55caee 172 }
csharer 0:0ebe6f55caee 173
csharer 0:0ebe6f55caee 174 //Pulls data out of rxBuffer and updates global variables accordingly
csharer 1:98c414bbfe8a 175 //Len is the length of the rxBuffer we are going to scan
csharer 0:0ebe6f55caee 176 void communication_protocal(int len)
csharer 0:0ebe6f55caee 177 {
csharer 0:0ebe6f55caee 178 bool found_name = false;
csharer 0:0ebe6f55caee 179 bool found_num = false;
csharer 0:0ebe6f55caee 180 bool complete_name = false;
csharer 0:0ebe6f55caee 181 bool complete_num = false;
csharer 0:0ebe6f55caee 182 uint8_t name_start = NONE; uint8_t name_end = NONE;
csharer 0:0ebe6f55caee 183 uint8_t num_start = NONE; uint8_t num_end = NONE;
csharer 0:0ebe6f55caee 184
csharer 0:0ebe6f55caee 185 //Loop through all charaters in rxBuffer
csharer 0:0ebe6f55caee 186 for(uint8_t i = 0; i <= rxLen; i++) {
csharer 0:0ebe6f55caee 187 char c = rxBuffer[i];
csharer 0:0ebe6f55caee 188 //pc.printf("Indexed char '%c'\r\n", c);
csharer 0:0ebe6f55caee 189
csharer 1:98c414bbfe8a 190 //Is it the start of a name? (Check if its a letter)
csharer 0:0ebe6f55caee 191 if(isLetter(c) & name_start==NONE) { //if a num
csharer 0:0ebe6f55caee 192 //If We havent found a name yet, this is start of a name
csharer 0:0ebe6f55caee 193 if(found_name == false) {
csharer 0:0ebe6f55caee 194 //pc.printf("found name start at: '%c'\r\n", c);
csharer 0:0ebe6f55caee 195 name_start = i;
csharer 0:0ebe6f55caee 196 found_name = true;
csharer 0:0ebe6f55caee 197 }
csharer 0:0ebe6f55caee 198 }
csharer 0:0ebe6f55caee 199 //Is is a 'end of name' charater? Check for ' ', ':', '-'
csharer 0:0ebe6f55caee 200 else if(((c == ' ') | (c == ':') | (c == '-')) & found_name & !complete_name) {// found end name character
csharer 0:0ebe6f55caee 201 if(found_name) {
csharer 0:0ebe6f55caee 202 complete_name = true;
csharer 0:0ebe6f55caee 203 name_end = i;
csharer 0:0ebe6f55caee 204 //pc.printf("found end of name at: '%c'\r\n", txBuffer[name_end]);
csharer 0:0ebe6f55caee 205 }
csharer 0:0ebe6f55caee 206 }
csharer 0:0ebe6f55caee 207
csharer 0:0ebe6f55caee 208 //Is it a 'start of a number' charater? Check if its a number, or '-', or a '.'
csharer 0:0ebe6f55caee 209 else if( (isNumber(c) | (c=='-') | (c=='.')) & complete_name & num_start==NONE) {
csharer 0:0ebe6f55caee 210 if(found_num == false) {
csharer 0:0ebe6f55caee 211 //pc.printf("found num start at: '%c'\r\n",c);
csharer 0:0ebe6f55caee 212 num_start = i;
csharer 0:0ebe6f55caee 213 found_num = true;
csharer 0:0ebe6f55caee 214 }
csharer 0:0ebe6f55caee 215 }
csharer 0:0ebe6f55caee 216 //Is it a 'end of number' character? Check if its a ' ', ':', '-', or a letter
csharer 0:0ebe6f55caee 217 else if( (((c==' ')|(c==':')|(c=='-')) | isLetter(c)) & found_num & complete_name) {
csharer 0:0ebe6f55caee 218 if(found_num) {
csharer 0:0ebe6f55caee 219 complete_num = true;
csharer 0:0ebe6f55caee 220 num_end = i;
csharer 0:0ebe6f55caee 221 //pc.printf("found end of num at: '%c' \r\n", txBuffer[num_end]);
csharer 0:0ebe6f55caee 222 }
csharer 0:0ebe6f55caee 223 }
csharer 0:0ebe6f55caee 224
csharer 0:0ebe6f55caee 225 //If we have a complete name AND number value (ie. start and end of each != NONE)
csharer 0:0ebe6f55caee 226 if(found_name & found_num & complete_name & complete_num) {
csharer 0:0ebe6f55caee 227 //pc.printf("Found MATCH\r\n");
csharer 0:0ebe6f55caee 228 //Reset flags
csharer 0:0ebe6f55caee 229 found_name = false;
csharer 0:0ebe6f55caee 230 found_num = false;
csharer 0:0ebe6f55caee 231 complete_name = false;
csharer 0:0ebe6f55caee 232 complete_num = false;
csharer 0:0ebe6f55caee 233
csharer 0:0ebe6f55caee 234 //Set name
csharer 0:0ebe6f55caee 235 uint8_t nameLen = uint8_t((name_end-name_start) + 1);
csharer 0:0ebe6f55caee 236 char * name[nameLen];
csharer 0:0ebe6f55caee 237 *name = &rxBuffer[name_start];
csharer 0:0ebe6f55caee 238 rxBuffer[name_end] = '\0';
csharer 0:0ebe6f55caee 239
csharer 0:0ebe6f55caee 240 //Set num
csharer 0:0ebe6f55caee 241 uint8_t numLen = uint8_t((num_end-num_start) + 1);
csharer 0:0ebe6f55caee 242 char * num[numLen];
csharer 0:0ebe6f55caee 243 *num = &rxBuffer[num_start];
csharer 0:0ebe6f55caee 244 rxBuffer[num_end] = '\0';
csharer 0:0ebe6f55caee 245
csharer 1:98c414bbfe8a 246 //Now that we have isolated a name and its number value
csharer 1:98c414bbfe8a 247 //we want to set the corresponding value to this number.
csharer 1:98c414bbfe8a 248 //Ex: if name is 'Knob4' and num is '0.34', we want to the the
csharer 1:98c414bbfe8a 249 // variable name knob4 to the value 0.34.
csharer 1:98c414bbfe8a 250 //Do this for all variable names in COMMUNICATION_FORMAT
csharer 1:98c414bbfe8a 251 //HINT: look up strcmp, and atof
britneyd 6:74cc716a4ae3 252 if(strcmp(*name,"Knob1")==0){
britneyd 6:74cc716a4ae3 253 knob1 = atof(*num);
britneyd 6:74cc716a4ae3 254 }
britneyd 6:74cc716a4ae3 255 else if(strcmp(*name,"Knob2") == 0){
britneyd 6:74cc716a4ae3 256 knob2 = atof(*num);
britneyd 6:74cc716a4ae3 257 }
britneyd 6:74cc716a4ae3 258 else if(strcmp(*name,"Knob3") == 0){
britneyd 6:74cc716a4ae3 259 knob3 = atof(*num);
britneyd 6:74cc716a4ae3 260 }
britneyd 6:74cc716a4ae3 261 else if(strcmp(*name,"Knob4") == 0){
britneyd 6:74cc716a4ae3 262 knob4 = atof(*num);
britneyd 6:74cc716a4ae3 263 }
britneyd 6:74cc716a4ae3 264 else if(strcmp(*name,"Jstick_h") == 0){
britneyd 6:74cc716a4ae3 265 jstick_h = atof(*num);
britneyd 6:74cc716a4ae3 266 }
britneyd 6:74cc716a4ae3 267 else if(strcmp(*name,"Jstick_v") == 0){
britneyd 6:74cc716a4ae3 268 jstick_v = atof(*num);
britneyd 6:74cc716a4ae3 269 }
britneyd 6:74cc716a4ae3 270 else if(strcmp(*name,"Button") == 0){
britneyd 6:74cc716a4ae3 271 button = atof(*num);
britneyd 6:74cc716a4ae3 272 }
britneyd 6:74cc716a4ae3 273 else if(strcmp(*name,"Theta") == 0){
britneyd 6:74cc716a4ae3 274 theta = atof(*num);
britneyd 6:74cc716a4ae3 275 }
britneyd 6:74cc716a4ae3 276 else if(strcmp(*name,"Distance") == 0){
britneyd 6:74cc716a4ae3 277 dis = atof(*num);
britneyd 6:74cc716a4ae3 278 }
csharer 0:0ebe6f55caee 279
csharer 0:0ebe6f55caee 280 //Reset flags
csharer 0:0ebe6f55caee 281 name_start = NONE;
csharer 0:0ebe6f55caee 282 name_end = NONE;
csharer 0:0ebe6f55caee 283 num_start = NONE;
csharer 0:0ebe6f55caee 284 num_end = NONE;
csharer 0:0ebe6f55caee 285 }
csharer 0:0ebe6f55caee 286 }
csharer 0:0ebe6f55caee 287 }
csharer 0:0ebe6f55caee 288
britneyd 6:74cc716a4ae3 289 void serial_getchar() {
britneyd 6:74cc716a4ae3 290 char ch = pc.getc();
britneyd 6:74cc716a4ae3 291 //pc.printf("Got character: %c\r\n", ch);
britneyd 6:74cc716a4ae3 292 if (ch == '\n' || ch == '\r') {
britneyd 6:74cc716a4ae3 293 receivedSerialData = 1;
britneyd 6:74cc716a4ae3 294 serialBuffer[serialBufferIndex] = 0;
britneyd 6:74cc716a4ae3 295 serialBufferIndex = 0;
britneyd 6:74cc716a4ae3 296 pc.printf("Got serial string: %s\r\n", serialBuffer);
britneyd 6:74cc716a4ae3 297 } else {
britneyd 6:74cc716a4ae3 298 serialBuffer[serialBufferIndex] = ch;
britneyd 6:74cc716a4ae3 299 serialBufferIndex++;
britneyd 6:74cc716a4ae3 300 }
britneyd 6:74cc716a4ae3 301 }
britneyd 6:74cc716a4ae3 302
britneyd 6:74cc716a4ae3 303 void reading_input(void)
britneyd 6:74cc716a4ae3 304 {
britneyd 6:74cc716a4ae3 305 if (receivedSerialData) {
britneyd 6:74cc716a4ae3 306 receivedSerialData = 0;
britneyd 6:74cc716a4ae3 307 //button = 1;
britneyd 6:74cc716a4ae3 308 sscanf(serialBuffer, "%f %f", &theta, &dis);
britneyd 6:74cc716a4ae3 309 pc.printf("Scanned in theta: %f\r\n", theta);
britneyd 6:74cc716a4ae3 310 pc.printf("Scanned in dis: %f\r\n", dis);
britneyd 6:74cc716a4ae3 311 }
britneyd 6:74cc716a4ae3 312 //pc.scanf("%f %f", &theta, &dis);
britneyd 6:74cc716a4ae3 313 }
britneyd 6:74cc716a4ae3 314
csharer 0:0ebe6f55caee 315 int main (void)
csharer 0:0ebe6f55caee 316 {
csharer 0:0ebe6f55caee 317 //Set the Channel. 0 is default, 15 is max
britneyd 6:74cc716a4ae3 318 uint8_t channel = 9; //channel = (Group# - 1)
csharer 0:0ebe6f55caee 319 mrf.SetChannel(channel);
csharer 0:0ebe6f55caee 320
csharer 0:0ebe6f55caee 321 //Set Baud rate (9600-115200 is ideal)
csharer 0:0ebe6f55caee 322 pc.baud(115200);
csharer 0:0ebe6f55caee 323 pc.printf("\r\n Start! \r\n");
britneyd 6:74cc716a4ae3 324
britneyd 6:74cc716a4ae3 325 memset(txBuffer, 0, RF_BUFLEN);
britneyd 6:74cc716a4ae3 326 memset(rxBuffer, 0, RF_BUFLEN);
britneyd 6:74cc716a4ae3 327
csharer 0:0ebe6f55caee 328
csharer 0:0ebe6f55caee 329 //Start Timer
csharer 0:0ebe6f55caee 330 timer.start();
csharer 0:0ebe6f55caee 331
csharer 1:98c414bbfe8a 332 //Scale Joystick Values, range[-100, 100]
csharer 1:98c414bbfe8a 333 jstick.setScale(-100, 100);
britneyd 6:74cc716a4ae3 334
britneyd 6:74cc716a4ae3 335
britneyd 6:74cc716a4ae3 336 pc.attach(&serial_getchar);
britneyd 6:74cc716a4ae3 337
csharer 0:0ebe6f55caee 338 while(1) {
csharer 0:0ebe6f55caee 339 //(1) Read Joystick Values, round to int8_t presision
britneyd 6:74cc716a4ae3 340 jstick_h = jstick.horizontal();
britneyd 6:74cc716a4ae3 341 jstick_v = jstick.vertical();
csharer 0:0ebe6f55caee 342
csharer 0:0ebe6f55caee 343 //(2) Read Pot Values, Scale, and round to precision
britneyd 6:74cc716a4ae3 344 knob1 = (pot1.read() * 100); //rounded to uint8_t
csharer 0:0ebe6f55caee 345 knob2 = (pot2.read() * 100);
britneyd 6:74cc716a4ae3 346 knob3 = (pot3.read() * 100);
britneyd 6:74cc716a4ae3 347 knob4 = (pot4.read() * 100); //rounded to float
britneyd 6:74cc716a4ae3 348
britneyd 6:74cc716a4ae3 349 //pc.printf("H: %0.2f V:%0.2f K1: %0.2f K2: %0.2f K3: %0.2f K4: %0.2f \r\n", jstick.horizontal(), jstick.vertical(), knob1, knob2, knob3, knob4);
britneyd 6:74cc716a4ae3 350
csharer 0:0ebe6f55caee 351 //(3)Read Button Val, Add to buffer
csharer 0:0ebe6f55caee 352 button = !Button.read(); //button is active low
britneyd 6:74cc716a4ae3 353 reading_input();
britneyd 6:74cc716a4ae3 354
britneyd 6:74cc716a4ae3 355 /*if(button==1){
britneyd 6:74cc716a4ae3 356 sending = 1;
britneyd 6:74cc716a4ae3 357 }
britneyd 6:74cc716a4ae3 358 if(index < 50){
britneyd 6:74cc716a4ae3 359 waypoints[2*index] = theta;
britneyd 6:74cc716a4ae3 360 waypoints[2*index+1] = dis;
britneyd 6:74cc716a4ae3 361 pc.printf("Theta is %f\n", theta);
britneyd 6:74cc716a4ae3 362 index++;
britneyd 6:74cc716a4ae3 363 }*/
britneyd 6:74cc716a4ae3 364 //button = 1;
britneyd 6:74cc716a4ae3 365 /*if(i>100){
britneyd 6:74cc716a4ae3 366 reading_input();
britneyd 6:74cc716a4ae3 367 }*/
csharer 0:0ebe6f55caee 368
csharer 0:0ebe6f55caee 369 #ifdef RECEIVE
csharer 0:0ebe6f55caee 370 //RECEIVE DATA: Try to receive some data
britneyd 6:74cc716a4ae3 371 rxLen = rf_receive(rxBuffer, RF_BUFLEN);
csharer 0:0ebe6f55caee 372 if(rxLen > 0) {
csharer 0:0ebe6f55caee 373 //Toggle the Led
csharer 0:0ebe6f55caee 374 led1 = led1^1;
csharer 0:0ebe6f55caee 375
csharer 0:0ebe6f55caee 376 //(4) Process data with our protocal
csharer 0:0ebe6f55caee 377 communication_protocal(rxLen);
csharer 0:0ebe6f55caee 378 //Print values once we recieve and process data
britneyd 6:74cc716a4ae3 379 //pc.printf("Received| ");
britneyd 6:74cc716a4ae3 380 //pc.printf(COMMUNICATION_FORMAT, jstick_h, jstick_v, button);
britneyd 6:74cc716a4ae3 381 //pc.printf("\r\n");
csharer 0:0ebe6f55caee 382 }//main if
csharer 0:0ebe6f55caee 383 #endif
csharer 0:0ebe6f55caee 384
csharer 0:0ebe6f55caee 385 #ifdef SEND
csharer 0:0ebe6f55caee 386 //SEND DATA: Send some data every 1/2 second
britneyd 6:74cc716a4ae3 387 if((timer.read_ms() >= 50)) {
csharer 0:0ebe6f55caee 388 //Reset the timer to 0
csharer 0:0ebe6f55caee 389 timer.reset();
csharer 0:0ebe6f55caee 390 // Toggle LED 2.
csharer 0:0ebe6f55caee 391 led2 = led2^1;
britneyd 6:74cc716a4ae3 392
britneyd 6:74cc716a4ae3 393 /*theta_send = waypoints[2*sending_index];
britneyd 6:74cc716a4ae3 394 dis_send = waypoints[2*sending_index+1];
csharer 0:0ebe6f55caee 395 //(5) Add all values to buffer to be sent
britneyd 6:74cc716a4ae3 396 if((theta_send == 0)&&(dis_send == 0)){
britneyd 6:74cc716a4ae3 397 sending = 0;
britneyd 6:74cc716a4ae3 398 }
britneyd 6:74cc716a4ae3 399 sending_index++;*/
britneyd 6:74cc716a4ae3 400 sprintf(txBuffer, COMMUNICATION_FORMAT, jstick_h, jstick_v, button, theta, dis);
britneyd 6:74cc716a4ae3 401 //button = 0;
britneyd 6:74cc716a4ae3 402 //pc.printf("Theta sent: %f\r\n", theta);
britneyd 6:74cc716a4ae3 403 //pc.printf("Dis sent: %f\r\n", dis);
csharer 0:0ebe6f55caee 404
csharer 0:0ebe6f55caee 405 //(6) Send the buffer
csharer 0:0ebe6f55caee 406 rf_send(txBuffer, strlen(txBuffer) + 1);
britneyd 6:74cc716a4ae3 407 //rf_send(txBuffer, RF_BUFLEN);
britneyd 6:74cc716a4ae3 408 //pc.printf("Sent| %s\r\n", txBuffer);
csharer 0:0ebe6f55caee 409 }
csharer 0:0ebe6f55caee 410 #endif
csharer 0:0ebe6f55caee 411
csharer 0:0ebe6f55caee 412 } //end loop
csharer 0:0ebe6f55caee 413 }//end main