Kitteh
Here is the Kitteh pumpkin, also known as the Cat-O-Lantern.
It is very temperamental and has a lot to say about physical contact.
It has two individual LEDs for eyes, driven by pin 2, eight LEDs in series for the mouth driven by pin 5, and a PING ultrasonic sensor driven by pin 7.
The PING ultrasonic sensor discriminates between two states.
The ground state is when there is a distance of at least 50cm between the PING sensor and anything. In the ground state, the eyes blink randomly and the mouth pulsates slowly.
When something comes closer than 50cm, the active state takes over, making the eyes blink rapidly and the mouth pulsate fast.
It returns to normal once the distance of 50cm is restored.
//------------------------------------------- // Kitteh //------------------------------------------- int randOn = 0; int randOff = 0; // int eyePins[3] = {2, 3, 4}; int eyepins = 2; int mouthPins = 5; int brightness = 0; int fadeAmount = 5; int brightnessActive = 0; int fadeAmountActive = 5; int time = 50; int pingPin = 7; // int i = 3; /*------------------------------ Setup ------------------------------*/ void setup() { Serial.begin(9600); randomSeed(analogRead(0)); pinMode(eyepins, OUTPUT); pinMode(5, OUTPUT); } /*------------------------------ Loop ------------------------------*/ void loop() { int cm = ping(); //PASSIVE STATE if(cm > 50) { //EYES // for(int i = 0; i <3; i++) eyeBlink(eyepins, randOn, randOff); //MOUTH mouthFade(5, brightness, fadeAmount); } //ACTIVE STATE else { //EYES // for(int i = 0; i <3; i++) eyeChase(eyepins, time); //MOUTH //mouthActive(5, brightnessActive, fadeAmountActive); // Serial.print(i); } } /*________________________________________________ Ping ________________________________________________*/ long ping() { int duration, cm; pinMode(pingPin, OUTPUT); digitalWrite(pingPin, LOW); delayMicroseconds(2); digitalWrite(pingPin, HIGH); delayMicroseconds(5); digitalWrite(pingPin, LOW); pinMode(pingPin, INPUT); duration = pulseIn(pingPin, HIGH); cm = microsecondsToCentimeters(duration); Serial.print(cm); Serial.print("cm"); Serial.println(); delay(100); return cm; } /*________________________________________________ MicroSeconds To Centimeters ________________________________________________*/ long microsecondsToCentimeters(int microseconds) { return microseconds / 29 / 2; } /*________________________________________________ Eye Blink ________________________________________________*/ void eyeBlink(int pin, int randOn, int randOff) { randOn = random (300, 6000); randOff = random (50, 140); digitalWrite(pin, HIGH); Serial.print("On = "); Serial.print(randOn); Serial.print(", "); delay(randOn); digitalWrite(pin, LOW); Serial.print("Off = "); Serial.print(randOff); Serial.print(", "); delay(randOff); Serial.println(); } /*________________________________________________ Eye Chase ________________________________________________*/ void eyeChase(int pin, int duration) { digitalWrite(pin, HIGH); delay(duration); digitalWrite(pin, LOW); delay(duration); } /*________________________________________________ Mouth Fade ________________________________________________*/ void mouthFade(int pin, int brightness, int fadeAmount) { analogWrite(pin, brightness); brightness = brightness + fadeAmount; if (brightness == 0 || brightness == 255) { fadeAmount = -fadeAmount ; } delay(20); } /*________________________________________________ Mouth Active ________________________________________________*/ /*void mouthActive(int pin, int brightnessActive, int fadeAmountActive) { analogWrite(pin, brightnessActive); brightnessActive = brightnessActive + fadeAmountActive; if (brightnessActive == 0 || brightnessActive == 255) { fadeAmountActive = -fadeAmountActive ; } delay(5); }*/
Reply