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
main.cpp@0:fe5850ccdb6f, 2013-02-26 (annotated)
- 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?
User | Revision | Line number | New 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 | } |