Skip to content

Instantly share code, notes, and snippets.

@mattgillooly
Created January 29, 2012 00:44
Show Gist options
  • Select an option

  • Save mattgillooly/1696465 to your computer and use it in GitHub Desktop.

Select an option

Save mattgillooly/1696465 to your computer and use it in GitHub Desktop.
Ruby-encrusted Hippos!
# a Hunngrypotamus joint, 2012
require 'rubygems'
require 'serialport'
class Hippo
CLAIMED = 'c'
ABANDONED = 'a'
BITE = 'b'
def initialize
@claimed = false
end
def claim
was_claimed = @claimed
# mark it as claimed no matter what
serial_port_write(CLAIMED)
@claimed = true
# return false if it had already been claimed by someone else
!was_claimed
end
def abandon
was_claimed = @claimed
# mark it as abandoned no matter what
serial_port_write(ABANDONED)
@claimed = false
# return false if it wasn't claimed to begin with
was_claimed
end
def bite
serial_port_write(BITE)
end
def serial_port
@sp ||= SerialPort.new "/dev/tty.usbmodem12341", 9600
end
private :serial_port
def serial_port_write(s)
serial_port.write(s)
end
private :serial_port_write
end
/*
Hippo
*/
int greenPin = 12;
int redPin = 15;
int solenoidPin = 14;
boolean claimed = false;
void setup() {
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(solenoidPin, OUTPUT);
}
void abandon() {
claimed = false;
digitalWrite(greenPin, LOW); // set the LED off
digitalWrite(redPin, HIGH); // set the LED off
}
void claim() {
claimed = true;
digitalWrite(redPin, LOW);
digitalWrite(greenPin, HIGH);
}
void bite() {
digitalWrite(solenoidPin, HIGH);
delay(100);
digitalWrite(solenoidPin, LOW);
}
void read_from_laptop() {
if (Serial.available()) {
char incomingByte = Serial.read(); // will not be -1
switch(incomingByte) {
case 'a':
abandon();
break;
case 'b':
bite();
break;
case 'c':
claim();
break;
}
}
}
void loop() {
read_from_laptop();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment