//LED Pins
int dayled2 = 2; 	 // Day LED connected to digital pin 2
int dayled3 = 3; 	 // Day LED connected to digital pin 3
int dayled5 = 5;  	 // Day LED connected to digital pin 5
int nightleds = A0; 	 // Night LEDs connected to analog pin 0
	
//Buzzer Pins
int speakerPin = 4;	 // speaker connected to digital pin 4

//Light Sensor Pins
int sensorValue;	 // variable to store the value coming from the light sensor
int lightSensorPin = A3; // Light sensor connected to analog pin 3
int lightpos = A2;       // Positive pin of light sensor connected to A2

int ground = 6;     	 // Negative petals of LEDs and buzzer connected to pin 6

void setup()	 
{	 
  pinMode(speakerPin, OUTPUT);	// sets the speakerPin to be an output
  pinMode(dayled2, OUTPUT);   // Next four lines set LEDs as outputs
  pinMode(dayled3, OUTPUT);
  pinMode(dayled5, OUTPUT);
  pinMode(nightleds, OUTPUT);
  
  //pins used for light sensor
  pinMode(lightpos, OUTPUT);
  digitalWrite(lightpos, HIGH);
  
//set pin to GND
  pinMode(ground, OUTPUT);
  digitalWrite(ground, LOW);  // Turns off power to pin 5 (ground)
}	 

void loop()	// run over and over again
{

  sensorValue = analogRead(lightSensorPin);	// read the value from the sensor
  delay(100);

  if(analogRead(lightSensorPin) < 30){
    //if its dark, play You Are My Sunshine and blink colored LEDs

    digitalWrite(dayled2,HIGH);	//turn on the pink LED
    digitalWrite(dayled5,HIGH);	//turn on the green LED
    beep(speakerPin,587.33,300);	//D5: play the note G4 for 300 milliseconds
    sensortestlight();  
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW); // if it's bright, turn off colored LEDs.
       digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW);
      return; // if it's bright, restart the loop. 
    }
    beep(speakerPin,783.99,300);	//G5
    digitalWrite(dayled3, HIGH);
    digitalWrite(dayled2,LOW);
    sensortestlight();   
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW); 
       digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW);
      return;
    }
    beep(speakerPin,880,300);	//A5
    digitalWrite(dayled5,LOW);
    sensortestlight();   
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW); 
       digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW);
      return;
    }
    beep(speakerPin,987.77,600);	//B5
    digitalWrite(dayled3, LOW);
    digitalWrite(dayled5,HIGH);
    sensortestlight();   
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW); 
       digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW);
      return;
    }
    digitalWrite(dayled2,HIGH);
    beep(speakerPin,987.77,900);	//B5
    sensortestlight();   
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW);
      digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW); 
      return;
    }
    digitalWrite(dayled3, HIGH);
    beep(speakerPin,987.77,300);	//B5
    sensortestlight();   
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW);
      digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW); 
      return;
    }
    digitalWrite(dayled2,LOW);
    digitalWrite(dayled5,LOW);
    beep(speakerPin,932.33,300);	//A#5
    sensortestlight();   
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW);
      digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW); 
      return;
    }
    beep(speakerPin,987.77,300);	//B5
    sensortestlight();   
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW);
      digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW); 
      return;
    }
    digitalWrite(dayled3, LOW);
    digitalWrite(dayled2,HIGH);
    beep(speakerPin,783.99,600);	//G5
    sensortestlight();   
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW);
      digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW); 
      return;
    }
    digitalWrite(dayled5,HIGH);
    digitalWrite(dayled3, HIGH);
    beep(speakerPin,783.99,900);	//G5
    sensortestlight();   
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW);
      digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW); 
      return;
    }
    digitalWrite(dayled2,LOW);
    beep(speakerPin,783.99,300);	//G5
    sensortestlight();   
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW);
      digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW); 
      return;
    }
    digitalWrite(dayled3, LOW);
    beep(speakerPin,880,300);	//A5
    sensortestlight();   
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW);
      digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW); 
      return;
    }
    digitalWrite(dayled2,HIGH);
    digitalWrite(dayled5,LOW);
    beep(speakerPin,987.77,300);	//B5
    sensortestlight();   
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW);
      digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW); 
      return;
    }
    digitalWrite(dayled3, HIGH);
    beep(speakerPin,1046.50,600);	//C6
    sensortestlight();   
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW);
      digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW); 
      return;
    }
    digitalWrite(dayled2,LOW);
    digitalWrite(dayled5,HIGH);
    beep(speakerPin,1318.51,900);	//E6
    sensortestlight();   
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW);
      digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW); 
      return;
    }
    
    digitalWrite(dayled3, LOW);
    beep(speakerPin,1318.51,300);	//E6
    sensortestlight();   
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW);
      digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW); 
      return;
    }
    digitalWrite(dayled2,HIGH);
    beep(speakerPin,1174.66,300);	//D6
    sensortestlight();   
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW);
      digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW); 
      return;
    }
    digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, HIGH);
    beep(speakerPin,1046.50,300);	//C6
    sensortestlight();   
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW);
      digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW); 
      return;
    }
    beep(speakerPin,987.77,1500);	//B5
    sensortestlight();   
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW);
      digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW); 
      return;
    }
    digitalWrite(dayled2,LOW);
    digitalWrite(dayled3, LOW);
    digitalWrite(dayled5,HIGH);
    beep(speakerPin,783.99,300);	//G5
    sensortestlight();   
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW);
      digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW); 
      return;
    }
    beep(speakerPin,880,300);	//A5
    sensortestlight();   
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW);
      digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW); 
      return;
    }
    digitalWrite(dayled2,HIGH);
    digitalWrite(dayled5,LOW);
    beep(speakerPin,987.77,300);	//B5
    sensortestlight();   
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW);
      digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW); 
      return;
    }
    digitalWrite(dayled3, HIGH);
    beep(speakerPin,1046.50,600);	//C6
    sensortestlight();   
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW);
      digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW); 
      return;
    }
    digitalWrite(dayled2,LOW);
   digitalWrite(dayled5,HIGH);
    beep(speakerPin,1318.51,900);	//E6
    sensortestlight();   
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW);
      digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW); 
      return;
    }
    digitalWrite(dayled3, LOW);
    beep(speakerPin,1318.51,300);	//E6
    sensortestlight();   
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW);
      digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW); 
      return;
    }
    digitalWrite(dayled2,HIGH);
    beep(speakerPin,1174.66,300);	//D6
    sensortestlight();   
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW);
      digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW); 
      return;
    }
    beep(speakerPin,1046.50,300);	//C6
    digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, HIGH);
    sensortestlight();   
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW);
      digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW); 
      return;
    }
    digitalWrite(dayled2,LOW);
    beep(speakerPin,987.77,600);	//B5
    sensortestlight();   
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW);
      digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW); 
      return;
    }
    digitalWrite(dayled3, LOW);
    digitalWrite(dayled5,HIGH);
    beep(speakerPin,783.99,900);	//G5
    sensortestlight();   
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW);
      digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW); 
      return;
    }
    digitalWrite(dayled2,HIGH);
    digitalWrite(dayled5,LOW);
    beep(speakerPin,587.33,300);	//D5
    sensortestlight();   
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW);
      digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW); 
      return;
    }
    digitalWrite(dayled3, HIGH);
    beep(speakerPin,783.99,300);	//G5
    sensortestlight();   
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW);
      digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW); 
      return;
    }
    digitalWrite(dayled2,LOW);
    beep(speakerPin,880,300);	//A5
    sensortestlight();   
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW);
      digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW); 
      return;
    }
    beep(speakerPin,987.77,900);	//B5
    digitalWrite(dayled5,HIGH);
    digitalWrite(dayled2,HIGH);
    beep(speakerPin,1046.50,300);	//C6
    sensortestlight();   
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW);
      digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW); 
      return;
    }
    digitalWrite(dayled3, LOW);
    beep(speakerPin,880,600);	//A5
    sensortestlight();   
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW); 
       digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW);
      return;
    }
    digitalWrite(dayled2,LOW);
    beep(speakerPin,880,300);	//A5
    sensortestlight();   
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW); 
       digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW);
      return;
    }
    digitalWrite(dayled3, HIGH);
    digitalWrite(dayled5,LOW);
    beep(speakerPin,987.77,300);	//B5
    sensortestlight();   
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW);
     digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW); 
      return;
    }
    digitalWrite(dayled2,HIGH);
    beep(speakerPin,783.99,1500);	//G5
    sensortestlight();   
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW);
     digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW); 
      return;
    }
    digitalWrite(dayled3, LOW);
    digitalWrite(dayled2,LOW);
    sensortestlight();   
    if (sensortestlight()==1){     
      digitalWrite(dayled2, LOW);
     digitalWrite(dayled5,LOW);
    digitalWrite(dayled3, LOW); 
      return;
    }
    delay(500);

  }	


  else{
    // if it's light, play Twinkle, Twinkle and blink night LEDS
    digitalWrite(nightleds, HIGH);   // turn the LED on (HIGH is the voltage level)
    beep(speakerPin, 1046.5, 400); //C6: Play the note C6 for 400 milliseconds
    sensortest();
    if (sensortest()==1){
      digitalWrite(nightleds, LOW); 
      return;
    }
    beep(speakerPin, 1046.5, 400); //C6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    digitalWrite(nightleds, LOW);   // turn the LED off
    beep(speakerPin, 1567.98, 400); //G6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    beep(speakerPin, 1567.98, 400); //G6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    digitalWrite(nightleds, HIGH);
    beep(speakerPin, 1760.00, 400); //A6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    beep(speakerPin, 1760.00, 400); //A6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    digitalWrite(nightleds, LOW);
    beep(speakerPin, 1567.98, 800); //G6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    digitalWrite(nightleds, HIGH);
    beep(speakerPin, 1396.91, 400); //F6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    beep(speakerPin, 1396.91, 400); //F6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    digitalWrite(nightleds, LOW);
    beep(speakerPin, 1318.51, 400); //E6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    beep(speakerPin, 1318.51, 400); //E6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    digitalWrite(nightleds, HIGH);
    beep(speakerPin, 1174.66, 400); //D6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    beep(speakerPin, 1174.66, 400); //D6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    digitalWrite(nightleds, LOW);
    beep(speakerPin, 1046.5, 800); //C6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    digitalWrite(nightleds, HIGH);
    beep(speakerPin, 1567.98, 400); //G6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    beep(speakerPin, 1567.98, 400); //G6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    digitalWrite(nightleds, LOW);
    beep(speakerPin, 1396.91, 400); //F6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    beep(speakerPin, 1396.91, 400); //F6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    digitalWrite(nightleds, HIGH);
    beep(speakerPin, 1318.51, 400); //E6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    beep(speakerPin, 1318.51, 400); //E6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    digitalWrite(nightleds, LOW);
    beep(speakerPin, 1174.66, 800); //D6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    digitalWrite(nightleds, HIGH);
    beep(speakerPin, 1567.98, 400); //G6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    beep(speakerPin, 1567.98, 400); //G6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    digitalWrite(nightleds, LOW);
    beep(speakerPin, 1396.91, 400); //F6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    beep(speakerPin, 1396.91, 400); //F6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    digitalWrite(nightleds, HIGH);
    beep(speakerPin, 1318.51, 400); //E6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    beep(speakerPin, 1318.51, 400); //E6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    digitalWrite(nightleds, LOW);
    beep(speakerPin, 1174.66, 800); //D6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    digitalWrite(nightleds, HIGH);
    beep(speakerPin, 1046.5, 400); //C6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    beep(speakerPin, 1046.5, 400); //C6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    digitalWrite(nightleds, LOW);
    beep(speakerPin, 1567.98, 400); //G6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    beep(speakerPin, 1567.98, 400); //G6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    digitalWrite(nightleds, HIGH);
    beep(speakerPin, 1760.00, 400); //A6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    beep(speakerPin, 1760.00, 400); //A6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    digitalWrite(nightleds, LOW);
    beep(speakerPin, 1567.98, 800); //G6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    digitalWrite(nightleds, HIGH);
    beep(speakerPin, 1396.91, 400); //F6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    beep(speakerPin, 1396.91, 400); //F6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    digitalWrite(nightleds, LOW);
    beep(speakerPin, 1318.51, 400); //E6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    beep(speakerPin, 1318.51, 400); //E6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    digitalWrite(nightleds, HIGH);
    beep(speakerPin, 1174.66, 400); //D6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    beep(speakerPin, 1174.66, 400); //D6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    digitalWrite(nightleds, LOW);
    beep(speakerPin, 1046.5, 800); //C6
    sensortest();   
    if (sensortest()==1){     
      digitalWrite(nightleds, LOW); 
      return;
    }
    delay(500);
  }	
}  


void beep (unsigned char speakerPin, int frequencyInHertz, long timeInMilliseconds)     // the sound producing function
{	 
  int x;	 
  long delayAmount = (long)(1000000/frequencyInHertz);
  long loopTime = (long)((timeInMilliseconds*1000)/(delayAmount*2));
  for (x=0;x<loopTime;x++)	 
  {	 
    digitalWrite(speakerPin,HIGH);
    delayMicroseconds(delayAmount);
    digitalWrite(speakerPin,LOW);
    delayMicroseconds(delayAmount);
  }	 
}	 

int sensortest()	// tests for light sensor value after each note
{
  {	 
    sensorValue = analogRead(lightSensorPin);	// read the value from the sensor
  }

  if(analogRead(lightSensorPin) < 30){
    return 1;
    //if its dark, return a value of 1 
  

  }	
}

int sensortestlight()	// tests for light sensor value after each note
{
  {	 
    sensorValue = analogRead(lightSensorPin);	// read the value from the sensor
  }

  if(analogRead(lightSensorPin) > 30){
    return 1;
    //if its bright, return a value of 1

  }	
}
