// Public domain, by Chad Miller // Photo of layout at // http://picasaweb.google.com/chadmill/Arduino#5563199409956300850 // Map pins to color inputs of LED. int red = 9; int blue = 10; int green = 11; unsigned long last_beat = 0; unsigned long tick = 0; void setup() { pinMode(13, OUTPUT); // pseudo-pin leading to on-board LED pinMode(red, OUTPUT); pinMode(blue, OUTPUT); pinMode(green, OUTPUT); last_beat = millis(); } unsigned long lightread() { int a = constrain(analogRead(0), 0, 900); // delay(d) hates nonpositive int lr = 2000 - map(a, 0, 900, 500, 1990); return lr; } //>>> r = "== = =" //>>> b = " == ==" //>>> g = " ====" //>>> for i, trio in enumerate(zip(r,g,b)): //... trio = map((lambda s: s == "="), trio) //... print " case {}:".format(i) //... for pin, new, old in zip((9, 10, 11), trio, states): //... if old != new: //... if new: //... print " digitalWrite({}, HIGH);".format(pin) //... else: //... print " digitalWrite({}, LOW);".format(pin) //... print " break;" //... print //... states = trio void go_next(unsigned long tick) { switch (tick % 7) { case 0: digitalWrite(10, LOW); break; case 1: digitalWrite(11, HIGH); break; case 2: digitalWrite(9, LOW); break; case 3: digitalWrite(10, HIGH); digitalWrite(11, LOW); break; case 4: digitalWrite(9, HIGH); break; case 5: digitalWrite(9, LOW); digitalWrite(11, HIGH); break; case 6: digitalWrite(9, HIGH); break; } } void loop() { unsigned long now = millis(); unsigned long wanted_delay = lightread(); if (now > (last_beat + wanted_delay)) { tick += 1; go_next(tick); last_beat = now; } }