Ready to serve
While I'am working on my .NET Micro Framework powered robot, I wrote class libraries to implement functionality of some of the Devantech devices. I've tried to implement best practicies and design patterns, so all sonars implements ISonar interface as well as all I2C devices that's support address change, implements IChangableAddress.Ranging distance with popular SRF02 ultrasonic range finder is as easy as this:
using(SRF02Sonar sonar = new SRF02Sonar(0x70)) { // Range distance in centimeters int distance = GetRange(SonarRangeUnits.Centimeters); }To operate HS 311 servos in extended mode with SD20 servo driver you need a few lines of code
using (SD20ServoDriver SD20 = new SD20ServoDriver()) { // Set servo to operate from 0 to 180 degrees (HS 311) SD20.SetExtendedMode(530, 1920); // Set servo to the highest position SD20.SetServo(1, 250); }To this day I've implemented functionality for the following devices
- SRF02 Ultrasonic Ranger
- SRF05 Ultrasonic Ranger
- CMPS03 Compass Module
- SD20 Servo Driver
I2C easier
I2C communication is usual source of confusion for the beginners. The way that .NET Micro Framework implements I2C is powerful but a bit hard to handle. Driver project contains class I2CSlave which implements I2C communication in way that is usual for most devices. It means register reading and writing. See how easy it is.// Device on address 0x70 = 0xE1 in 8 bit using (I2CSlave slave = new I2CSlave(0x70)) { // Write value '120' to register '1' slave.WriteRegister(1, 120); byte[] dataBuffer = new byte[2]; // Read from register '5' slave.ReadRegister(5, dataBuffer); // Turn byte array into value int registerValue = Endianity.GetValue(dataBuffer, ByteOrder.BigEndian); }