/* * CylonRoombaAlpha * ---------------- * Implement a simple Roomba behavior while making a Cylon-like LED scanning * display. * * Much of the LED code stolen from: http://www.arduino.cc/en/Tutorial/ShiftOut * * Created 27 November 2006 * copyleft 2006 Tod E. Kurt * http://hackingroomba.com/ */ int ledPin = 13; int dataPin = 7; // Pin connected to DS of 74HC595 int clockPin = 6; // Pin connected to SH_CP of 74HC595 int latchPin = 5; // Pin connected to ST_CP of 74HC595 int ddPin = 2; int txPin = 1; // used by Serial.print() int rxPin = 0; // used by Serial.read() char sensorbytes[10]; #define bumpright (sensorbytes[0] & 0x01) #define bumpleft (sensorbytes[0] & 0x02) int t1 = 80; // main delay between cylon eye changes int t2 = 30; // minor delay void setup() { pinMode(latchPin, OUTPUT); pinMode(ddPin, OUTPUT); // sets the pins as output pinMode(ledPin, OUTPUT); // sets the pins as output Serial.begin(57600); digitalWrite( ledPin, HIGH); // say we're alive // wake up the robot digitalWrite( ddPin, HIGH); delay(100); digitalWrite( ddPin, LOW); delay(500); digitalWrite( ddPin, HIGH); delay(2000); // set up ROI to receive commands Serial.print(128, BYTE); // START delay(50); Serial.print(130, BYTE); // CONTROL delay(50); digitalWrite( ledPin, LOW); // say we've finished setup blinkAll16(1,700); } void loop() { digitalWrite( ledPin, HIGH); // say we're starting loop updateSensors(); digitalWrite( ledPin, LOW); // say we're after updateSensors if( bumpleft ) { spinRight(); blinkAll16(1,400); delay(600); } else if( bumpright ) { spinLeft(); blinkAll16(1,400); delay(600); } goForward(); delay(t1); cylonScanRight(); delay(t1); cylonScanLeft(); } void cylonScanRight() { for (int j = 0; j < 15; j++) { digitalWrite(latchPin, 0); shiftOut16(dataPin, clockPin, 1<<(j+1) | 1<=0; j--) { digitalWrite(latchPin, 0); shiftOut16(dataPin, clockPin, 1<<(j-1) | 1<=0; i--) { digitalWrite(myClockPin, 0); int pinState = (myDataOut & (1<