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:51:46 2013 +0000
Revision:
1:9d3340bcd863
Parent:
0:fe5850ccdb6f
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Navin 1:9d3340bcd863 1 /*
Navin 1:9d3340bcd863 2 * This program is free software; you can redistribute it and/or modify
Navin 1:9d3340bcd863 3 * it under the terms of the GNU General Public License as published by
Navin 1:9d3340bcd863 4 * the Free Software Foundation; either version 2 of the License, or
Navin 1:9d3340bcd863 5 * (at your option) any later version.
Navin 1:9d3340bcd863 6 *
Navin 1:9d3340bcd863 7 * This program is distributed in the hope that it will be useful,
Navin 1:9d3340bcd863 8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Navin 1:9d3340bcd863 9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Navin 1:9d3340bcd863 10 * GNU General Public License for more details.
Navin 1:9d3340bcd863 11 *
Navin 1:9d3340bcd863 12 * You should have received a copy of the GNU General Public License
Navin 1:9d3340bcd863 13 * along with this program; if not, write to the Free Software
Navin 1:9d3340bcd863 14 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
Navin 1:9d3340bcd863 15 * MA 02110-1301, USA.
Navin 1:9d3340bcd863 16 *
Navin 1:9d3340bcd863 17 */
Navin 0:fe5850ccdb6f 18 #include "mbed.h"
Navin 0:fe5850ccdb6f 19 #include "TransLayer.h"
Navin 0:fe5850ccdb6f 20 #include "MbedConsole.h"
Navin 0:fe5850ccdb6f 21 #include "MbedPerAccess.h"
Navin 0:fe5850ccdb6f 22
Navin 1:9d3340bcd863 23 /**
Navin 1:9d3340bcd863 24 * \brief The main entry point of our application.
Navin 1:9d3340bcd863 25 * \author Navin Bhaskar
Navin 1:9d3340bcd863 26 */
Navin 0:fe5850ccdb6f 27
Navin 0:fe5850ccdb6f 28 Serial pc(USBTX, USBRX);
Navin 0:fe5850ccdb6f 29 /**
Navin 0:fe5850ccdb6f 30 * \fn number(char* buff)
Navin 0:fe5850ccdb6f 31 * \brief This function converts a string into a number.
Navin 0:fe5850ccdb6f 32 * \param[in] buff buffer containg string representation of a number (should be decimal representation).
Navin 0:fe5850ccdb6f 33 * \retrun converted number
Navin 0:fe5850ccdb6f 34 */
Navin 0:fe5850ccdb6f 35
Navin 0:fe5850ccdb6f 36 int number(char *buff)
Navin 0:fe5850ccdb6f 37 {
Navin 0:fe5850ccdb6f 38 int i = strlen(buff);
Navin 0:fe5850ccdb6f 39 int j,temp=0;
Navin 0:fe5850ccdb6f 40
Navin 0:fe5850ccdb6f 41 for(j=0; j<i; j++) {
Navin 0:fe5850ccdb6f 42 if(buff[j] >= '0' && buff[j] <= '9') {
Navin 0:fe5850ccdb6f 43 temp = temp*10;
Navin 0:fe5850ccdb6f 44 temp = temp + buff[j] - '0';
Navin 0:fe5850ccdb6f 45
Navin 0:fe5850ccdb6f 46 }
Navin 0:fe5850ccdb6f 47 }
Navin 0:fe5850ccdb6f 48
Navin 0:fe5850ccdb6f 49 return temp;
Navin 0:fe5850ccdb6f 50 }
Navin 0:fe5850ccdb6f 51 /**
Navin 0:fe5850ccdb6f 52 * \fn pin_control(char* buff, int len)
Navin 0:fe5850ccdb6f 53 * \brief sets or resets a pin
Navin 0:fe5850ccdb6f 54 */
Navin 0:fe5850ccdb6f 55 void pin_control(Console * cons, PerAccess * per, char* buff, int len)
Navin 0:fe5850ccdb6f 56 {
Navin 0:fe5850ccdb6f 57 uint temp = number(buff);
Navin 0:fe5850ccdb6f 58 uint pinno, pinst;
Navin 0:fe5850ccdb6f 59 uint status;
Navin 0:fe5850ccdb6f 60
Navin 0:fe5850ccdb6f 61 if( len < 3) {
Navin 0:fe5850ccdb6f 62 cons->printErr(ERR_INVALID_ARG);
Navin 0:fe5850ccdb6f 63 } else {
Navin 0:fe5850ccdb6f 64 pinst = temp%10; // LSB is pin state
Navin 0:fe5850ccdb6f 65 pinno = temp/10; // rest of it is pin number
Navin 0:fe5850ccdb6f 66 status = per->digitalOut(pinno, pinst);
Navin 0:fe5850ccdb6f 67 cons->printErr(status);
Navin 0:fe5850ccdb6f 68 }
Navin 0:fe5850ccdb6f 69 }
Navin 0:fe5850ccdb6f 70
Navin 0:fe5850ccdb6f 71 /**
Navin 0:fe5850ccdb6f 72 * \fn analog_out(char* buff, int len)
Navin 0:fe5850ccdb6f 73 * \brief Outputs an anolog voltage on a given PWM channel
Navin 0:fe5850ccdb6f 74 */
Navin 0:fe5850ccdb6f 75
Navin 0:fe5850ccdb6f 76 void analog_out(Console * cons, PerAccess * per, char* buff, int len)
Navin 0:fe5850ccdb6f 77 {
Navin 0:fe5850ccdb6f 78 int temp = number(buff);
Navin 0:fe5850ccdb6f 79 int pinno, pinval;
Navin 0:fe5850ccdb6f 80 uint status;
Navin 0:fe5850ccdb6f 81 if( len < 3) {
Navin 0:fe5850ccdb6f 82 cons->printErr(ERR_INVALID_ARG);
Navin 0:fe5850ccdb6f 83 return ;
Navin 0:fe5850ccdb6f 84 }
Navin 0:fe5850ccdb6f 85
Navin 0:fe5850ccdb6f 86 pinno = temp&0xff; // LSB is pin value
Navin 0:fe5850ccdb6f 87 pinval = temp>>8; // MSB is pin no
Navin 0:fe5850ccdb6f 88
Navin 0:fe5850ccdb6f 89 status = per->analogOut(pinno, pinval);
Navin 0:fe5850ccdb6f 90 cons->printErr(status);
Navin 0:fe5850ccdb6f 91 }
Navin 0:fe5850ccdb6f 92
Navin 0:fe5850ccdb6f 93 /**
Navin 0:fe5850ccdb6f 94 * \fn analog_in(char* buff, int len)
Navin 0:fe5850ccdb6f 95 * \brief This function reads an analog volatge on a given channel and prints
Navin 0:fe5850ccdb6f 96 * it over on the serial terminal
Navin 0:fe5850ccdb6f 97 */
Navin 0:fe5850ccdb6f 98
Navin 0:fe5850ccdb6f 99 void analog_in(Console * cons, PerAccess * per, char* buff, int len)
Navin 0:fe5850ccdb6f 100 {
Navin 0:fe5850ccdb6f 101 uint adc_val;
Navin 0:fe5850ccdb6f 102 uint ch=number(buff);
Navin 0:fe5850ccdb6f 103 uint status;
Navin 0:fe5850ccdb6f 104 status = per->analogIn(ch, &adc_val);
Navin 0:fe5850ccdb6f 105 if (status == ERR_SUCCESS) {
Navin 0:fe5850ccdb6f 106 cons->printf("%d\n", adc_val);
Navin 0:fe5850ccdb6f 107 }
Navin 0:fe5850ccdb6f 108 cons->printErr(status);
Navin 0:fe5850ccdb6f 109 }
Navin 0:fe5850ccdb6f 110
Navin 0:fe5850ccdb6f 111 /**
Navin 0:fe5850ccdb6f 112 * \fn read_pin(char* buff, int len)
Navin 0:fe5850ccdb6f 113 * \brief This function reads digital logic level at a specified pin and prints
Navin 0:fe5850ccdb6f 114 * it over serial port prints 1 if high else it prints 0
Navin 0:fe5850ccdb6f 115 */
Navin 0:fe5850ccdb6f 116
Navin 0:fe5850ccdb6f 117 void read_pin(Console * cons, PerAccess * per, char* buff, int len)
Navin 0:fe5850ccdb6f 118 {
Navin 0:fe5850ccdb6f 119 uint read_val;
Navin 0:fe5850ccdb6f 120 uint pin=number(buff);
Navin 0:fe5850ccdb6f 121 uint status;
Navin 0:fe5850ccdb6f 122
Navin 0:fe5850ccdb6f 123 status = per->digitalIn(pin, &read_val);
Navin 0:fe5850ccdb6f 124
Navin 0:fe5850ccdb6f 125 if (status == ERR_SUCCESS) {
Navin 0:fe5850ccdb6f 126 cons->printf("%d\n", read_val);
Navin 0:fe5850ccdb6f 127 }
Navin 0:fe5850ccdb6f 128 cons->printErr(status);
Navin 0:fe5850ccdb6f 129 }
Navin 0:fe5850ccdb6f 130
Navin 0:fe5850ccdb6f 131
Navin 0:fe5850ccdb6f 132 int main(void)
Navin 0:fe5850ccdb6f 133 {
Navin 0:fe5850ccdb6f 134 TransLayer comm_packet;
Navin 0:fe5850ccdb6f 135 MbedConsole cons;
Navin 0:fe5850ccdb6f 136 MbedPerAccess per;
Navin 0:fe5850ccdb6f 137
Navin 0:fe5850ccdb6f 138 Console *transCons;
Navin 0:fe5850ccdb6f 139 PerAccess *transPer;
Navin 0:fe5850ccdb6f 140
Navin 0:fe5850ccdb6f 141 transCons = &cons;
Navin 0:fe5850ccdb6f 142 transPer = &per;
Navin 0:fe5850ccdb6f 143
Navin 0:fe5850ccdb6f 144
Navin 0:fe5850ccdb6f 145 comm_packet.AddService(pin_control, 'P');
Navin 0:fe5850ccdb6f 146 comm_packet.AddService(analog_out, 'A');
Navin 0:fe5850ccdb6f 147 comm_packet.AddService(analog_in, 'I');
Navin 0:fe5850ccdb6f 148 comm_packet.AddService(read_pin, 'R');
Navin 0:fe5850ccdb6f 149 comm_packet.MainLoop(transCons, transPer);
Navin 0:fe5850ccdb6f 150
Navin 0:fe5850ccdb6f 151 while(1);
Navin 0:fe5850ccdb6f 152 }