DAISEN eDES see: http://mbed.org/users/okini3939/notebook/daisen-edes/
eDES2WD.cpp
- Committer:
- okini3939
- Date:
- 2013-06-17
- Revision:
- 2:ef1c45486022
- Parent:
- 1:2a38c9027bd1
File content as of revision 2:ef1c45486022:
/** * DAISEN eDES 2WD driver for mbed * Copyright (c) 2012 Suga * Released under the MIT License: http://mbed.org/license/mit */ /** @file * @brief DAISEN eDES 2WD driver for mbed */ #include "mbed.h" #include "eDES2WD.h" eDES2WD::eDES2WD (I2C &i2c) : _i2c(i2c) { } void eDES2WD::reset (int id) { char cmd[] = {1, I2C_WCMD_RESET}; int adrs; if (0 < id){ adrs = SUB_ADRS + (id - 1) * 2; } else { adrs = 0; } _i2c.write(adrs, cmd, 2); } void eDES2WD::motor (int id, int l_speed, int r_speed) { char cmd[] = {3, I2C_WCMD_MOTOR, 0, 0}; int adrs; cmd[2] = l_speed; cmd[3] = r_speed; if (0 < id){ adrs = SUB_ADRS + (id - 1) * 2; } else { adrs = 0; } _i2c.write(adrs, cmd, 4); } void eDES2WD::set_led (int id, eDES2WD_LED led, int sw) { char cmd[] = {3, I2C_WCMD_LED, 0, 0}; int adrs; cmd[2] = led; cmd[3] = sw; if (0 < id){ adrs = SUB_ADRS + (id - 1) * 2; } else { adrs = 0; } _i2c.write(adrs, cmd, 4); } unsigned int eDES2WD::get_sensor(int id, eDES2WD_SENSOR cn, unsigned int *dat) { char cmd[] = {2, I2C_RCMD_SENSOR, 0}; char recv[MAX_CN]; unsigned int d; int adrs; int nmax, n; if (id < 1 || 9 < id) return(0); adrs = SUB_ADRS + (id - 1) * 2; nmax = cn < MAX_CN ? 2 : MAX_CN * 2 + 2; cmd[2] = cn; _i2c.write(adrs, cmd, 3); _i2c.read(adrs | 1, recv, nmax); if (nmax == 2){ d = recv[0] | (recv[1] << 8); return d; } else { for (n = 0; n < MAX_CN; n++){ d = recv[0] | (recv[1] << 8); dat[n] = d; } // gSUB_LED_G = recv[20]; // gSUB_LED_R = recv[21]; } return 0; } int eDES2WD::get_lat(int id, int cno) { char cmd[] = {2, I2C_RCMD_LAT, 0}; char recv[MAX_CN]; int adrs; if (id < 1 || 9 < id) return(false); if (MAX_CN - 1 < cno) return(false); adrs = SUB_ADRS + (id - 1) * 2; cmd[2] = cno; _i2c.write(adrs, cmd, 3); _i2c.read(adrs | 1, recv, 1); return recv[0]; }