Program to control an accelerometer, motors and a rangefinder using the ScmRTOS ported to mbed. (Work in progress and buggy)

Dependencies:   mbed

Committer:
jberry
Date:
Mon Nov 01 20:39:01 2010 +0000
Revision:
0:9b057566f9ee

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jberry 0:9b057566f9ee 1 #pragma once
jberry 0:9b057566f9ee 2 #ifndef COMMAND_HANDLER_H
jberry 0:9b057566f9ee 3 #define COMMAND_HANDLER_H
jberry 0:9b057566f9ee 4 #include <messages.h>
jberry 0:9b057566f9ee 5 #include <processes.h>
jberry 0:9b057566f9ee 6
jberry 0:9b057566f9ee 7 //DigitalOut led2(LED2);
jberry 0:9b057566f9ee 8 extern BusOut leds;
jberry 0:9b057566f9ee 9 template<> OS_PROCESS void Command_handler::Exec() //serial stream handling process
jberry 0:9b057566f9ee 10 {
jberry 0:9b057566f9ee 11 //led2 = 0;
jberry 0:9b057566f9ee 12 char RX_Command[100] = "";
jberry 0:9b057566f9ee 13 RX_Command[99] = '\0';
jberry 0:9b057566f9ee 14
jberry 0:9b057566f9ee 15 for(;;)
jberry 0:9b057566f9ee 16 {
jberry 0:9b057566f9ee 17
jberry 0:9b057566f9ee 18 //RX_channel.pop(temp);
jberry 0:9b057566f9ee 19 for(byte i = 0; i<100; i++)
jberry 0:9b057566f9ee 20 {
jberry 0:9b057566f9ee 21 RX_channel.pop(RX_Command[i]);
jberry 0:9b057566f9ee 22 leds = 0x4;
jberry 0:9b057566f9ee 23 if(i == 99)
jberry 0:9b057566f9ee 24 {
jberry 0:9b057566f9ee 25 RX_Command[i] = '\0';
jberry 0:9b057566f9ee 26 }
jberry 0:9b057566f9ee 27 //pc.putc(RX_Command[i]);
jberry 0:9b057566f9ee 28 if(RX_Command[i] == '\0') //keep popping chars until a delimiter is found
jberry 0:9b057566f9ee 29 break;
jberry 0:9b057566f9ee 30 }
jberry 0:9b057566f9ee 31 //led2 = !led2;
jberry 0:9b057566f9ee 32 TX_channel.write(RX_Command, strlen(RX_Command)+1); //output the command for debugging
jberry 0:9b057566f9ee 33 TX_channel.push('\n');
jberry 0:9b057566f9ee 34 //char temp = 0;
jberry 0:9b057566f9ee 35 //TX_channel.pop(temp);
jberry 0:9b057566f9ee 36 //OUT->putc(temp);
jberry 0:9b057566f9ee 37 //OUT->printf(RX_Command);
jberry 0:9b057566f9ee 38
jberry 0:9b057566f9ee 39 if (strstr(RX_Command,"SER:") != NULL) //check for Serv: in the command - this will indicate that the command is destined for the servo process
jberry 0:9b057566f9ee 40 {
jberry 0:9b057566f9ee 41 SER_channel.write(RX_Command, strlen(RX_Command)+1);
jberry 0:9b057566f9ee 42 //Servo_Command_Event.Signal();
jberry 0:9b057566f9ee 43 }
jberry 0:9b057566f9ee 44
jberry 0:9b057566f9ee 45 else if (strstr(RX_Command,"PIN") != NULL) //check for PING in the command - this will indicate that the command is destined for the PING process
jberry 0:9b057566f9ee 46 {
jberry 0:9b057566f9ee 47
jberry 0:9b057566f9ee 48 PING_MESSAGE = 0;
jberry 0:9b057566f9ee 49 PING_MESSAGE.send();
jberry 0:9b057566f9ee 50 }
jberry 0:9b057566f9ee 51
jberry 0:9b057566f9ee 52 else if (strstr(RX_Command,"PIC") != NULL) //check for PING in the command - this will indicate that the command is destined for the PING process
jberry 0:9b057566f9ee 53 {
jberry 0:9b057566f9ee 54
jberry 0:9b057566f9ee 55 PING_MESSAGE = 1;
jberry 0:9b057566f9ee 56 PING_MESSAGE.send();
jberry 0:9b057566f9ee 57 }
jberry 0:9b057566f9ee 58
jberry 0:9b057566f9ee 59 else if (strstr(RX_Command, "MOT:") != NULL) //check to see if incoming motor control command
jberry 0:9b057566f9ee 60 {
jberry 0:9b057566f9ee 61 MOT_channel.write(RX_Command, strlen(RX_Command)+1);
jberry 0:9b057566f9ee 62
jberry 0:9b057566f9ee 63 }
jberry 0:9b057566f9ee 64 else if (strstr(RX_Command, "MO2:") != NULL) //this command will deal with both motors
jberry 0:9b057566f9ee 65 {
jberry 0:9b057566f9ee 66 MOT_channel.write(RX_Command, strlen(RX_Command)+1);
jberry 0:9b057566f9ee 67
jberry 0:9b057566f9ee 68 }
jberry 0:9b057566f9ee 69
jberry 0:9b057566f9ee 70 else if (strstr(RX_Command, "ACR") != NULL) //check to see if incoming motor control command
jberry 0:9b057566f9ee 71 { //OS::message<byte> ACCELEROMETER_MESSAGE; //if message is a zero, then return acceleration once, if a 1 then continually return acceleration data
jberry 0:9b057566f9ee 72
jberry 0:9b057566f9ee 73 ACCELEROMETER_MESSAGE = 1;
jberry 0:9b057566f9ee 74 ACCELEROMETER_MESSAGE.send(); //send the message
jberry 0:9b057566f9ee 75
jberry 0:9b057566f9ee 76 }
jberry 0:9b057566f9ee 77 else if (strstr(RX_Command, "ACC") != NULL) //check to see if incoming motor control command
jberry 0:9b057566f9ee 78 { //OS::message<byte> ACCELEROMETER_Message; //if message is a zero, then return acceleration once, if a 1 then continually return acceleration data
jberry 0:9b057566f9ee 79
jberry 0:9b057566f9ee 80 ACCELEROMETER_MESSAGE = 0;
jberry 0:9b057566f9ee 81 ACCELEROMETER_MESSAGE.send(); //send the message
jberry 0:9b057566f9ee 82
jberry 0:9b057566f9ee 83 }
jberry 0:9b057566f9ee 84 leds = 0x4;
jberry 0:9b057566f9ee 85 }
jberry 0:9b057566f9ee 86
jberry 0:9b057566f9ee 87 }
jberry 0:9b057566f9ee 88
jberry 0:9b057566f9ee 89
jberry 0:9b057566f9ee 90 #endif
jberry 0:9b057566f9ee 91