I am trying to put together a button press counter with my argon device. I have a couple sounds I want to alternate between but can not get a counter to work for me to change songs A and B. I wanted to set song A as counter evens and song B on counter odds. I currently have very little and do not know where to go from where I am at. Not sure how to upload what I have currently.
int button = A0;
int buzzer = A2;
// Defining Sound
int sound1[] = {1700,2500,2800,2000,2500,1500,2000,1800};
int sound2[] = {3800,3600,3400,3200,2400,2600,2800,3000};
//Defining Duration Of Notes
int Duration1[] = {4,2,4,2,4,2,4,2};
int Duration2[] = {2,4,2,4,2,2,4,2};
//Setting Button Count
int bcount = 0;
#define MAX 2
//Creates The Setup Of Code
void setup()
{
//Creates The Input Of Button Being Pressed
pinMode (button, INPUT);
//Creates The Output Of The Buzzer
pinMode (buzzer, OUTPUT);
}
void loop() {
//When Button Is Pressed
if (digitalRead(button) == 1) {
bcount = bcount + 1;
}
else if
(bcount = 0);
for (int i = 0; i < bcount; i++) {
digitalWrite(buzzer, 1);
if (bcount == MAX) {
bcount = 0;
break;
}
//Reads Notes
for (int Note = 0; Note < 8; Note++){
//Note Duration
int Duration = 1000/Duration1[Note];
//Sends Notes To Speaker
tone(buzzer, sound1[Note], Duration);
//Sets Delay Between Notes
int pauseBetweenNotes = Duration * 1.50;
//Delay Itself
delay(pauseBetweenNotes);
//Stop To The Sound
noTone(buzzer);
}
}
//When Button Is Pressed 2nd Time
if(digitalRead(button) == 2) {
//Reads Notes
for (int Note = 0; Note < 8; Note++){
//Note Duration
int Duration = 1000/Duration2[Note];
//Sends Notes To Speaker
tone(buzzer, sound2[Note], Duration);
//Sets Delay Between Notes
int pauseBetweenNotes = Duration * 1.50;
//Delay Itself
delay(pauseBetweenNotes);
//Stop To The Sound
noTone(buzzer);
}
}
}
Try this:
int counter = 0;
void loop() {
if (digitalRead(button) == HIGH) {
counter = counter + 1;
if (counter % 2 == 1) {
// ... place your code for sound#1 here.
} else {
// ... place your code for sound#2 here.
}
}
}
What's going on here is: we're incrementing a counter every time the button is pressed. If the number of times the button has been pressed is odd, we play the first sound, if it's even, we play the second sound.
It's important to store the counter outside the loop function, so that it does not lose it's value between calls of loop.
Also, notice that digitalRead returns HIGH if the button is pressed, or LOW if it is not. Any counting of presses beyond that you have to do yourself.
https://docs.particle.io/reference/device-os/firmware/argon/#digitalread-