Skip to content

Instantly share code, notes, and snippets.

@bentglasstube
Created August 2, 2012 06:32
Show Gist options
  • Save bentglasstube/3234520 to your computer and use it in GitHub Desktop.
Save bentglasstube/3234520 to your computer and use it in GitHub Desktop.
Arduino sketch for Galaxy Nexus dock
// Dock configuration
const int DOCK_TYPE = 50; // 50 Desk 100 Car
const int DOCK_CHARGE = 50; // 50 AC 100 USB
const int DOCK_AUDIO = 100; // 50 Yes 100 No
// Pin configuration
const int pinLed = 0;
const int pinData = 2;
void setup() {
pinMode(pinLed, OUTPUT);
pinMode(pinData, INPUT);
}
boolean sending = false;
void loop() {
heartBeat();
if (sending) doSendOptions();
else checkSignal();
}
void heartBeat() {
// sine pulse when idle, blink when sending data to phone
if (sending) digitalWrite(pinLed, (millis() / 25) % 2 ? HIGH : LOW);
else analogWrite(pinLed, 128 + int(127 * sin(millis() / 500.0)));
}
long pulseStart = 0;
int prevValue = LOW;
void checkSignal() {
int value = digitalRead(pinData);
if (value != prevValue) {
// register changes in reading
prevValue = value;
if (value == HIGH) {
pulseStart = millis();
} else {
long pulseLength = millis() - pulseStart;
// send options on pulse between 80 and 120 ms
if (pulseLength > 80 && pulseLength < 120) sendOptions();
}
}
}
int optionSend = 0;
long optionFinish = 0;
void sendOptions() {
// initialize variables for sending options to phone
sending = true;
optionSend = 1;
pinMode(pinData, OUTPUT);
digitalWrite(pinData, LOW);
optionFinish = millis() + 100;
}
void doSendOptions() {
if (millis() > optionFinish) {
switch (optionSend) {
case 1: // send dock type (desk or car)
digitalWrite(pinData, HIGH);
optionFinish = millis() + DOCK_TYPE;
optionSend = 2;
break;
case 2: // send charge speed (usb or ac)
digitalWrite(pinData, LOW);
optionFinish = millis() + DOCK_CHARGE;
optionSend = 3;
break;
case 3: // send audio support
digitalWrite(pinData, HIGH);
optionFinish = millis() + DOCK_AUDIO;
optionSend = 4;
break;
default: // done sending options
digitalWrite(pinData, LOW);
pinMode(pinData, INPUT);
sending = false;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment