MD23
To use the Devantech MD23 (now called MD25) from the Arduino environment, create these files (this is all still experimental, so use at your own risk)
Get all the info on creating a library here at the arduino site. To use this in your own code:
#include <Wire.h>MD23 md(0x58)void setup(){md.refresh();md.setMode(2);}void loop(){md.move(140,128);int bat = md.batteryVolts;}
MD23.h
/*MD23.h - Library for Devantech MD23.Created by Erik Oppedijk, November 1, 2009.Released into the public domain.*/#ifndef MD23_h#define MD23_h#include "WProgram.h"//#include <Wire.h>//#define md23Address 0x58 // Address of the MD23#define softwareReg 0x0D // Byte to read the software version#define speed1 0x00 // Byte to send speed to first motor#define speed2 0x01 // Byte to send speed to second motor#define cmdByte 0x10 // Command byte#define encoderOne 0x02 // Byte to read motor encoder 1#define encoderTwo 0x06 // Byte to read motor encoder 2#define voltRead 0x0A // Byte to read battery volts#define modeByte 0x0Fclass MD23{public:MD23(int deviceid);void refresh();void move(int spd, int turn);void setMode(int mode);void encodeReset();void stopMotor();void rotateDegrees(int deg);long e1;long e2;int batteryVolts;int m1;int m2;int version;private:int md23Address;int _mode;};#endif
MD23.cpp
/*Morse.cpp - Library for Devantech MD23.Created by Erik Oppedijk, November 1, 2009.Released into the public domain.*/#include "WProgram.h"#include "MD23.h"#include <Wire.h>MD23::MD23(int deviceid){md23Address = deviceid;Wire.begin();//refresh();}void MD23::refresh(){Wire.beginTransmission(md23Address); // Send byte to get a reading from encoder 1Wire.send(encoderOne);Wire.endTransmission();Wire.requestFrom(md23Address, 12); // Request 4 bytes from MD23while(Wire.available() < 12); // Wait for 4 bytes to arrivelong firstByte = Wire.receive(); // Recieve 4 bytes highest byte firstlong secondByte = Wire.receive();long thirdByte = Wire.receive();long fourthByte = Wire.receive();e1 = (firstByte << 24) + (secondByte << 16) + (thirdByte << 8) + fourthByte; // Put them togetherfirstByte = Wire.receive(); // Get four bytes highest byte firstsecondByte = Wire.receive();thirdByte = Wire.receive();fourthByte = Wire.receive();e2 = (firstByte << 24) + (secondByte << 16) + (thirdByte << 8) + fourthByte; // Put them togetherbatteryVolts = Wire.receive();m1 = Wire.receive();m2 = Wire.receive();version = Wire.receive();}void MD23::setMode(int mode){Wire.beginTransmission(md23Address);Wire.send(modeByte);Wire.send(mode); // Putting the value 0xF to set modeWire.endTransmission();_mode = mode;}void MD23::encodeReset(){ // This function resets the encoder values to 0Wire.beginTransmission(md23Address);Wire.send(cmdByte);Wire.send(0x20); // Putting the value 0x20 to reset encodersWire.endTransmission();}void MD23::stopMotor(){ // Function to stop motorsWire.beginTransmission(md23Address);Wire.send(speed1);Wire.send(128); // Sends a value of 128 to motor 2 this value stops the motorWire.endTransmission();}void MD23::move(int spd, int turn){Wire.beginTransmission(md23Address); // Drive motor 2 at speed value stored in xWire.send(speed1);Wire.send(spd);Wire.send(turn);Wire.endTransmission();}void MD23::rotateDegrees(int deg){}
keywords.txt
MD23 KEYWORD1move KEYWORD2stopMotor KEYWORD2encodeReset KEYWORD2setMode KEYWORD2refresh KEYWORD2