Lets you control your mbed from an easy to use GUI. Entire project is on git hub: https://github.com/navin-bhaskar/Controller For usage info follow this link http://navinbhaskar.blogspot.in/2013/02/arduino-controller-3.html

Dependencies:   mbed

Committer:
Navin
Date:
Tue Feb 26 03:45:52 2013 +0000
Revision:
0:fe5850ccdb6f
Child:
1:9d3340bcd863
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Navin 0:fe5850ccdb6f 1 #include "mbed.h"
Navin 0:fe5850ccdb6f 2 #include "TransLayer.h"
Navin 0:fe5850ccdb6f 3 #include "MbedConsole.h"
Navin 0:fe5850ccdb6f 4 #include "MbedPerAccess.h"
Navin 0:fe5850ccdb6f 5
Navin 0:fe5850ccdb6f 6
Navin 0:fe5850ccdb6f 7 Serial pc(USBTX, USBRX);
Navin 0:fe5850ccdb6f 8 /**
Navin 0:fe5850ccdb6f 9 * \fn number(char* buff)
Navin 0:fe5850ccdb6f 10 * \brief This function converts a string into a number.
Navin 0:fe5850ccdb6f 11 * \param[in] buff buffer containg string representation of a number (should be decimal representation).
Navin 0:fe5850ccdb6f 12 * \retrun converted number
Navin 0:fe5850ccdb6f 13 */
Navin 0:fe5850ccdb6f 14
Navin 0:fe5850ccdb6f 15 int number(char *buff)
Navin 0:fe5850ccdb6f 16 {
Navin 0:fe5850ccdb6f 17 int i = strlen(buff);
Navin 0:fe5850ccdb6f 18 int j,temp=0;
Navin 0:fe5850ccdb6f 19
Navin 0:fe5850ccdb6f 20 for(j=0; j<i; j++) {
Navin 0:fe5850ccdb6f 21 if(buff[j] >= '0' && buff[j] <= '9') {
Navin 0:fe5850ccdb6f 22 temp = temp*10;
Navin 0:fe5850ccdb6f 23 temp = temp + buff[j] - '0';
Navin 0:fe5850ccdb6f 24
Navin 0:fe5850ccdb6f 25 }
Navin 0:fe5850ccdb6f 26 }
Navin 0:fe5850ccdb6f 27
Navin 0:fe5850ccdb6f 28 return temp;
Navin 0:fe5850ccdb6f 29 }
Navin 0:fe5850ccdb6f 30 /**
Navin 0:fe5850ccdb6f 31 * \fn pin_control(char* buff, int len)
Navin 0:fe5850ccdb6f 32 * \brief sets or resets a pin
Navin 0:fe5850ccdb6f 33 */
Navin 0:fe5850ccdb6f 34 void pin_control(Console * cons, PerAccess * per, char* buff, int len)
Navin 0:fe5850ccdb6f 35 {
Navin 0:fe5850ccdb6f 36 uint temp = number(buff);
Navin 0:fe5850ccdb6f 37 uint pinno, pinst;
Navin 0:fe5850ccdb6f 38 uint status;
Navin 0:fe5850ccdb6f 39
Navin 0:fe5850ccdb6f 40 if( len < 3) {
Navin 0:fe5850ccdb6f 41 cons->printErr(ERR_INVALID_ARG);
Navin 0:fe5850ccdb6f 42 } else {
Navin 0:fe5850ccdb6f 43 pinst = temp%10; // LSB is pin state
Navin 0:fe5850ccdb6f 44 pinno = temp/10; // rest of it is pin number
Navin 0:fe5850ccdb6f 45 status = per->digitalOut(pinno, pinst);
Navin 0:fe5850ccdb6f 46 cons->printErr(status);
Navin 0:fe5850ccdb6f 47 }
Navin 0:fe5850ccdb6f 48 }
Navin 0:fe5850ccdb6f 49
Navin 0:fe5850ccdb6f 50 /**
Navin 0:fe5850ccdb6f 51 * \fn analog_out(char* buff, int len)
Navin 0:fe5850ccdb6f 52 * \brief Outputs an anolog voltage on a given PWM channel
Navin 0:fe5850ccdb6f 53 */
Navin 0:fe5850ccdb6f 54
Navin 0:fe5850ccdb6f 55 void analog_out(Console * cons, PerAccess * per, char* buff, int len)
Navin 0:fe5850ccdb6f 56 {
Navin 0:fe5850ccdb6f 57 int temp = number(buff);
Navin 0:fe5850ccdb6f 58 int pinno, pinval;
Navin 0:fe5850ccdb6f 59 uint status;
Navin 0:fe5850ccdb6f 60 if( len < 3) {
Navin 0:fe5850ccdb6f 61 cons->printErr(ERR_INVALID_ARG);
Navin 0:fe5850ccdb6f 62 return ;
Navin 0:fe5850ccdb6f 63 }
Navin 0:fe5850ccdb6f 64
Navin 0:fe5850ccdb6f 65 pinno = temp&0xff; // LSB is pin value
Navin 0:fe5850ccdb6f 66 pinval = temp>>8; // MSB is pin no
Navin 0:fe5850ccdb6f 67
Navin 0:fe5850ccdb6f 68 status = per->analogOut(pinno, pinval);
Navin 0:fe5850ccdb6f 69 cons->printErr(status);
Navin 0:fe5850ccdb6f 70 }
Navin 0:fe5850ccdb6f 71
Navin 0:fe5850ccdb6f 72 /**
Navin 0:fe5850ccdb6f 73 * \fn analog_in(char* buff, int len)
Navin 0:fe5850ccdb6f 74 * \brief This function reads an analog volatge on a given channel and prints
Navin 0:fe5850ccdb6f 75 * it over on the serial terminal
Navin 0:fe5850ccdb6f 76 */
Navin 0:fe5850ccdb6f 77
Navin 0:fe5850ccdb6f 78 void analog_in(Console * cons, PerAccess * per, char* buff, int len)
Navin 0:fe5850ccdb6f 79 {
Navin 0:fe5850ccdb6f 80 uint adc_val;
Navin 0:fe5850ccdb6f 81 uint ch=number(buff);
Navin 0:fe5850ccdb6f 82 uint status;
Navin 0:fe5850ccdb6f 83 status = per->analogIn(ch, &adc_val);
Navin 0:fe5850ccdb6f 84 if (status == ERR_SUCCESS) {
Navin 0:fe5850ccdb6f 85 cons->printf("%d\n", adc_val);
Navin 0:fe5850ccdb6f 86 }
Navin 0:fe5850ccdb6f 87 cons->printErr(status);
Navin 0:fe5850ccdb6f 88 }
Navin 0:fe5850ccdb6f 89
Navin 0:fe5850ccdb6f 90 /**
Navin 0:fe5850ccdb6f 91 * \fn read_pin(char* buff, int len)
Navin 0:fe5850ccdb6f 92 * \brief This function reads digital logic level at a specified pin and prints
Navin 0:fe5850ccdb6f 93 * it over serial port prints 1 if high else it prints 0
Navin 0:fe5850ccdb6f 94 */
Navin 0:fe5850ccdb6f 95
Navin 0:fe5850ccdb6f 96 void read_pin(Console * cons, PerAccess * per, char* buff, int len)
Navin 0:fe5850ccdb6f 97 {
Navin 0:fe5850ccdb6f 98 uint read_val;
Navin 0:fe5850ccdb6f 99 uint pin=number(buff);
Navin 0:fe5850ccdb6f 100 uint status;
Navin 0:fe5850ccdb6f 101
Navin 0:fe5850ccdb6f 102 status = per->digitalIn(pin, &read_val);
Navin 0:fe5850ccdb6f 103
Navin 0:fe5850ccdb6f 104 if (status == ERR_SUCCESS) {
Navin 0:fe5850ccdb6f 105 cons->printf("%d\n", read_val);
Navin 0:fe5850ccdb6f 106 }
Navin 0:fe5850ccdb6f 107 cons->printErr(status);
Navin 0:fe5850ccdb6f 108 }
Navin 0:fe5850ccdb6f 109
Navin 0:fe5850ccdb6f 110
Navin 0:fe5850ccdb6f 111 int main(void)
Navin 0:fe5850ccdb6f 112 {
Navin 0:fe5850ccdb6f 113 TransLayer comm_packet;
Navin 0:fe5850ccdb6f 114 MbedConsole cons;
Navin 0:fe5850ccdb6f 115 MbedPerAccess per;
Navin 0:fe5850ccdb6f 116
Navin 0:fe5850ccdb6f 117 Console *transCons;
Navin 0:fe5850ccdb6f 118 PerAccess *transPer;
Navin 0:fe5850ccdb6f 119
Navin 0:fe5850ccdb6f 120 transCons = &cons;
Navin 0:fe5850ccdb6f 121 transPer = &per;
Navin 0:fe5850ccdb6f 122
Navin 0:fe5850ccdb6f 123
Navin 0:fe5850ccdb6f 124 comm_packet.AddService(pin_control, 'P');
Navin 0:fe5850ccdb6f 125 comm_packet.AddService(analog_out, 'A');
Navin 0:fe5850ccdb6f 126 comm_packet.AddService(analog_in, 'I');
Navin 0:fe5850ccdb6f 127 comm_packet.AddService(read_pin, 'R');
Navin 0:fe5850ccdb6f 128 comm_packet.MainLoop(transCons, transPer);
Navin 0:fe5850ccdb6f 129
Navin 0:fe5850ccdb6f 130 while(1);
Navin 0:fe5850ccdb6f 131 }