Created
January 29, 2012 00:44
-
-
Save mattgillooly/1696465 to your computer and use it in GitHub Desktop.
Ruby-encrusted Hippos!
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # 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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* | |
| 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