Here's the code I used for the rotary encoder and the Uno board:
#include "Wire.h"
// Set up the Variables
int state, prevstate = 0;
int nextEncoderState[4] = { 2, 0, 3, 1 }; int prevEncoderState[4] = { 1, 3, 0, 2 };
const byte attSetAddr = 0x38;
const byte attResetAddr = 0x3E;
const int offVolume = 100;
const int relayLatchTime = 3; // time in milliseconds
int newVol = offVolume ;
void setup() {
delay(1000);
Wire.beginTransmission(attResetAddr);
Wire.send(0);
Wire.send(0xFF);
Wire.endTransmission();
delay(relayLatchTime);
Wire.beginTransmission(attResetAddr);
Wire.send(0);
Wire.send(0x00);
Wire.endTransmission();
delay(relayLatchTime);
// Set up for the encoder
pinMode(5, INPUT);
pinMode(6, OUTPUT);
pinMode(7, INPUT);
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
}
void SetVolume(int newVol)
{
int sendVal;
// now set
sendVal = (byte)newVol ;
Wire.begin();
Wire.beginTransmission(attSetAddr);
Wire.send(0);
Wire.send(sendVal);
Wire.endTransmission();
delay(relayLatchTime) ;
Wire.begin();
Wire.beginTransmission(attSetAddr);
Wire.send(0);
Wire.send(0x00);
Wire.endTransmission();
delay(relayLatchTime);
// now reset
sendVal = 0xFF ^ (byte)newVol;
Wire.beginTransmission(attResetAddr);
Wire.send(0);
Wire.send(sendVal);
Wire.endTransmission();
delay(relayLatchTime);
Wire.beginTransmission(attResetAddr);
Wire.send(0);
Wire.send(0x00);
Wire.endTransmission();
delay(relayLatchTime);
}
void loop() {
state = (digitalRead(7) << 1) | digitalRead(5);
if (state != prevstate) {
if (state == nextEncoderState[prevstate]) {
newVol = newVol + 1;
if (newVol > 255)
newVol = 255;
SetVolume(255-newVol);
} else if (state == prevEncoderState[prevstate]) {
newVol = newVol - 1;
if (newVol < offVolume)
newVol = offVolume;
SetVolume(255-newVol);
}
prevstate = state;
}
}
EDIT:
Quick thanks to Max and the Arduino site where I got some of the code segments