DRV8830/TI Motor Driver sample program.\\ This program can control two motors.

Dependencies:   DRV8830 mbed

Revision:
3:db817fb05ba7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mon.cpp	Sat Jul 12 11:55:37 2014 +0000
@@ -0,0 +1,233 @@
+/*
+ * mbed Application program
+ *
+ *  Copyright (c) 2010-2014 Kenji Arai / JH1PJL
+ *  http://www.page.sannet.ne.jp/kenjia/index.html
+ *  http://mbed.org/users/kenjiArai/
+ *      Created:  May  	    15th, 2010
+ *		Spareted: June		25th, 2014		mon() & mon_hw()
+ *		Ported:   July		12th, 2014		from L152RE
+ *      Revised:  July      12th, 2014
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+ * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+ * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+//  Include ---------------------------------------------------------------------------------------
+#include "mbed.h"
+
+//  Object ----------------------------------------------------------------------------------------
+Serial pc(SERIAL_TX, SERIAL_RX);
+
+//  Definition ------------------------------------------------------------------------------------
+#define BAUD(x)         		pc.baud(x)
+#define GETC(x)         		pc.getc(x)
+#define PUTC(x)					pc.putc(x)
+#define PRINTF(...)     		pc.printf(__VA_ARGS__)
+#define READABLE(x)     		pc.readable(x)
+
+//  RAM -------------------------------------------------------------------------------------------
+char linebuf[64];
+int buf_size = sizeof(linebuf);
+
+//  ROM / Constant data ---------------------------------------------------------------------------
+static char *const mon_msg = "Monitor for mbed system, created on "__DATE__"";
+
+//  Function prototypes ---------------------------------------------------------------------------
+extern void mon_hw(void);
+extern int read_sw (void);
+extern void baro_read (void);
+
+//-------------------------------------------------------------------------------------------------
+//  Control Program
+//-------------------------------------------------------------------------------------------------
+//  Put \r\n
+void put_rn ( void ){	PUTC('\r');		PUTC('\n');}
+
+//  Put \r
+void put_r ( void ){	PUTC('\r');}
+
+// Put ", "
+void put_lin ( void ){	PRINTF(", ");}
+
+// Put space n
+void put_spc( uint8_t n){	for(;n > 0; n--){ PUTC(' '); }}
+
+//  Change string -> integer
+int xatoi (char **str, unsigned long *res){
+unsigned long val;
+unsigned char c, radix, s = 0;
+
+    while ((c = **str) == ' ') (*str)++;
+    if (c == '-') {
+        s = 1;
+        c = *(++(*str));
+    }
+    if (c == '0') {
+        c = *(++(*str));
+        if (c <= ' ') {	*res = 0;	return 1; }
+        if (c == 'x') {
+            radix = 16;
+            c = *(++(*str));
+        } else {
+            if (c == 'b') {
+                radix = 2;
+                c = *(++(*str));
+            } else {
+                if ((c >= '0')&&(c <= '9')){	radix = 8;
+                }	else {   return 0;}
+            }
+        }
+    } else {
+        if ((c < '1')||(c > '9')){	return 0;}
+        radix = 10;
+    }
+    val = 0;
+    while (c > ' ') {
+        if (c >= 'a') c -= 0x20;
+        c -= '0';
+        if (c >= 17) {
+            c -= 7;
+            if (c <= 9) return 0;
+        }
+        if (c >= radix) return 0;
+        val = val * radix + c;
+        c = *(++(*str));
+    }
+    if (s) val = -val;
+    *res = val;
+    return 1;
+}
+
+//-------------------------------------------------------------------------------------------------
+//	Monitor
+//-------------------------------------------------------------------------------------------------
+//  Help Massage
+void msg_hlp (void){
+    PRINTF(mon_msg);						put_rn();
+    PRINTF("s - Show USER Button");			put_rn();
+    PRINTF("t - Check and set RTC");		put_rn();
+    PRINTF("x - Goto HW monitor");			put_rn();
+    PRINTF("q - Return to main");			put_rn();
+}
+
+//  Get key input data
+void get_line (char *buff, int len){
+char c;
+int idx = 0;
+
+    for (;;) {
+        c = GETC();
+        //    Added by Kenji Arai / JH1PJL   May 9th, 2010
+        if (c == '\r') {
+            buff[idx++] = c;
+            break;
+        }
+        if ((c == '\b') && idx) {
+            idx--;
+            PUTC(c);
+            PUTC(' ');
+            PUTC(c);
+        }
+        if (((uint8_t)c >= ' ') && (idx < len - 1)) {
+            buff[idx++] = c;
+            PUTC(c);
+        }
+    }
+    buff[idx] = 0;
+    PUTC('\n');
+}
+
+// RTC related subroutines
+void chk_and_set_time(char *ptr){
+unsigned long p1;
+struct tm t;
+time_t seconds;
+char buf[40];
+
+	if (xatoi(&ptr, &p1)){
+		t.tm_year		= (uint8_t)p1 + 100;
+		PRINTF("Year:%d ",p1);
+		xatoi( &ptr, &p1 );
+		t.tm_mon		= (uint8_t)p1 - 1;
+		PRINTF("Month:%d ",p1);
+		xatoi( &ptr, &p1 );
+		t.tm_mday		= (uint8_t)p1;
+		PRINTF("Day:%d ",p1);
+		xatoi( &ptr, &p1 );
+		t.tm_hour		= (uint8_t)p1;
+		PRINTF("Hour:%d ",p1);
+		xatoi( &ptr, &p1 );
+		t.tm_min    	= (uint8_t)p1;
+		PRINTF("Min:%d ",p1);
+		xatoi( &ptr, &p1 );
+		t.tm_sec 		= (uint8_t)p1;
+		PRINTF("Sec: %d \r\n",p1);
+		seconds = mktime(&t);
+		set_time(seconds);
+	}
+	seconds = time(NULL);
+    strftime(buf, 40, "%B %d,'%y, %H:%M:%S", localtime(&seconds));
+    PRINTF("Date: %s\r\n", buf);
+}
+
+// ---------- Program starts here! ---------------------------------------------------------------
+int mon(void) {
+char *ptr;
+
+    BAUD(9600);
+    put_rn();
+    put_rn();
+    PRINTF("%s [Help:'?' key]", mon_msg);
+    put_rn();
+    for (;;) {
+        put_r();
+        PUTC('>');
+        ptr = linebuf;
+        get_line(ptr, sizeof(linebuf));
+        switch (*ptr++) {
+    //---------------------------------------------------------------------------------
+    //  Show switch status
+    //---------------------------------------------------------------------------------
+        case 's' :
+        	put_r();
+		    PRINTF("USER_Button = ");
+		    if (read_sw() == 1) {	PRINTF("ON");
+		    } else {				PRINTF("OFF");
+		    }
+		    put_rn();          
+            break;
+    //---------------------------------------------------------------------------------
+    //  check and set RTC
+    //---------------------------------------------------------------------------------
+        case 't' :
+        	put_r(); 
+            chk_and_set_time(ptr);               
+            break;
+    //---------------------------------------------------------------------------------
+    //  help
+    //---------------------------------------------------------------------------------
+        case '?' :
+        	put_r(); 
+            msg_hlp();                 
+            break;
+    //---------------------------------------------------------------------------------
+    //  Go to special command
+    //---------------------------------------------------------------------------------
+        case 'x' : 
+            mon_hw();
+            PRINTF("->Came back monitor\r\n");            
+            break;
+    //---------------------------------------------------------------------------------
+    //  Go back to main()
+    //---------------------------------------------------------------------------------
+        case 'q' :        // Quit
+            PRINTF("\rReturn to main\r\n");
+            PRINTF("cannot control anymore from here\r\n");
+            return 0;
+        }
+    }
+}