/* Blink Turns on an LED on for one second, then off for one second, repeatedly. This example code is in the public domain. */ int micSample; int averageVolume; int seed; int seed2; int seed3; int newPainting=1; int counter=0; int yellow = 1; int white = 2; void setup() { // initialize the digital pin as an output. // Pin 13 has an LED connected on most Arduino boards: pinMode(1, OUTPUT); pinMode(2, OUTPUT); pinMode(3, INPUT); // seed sending pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(7, INPUT); // seed receiving pinMode(4, INPUT); // seed receiving pinMode(5, INPUT); // seed receiving digitalWrite(7, HIGH); digitalWrite(4, HIGH); digitalWrite(5, HIGH); digitalWrite(3, HIGH); averageVolume = analogRead(0); } void loop() { averageVolume = (averageVolume + analogRead(0))/2;// update average volume int flowerOn = analogRead(6); if((flowerOn%2 == 0) && (newPainting==0))// listen for other flowers half the time { seed = digitalRead(7); seed2 = digitalRead(4); seed3 = digitalRead(5); counter=0; while ((seed == 1) && (seed2 == 1) && (seed3 == 1) && (counter < 1800)) // continue listening while no other flowers respond { delay(100); seed = digitalRead(7); seed2 = digitalRead(4); seed3 = digitalRead(5); counter++; } delay(500); } newPainting = 0; // turn on yellow dandelion for (int i = 1; i<8000; i=i+20) { digitalWrite(yellow, HIGH); delayMicroseconds(i); digitalWrite(yellow, LOW); delayMicroseconds(8000-i); } digitalWrite(yellow, HIGH); for( int i=0 ; i< 50; i++) { averageVolume = (averageVolume + analogRead(0))/2; delay(10); } for (int k = 1; k<8000; k=k+10) // turn yellow dandelion off { digitalWrite(yellow, HIGH); delayMicroseconds(8000-k); digitalWrite(yellow, LOW); delayMicroseconds(k); } for (int j = 1; j<8000; j=j+80) // start seed puff { digitalWrite(white, HIGH); delayMicroseconds(j); digitalWrite(white, LOW); delayMicroseconds(8000-j); } digitalWrite(white, HIGH); int puff = 1; while (puff == 1) // listen for wind { int maxSample = 0; //reset the maximum volume for this sample // take 20 samples of volume and pick the maximum volume for( int q=0 ; q< 20; q++) { micSample = analogRead(0); if (micSample > maxSample) { maxSample = micSample; } } if (maxSample > (averageVolume + 25)) { for (int n = 1; n<50; n++) { digitalWrite(white, HIGH); delayMicroseconds(50); digitalWrite(white, LOW); delayMicroseconds(200); } digitalWrite(white, HIGH); } if(maxSample > (averageVolume+35)) { digitalWrite(white, LOW); popOut(10); popOut(9); popOut(8); puff = 0; // end the seed puff while loop } }// exit seed puff pinMode(3, OUTPUT); digitalWrite(3, LOW); delay(100); pinMode(3, INPUT); digitalWrite(3, HIGH); seed = digitalRead(7); seed2 = digitalRead(4); seed3 = digitalRead(5); counter = 0; while ((seed == 1) && (seed2 == 1) && (seed3 == 1) && (counter < 1200)) // continue listening while no other flowers respond { delay(100); seed = digitalRead(7); seed2 = digitalRead(4); seed3 = digitalRead(5); counter++; } delay(100); } int micListen() { int maxSample = 0; //reset the maximum volume for this sample // take 20 samples of volume and pick the maximum volume for( int i=0 ; i< 20; i++) { micSample = analogRead(0); if (micSample > maxSample) { maxSample= micSample; } } return maxSample; } void popOut(int ledNum) { for (int m = 1; m<8000; m=m+80) { digitalWrite(ledNum, HIGH); delayMicroseconds(8000-m); digitalWrite(ledNum, LOW); delayMicroseconds(m); } delay(100); }