简体   繁体   English

使用按钮为 C++ 创建计数器

[英]Creating a counter for C++ with a button

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.我有几种声音我想在两者之间交替,但无法让计数器为我改变歌曲 A 和 B。我想将歌曲 A 设置为计数器偶数,将歌曲 B 设置为计数器赔率。 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.另外,请注意,如果按下按钮,digitalRead 返回 HIGH,否则返回 LOW。 Any counting of presses beyond that you have to do yourself.超出此范围的任何印刷机计数都必须自己完成。

https://docs.particle.io/reference/device-os/firmware/argon/#digitalread- https://docs.particle.io/reference/device-os/firmware/argon/#digitalread-

Thanks to the help of @DeducibleSteak the code works now to swap between the two sounds.感谢@DeducibleSteak 的帮助,代码现在可以在两种声音之间切换。

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);
}
//Counter Setup
int counter = 0;

void loop() {
    if (digitalRead(button) == HIGH) {
        ++counter;

        if (counter % 2 == 1) 
        {
            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);
        }
            } 
        else {
                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);
            }
        }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM