Hi Arduino community,
I'm having a little trouble with making my setup do what I want it to.
I have LED's, an optical sensor (works similar to a garage door sensor) and an 8ohm speaker
What it's doing currently in this specified order:
(in the void setup( ) )
- Arduino turns on
- pins 1-5 LED's turn on an off one after the other with a delay of 150 milliseconds
- pins 6-8 LED's all turn on and off at same time
- they are all on LOW after this has been done
(in the void loop( ) )
- If something passes through optical sensor #1 (labeled WINsensor in code), LED's turn on and off one after the other with a delay of 150 milliseconds
- pins 6-8 LED's turn on and stay on
- The default melody plays
- pins 6-8 LED's turn off
What I want it to do:
(in void loop ( ) )
- If something passes through optical sensor #1 (labeled WINsensor in code),pins 1-8 complete their sequence while the melody is playing
Here is my program currently:
#include "pitches.h"
int led13= 13;
int led1 = 1;
int led2 = 2;
int led3 = 3;
int led4 = 4;
int led5 = 5;
int led6 = 6;
int led7 = 7;
int led8 = 8;
int melody[] = {
NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4};
int noteDurations[] = {
4, 8, 8, 4,4,4,4,4 };
void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(led7, OUTPUT);
pinMode(led8, OUTPUT);
pinMode(led13, OUTPUT);
digitalWrite(led13, HIGH); //One LED will always stay on
//*****Sequence for lights*******
digitalWrite(led1, HIGH);
delay(150);
digitalWrite(led1, LOW);
delay(150);
digitalWrite(led2, HIGH);
delay(150);
digitalWrite(led2, LOW);
delay(150);
digitalWrite(led3, HIGH);
delay(150);
digitalWrite(led3, LOW);
delay(150);
digitalWrite(led4, HIGH);
delay(150);
digitalWrite(led4, LOW);
delay(150);
digitalWrite(led5, HIGH);
delay(150);
digitalWrite(led5, LOW);
delay(150);
digitalWrite(led6, HIGH);
digitalWrite(led7, HIGH);
digitalWrite(led8, HIGH);
delay(1000);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
}
void loop() {
int WINsensor = 12; // **WINNING SENSOR DEFINED HERE**
pinMode(WINsensor, INPUT);
if (digitalRead(WINsensor) == HIGH){
digitalWrite(led1, HIGH);
delay(150);
digitalWrite(led1, LOW);
delay(150);
digitalWrite(led2, HIGH);
delay(150);
digitalWrite(led2, LOW);
delay(150);
digitalWrite(led3, HIGH);
delay(150);
digitalWrite(led3, LOW);
delay(150);
digitalWrite(led4, HIGH);
delay(150);
digitalWrite(led4, LOW);
delay(150);
digitalWrite(led5, HIGH);
delay(150);
digitalWrite(led5, LOW);
delay(150);
digitalWrite(led6, HIGH);
digitalWrite(led7, HIGH);
digitalWrite(led8, HIGH);
for (int thisNote = 0; thisNote < 9; thisNote++) {
int noteDuration = 1000/noteDurations[thisNote];
tone(9, melody[thisNote],noteDuration);
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
noTone(9);
}
delay(300);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
delay(250);
}
else {
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
}
}
Here is also a picture of my setup:
(if it doesn't come up, here's a link: Imgur: The magic of the Internet )
~I understand that it's the delay function that is causing my problem, but I'm not sure how I can incorporate the millis( ) into my program to make it do what I want to do.
I will gladly take any suggestions/tips/similar project code that you've done etc.
Thank you in advance!!