首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Arduino-uno项目

Arduino-uno项目
EN

Stack Overflow用户
提问于 2017-01-23 11:59:49
回答 1查看 78关注 0票数 0

我目前正在和一个树莓派一起做一个练习。

我的工作是在面包板上做以下工作:

  • 5 LED
  • 2个开关

下面的代码应该按照以下方式工作:

使用第一个按钮,您可以选择下一个LED,使用第二个按钮,您可以将所选的LED打开/关闭。当您到达最后一个LED时,它会给出以下输出的真或假(on或off):

电路我不知道我的代码有什么问题:

代码语言:javascript
复制
//const variables  
const int leds[] = {3, 5, 6, 9, 11};  
const int buttons[] = {12, 13};

//variables that will change  
int buttonState[] = {false, false};  
int lastButtonState[] = {false, false};  
int values[] = {false, false, false, false};  

void setup() {  
    //init LEDs  
    for(int i = 0; i < sizeof(leds); i++){  
        pinMode(leds[i], OUTPUT);  
    }

    //init buttons  
    for(int i = 0; i < sizeof(buttons); i++){  
        pinMode(buttons[i], INPUT);  
    }
}

void loop() {  
    //fade when game starts  
    fade();

    //start game
    start();

    //output of game
    output();
}

void output(){
    bool t1 = !values[0];
    bool t2 = t1 && values[1];
    bool t3 = values[2] || values[3];
    bool Q = !(t2 || t3);
    if(!Q){
        digitalWrite(leds[4], true);
    }else{
        digitalWrite(leds[4], false);
    }
}

void start(){
    //total of leds
    int j = 0;
    //check if user is not at 5th led
    while(j < 4){
        //loop through buttons
        for(int i = 0; i < 2; i++){
            // Read button
            buttonState[i] = digitalRead(buttons[i]);
            // check button state
            if (buttonState[i] != lastButtonState[i]) {
                // if the state has changed
                if (buttonState[i] == HIGH) {
                    //check if button 1
                    if(i == 0){
                        //select next LED
                        j++;
                    }
                    //else button 2
                    else{
                        // if the current state of the 2nd button is HIGH
                        while(i == 1){
                            //if current value of led is false, put it true
                            if(values[j] == false){
                              //put led on
                                digitalWrite(leds[j], true);
                                values[j] = true;
                                delay(50);
                            }else{
                                //put led off
                                digitalWrite(leds[j], false);
                                delay(50);
                                values[j] = false;
                            }
                            //go back to button 1?
                            i = 0;
                        }
                    }
                    //go back to button 1?
                    i = 0;
                }
            }
            // save the current state as the last state,
            // for next time through the loop
            lastButtonState[i] = buttonState[i];

            // wait a little
            delay(50);
        }
    }
}

void fade(){
    //put every led on half-on
    for(int i = 0; i < sizeof(leds); i++){
        analogWrite(leds[i], 100);
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-23 13:42:31

在C和C++中,如果要比较两个值以检查它们是否相等,则必须使用== (比较运算符)代替= (赋值运算符)。你在这里不小心用错了接线员:

代码语言:javascript
复制
while(i = 1){

在这里:

代码语言:javascript
复制
if(values[j] = false){

将它们更改为==

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41805883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档