DAISEN eDES see: http://mbed.org/users/okini3939/notebook/daisen-edes/

Committer:
okini3939
Date:
Fri Jun 08 16:10:50 2012 +0000
Revision:
0:04367044b55e
Child:
1:2a38c9027bd1

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okini3939 0:04367044b55e 1 /**
okini3939 0:04367044b55e 2 * DAISEN eDES 2WD driver for mbed
okini3939 0:04367044b55e 3 * Copyright (c) 2012 Suga
okini3939 0:04367044b55e 4 * Released under the MIT License: http://mbed.org/license/mit
okini3939 0:04367044b55e 5 */
okini3939 0:04367044b55e 6
okini3939 0:04367044b55e 7 /** @file
okini3939 0:04367044b55e 8 * @brief DAISEN eDES 2WD driver for mbed
okini3939 0:04367044b55e 9 */
okini3939 0:04367044b55e 10
okini3939 0:04367044b55e 11 #include "mbed.h"
okini3939 0:04367044b55e 12 #include "eDES2WD.h"
okini3939 0:04367044b55e 13
okini3939 0:04367044b55e 14 I2C i2c(p28, p27);
okini3939 0:04367044b55e 15
okini3939 0:04367044b55e 16 void eDES2WD_reset (int id) {
okini3939 0:04367044b55e 17 char cmd[] = {1, I2C_WCMD_RESET};
okini3939 0:04367044b55e 18 int adrs;
okini3939 0:04367044b55e 19
okini3939 0:04367044b55e 20 if (0 < id){
okini3939 0:04367044b55e 21 adrs = SUB_ADRS + (id - 1) * 2;
okini3939 0:04367044b55e 22 } else {
okini3939 0:04367044b55e 23 adrs = 0;
okini3939 0:04367044b55e 24 }
okini3939 0:04367044b55e 25 i2c.write(adrs, cmd, 2);
okini3939 0:04367044b55e 26 }
okini3939 0:04367044b55e 27
okini3939 0:04367044b55e 28 void eDES2WD_motor (int id, int l_speed, int r_speed) {
okini3939 0:04367044b55e 29 char cmd[] = {3, I2C_WCMD_MOTOR, 0, 0};
okini3939 0:04367044b55e 30 int adrs;
okini3939 0:04367044b55e 31
okini3939 0:04367044b55e 32 cmd[2] = l_speed;
okini3939 0:04367044b55e 33 cmd[3] = r_speed;
okini3939 0:04367044b55e 34 if (0 < id){
okini3939 0:04367044b55e 35 adrs = SUB_ADRS + (id - 1) * 2;
okini3939 0:04367044b55e 36 } else {
okini3939 0:04367044b55e 37 adrs = 0;
okini3939 0:04367044b55e 38 }
okini3939 0:04367044b55e 39 i2c.write(adrs, cmd, 4);
okini3939 0:04367044b55e 40 }
okini3939 0:04367044b55e 41
okini3939 0:04367044b55e 42 void eDES2WD_set_led (int id, int led, int sw) {
okini3939 0:04367044b55e 43 char cmd[] = {3, I2C_WCMD_LED, 0, 0};
okini3939 0:04367044b55e 44 int adrs;
okini3939 0:04367044b55e 45
okini3939 0:04367044b55e 46 cmd[2] = led;
okini3939 0:04367044b55e 47 cmd[3] = sw;
okini3939 0:04367044b55e 48 if (0 < id){
okini3939 0:04367044b55e 49 adrs = SUB_ADRS + (id - 1) * 2;
okini3939 0:04367044b55e 50 } else {
okini3939 0:04367044b55e 51 adrs = 0;
okini3939 0:04367044b55e 52 }
okini3939 0:04367044b55e 53 i2c.write(adrs, cmd, 4);
okini3939 0:04367044b55e 54 }
okini3939 0:04367044b55e 55
okini3939 0:04367044b55e 56 unsigned int eDES2WD_get_sensor(int id, int cn, unsigned int *dat) {
okini3939 0:04367044b55e 57 char cmd[] = {2, I2C_RCMD_SENSOR, 0};
okini3939 0:04367044b55e 58 char recv[MAX_CN];
okini3939 0:04367044b55e 59 unsigned int d;
okini3939 0:04367044b55e 60 int adrs;
okini3939 0:04367044b55e 61 int nmax, n;
okini3939 0:04367044b55e 62
okini3939 0:04367044b55e 63 if (id < 1 || 9 < id) return(0);
okini3939 0:04367044b55e 64 adrs = SUB_ADRS + (id - 1) * 2;
okini3939 0:04367044b55e 65 nmax = cn < MAX_CN ? 2 : MAX_CN * 2 + 2;
okini3939 0:04367044b55e 66
okini3939 0:04367044b55e 67 cmd[2] = cn;
okini3939 0:04367044b55e 68 i2c.write(adrs, cmd, 3);
okini3939 0:04367044b55e 69 i2c.read(adrs | 1, recv, nmax);
okini3939 0:04367044b55e 70 if (nmax == 2){
okini3939 0:04367044b55e 71 d = recv[0] | (recv[1] << 8);
okini3939 0:04367044b55e 72 return d;
okini3939 0:04367044b55e 73 } else {
okini3939 0:04367044b55e 74 for (n = 0; n < MAX_CN; n++){
okini3939 0:04367044b55e 75 d = recv[0] | (recv[1] << 8);
okini3939 0:04367044b55e 76 dat[n] = d;
okini3939 0:04367044b55e 77 }
okini3939 0:04367044b55e 78 // gSUB_LED_G = recv[20];
okini3939 0:04367044b55e 79 // gSUB_LED_R = recv[21];
okini3939 0:04367044b55e 80 }
okini3939 0:04367044b55e 81 return 0;
okini3939 0:04367044b55e 82 }
okini3939 0:04367044b55e 83
okini3939 0:04367044b55e 84 int eDES2WD_get_lat(int id, int cno) {
okini3939 0:04367044b55e 85 char cmd[] = {2, I2C_RCMD_LAT, 0};
okini3939 0:04367044b55e 86 char recv[MAX_CN];
okini3939 0:04367044b55e 87 int adrs;
okini3939 0:04367044b55e 88
okini3939 0:04367044b55e 89 if (id < 1 || 9 < id) return(false);
okini3939 0:04367044b55e 90 if (MAX_CN - 1 < cno) return(false);
okini3939 0:04367044b55e 91 adrs = SUB_ADRS + (id - 1) * 2;
okini3939 0:04367044b55e 92
okini3939 0:04367044b55e 93 cmd[2] = cno;
okini3939 0:04367044b55e 94 i2c.write(adrs, cmd, 3);
okini3939 0:04367044b55e 95 i2c.read(adrs | 1, recv, 1);
okini3939 0:04367044b55e 96 return recv[0];
okini3939 0:04367044b55e 97 }