Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino 如何阻止我的代码进入从8到9再回到8的无限循环?_Arduino - Fatal编程技术网

Arduino 如何阻止我的代码进入从8到9再回到8的无限循环?

Arduino 如何阻止我的代码进入从8到9再回到8的无限循环?,arduino,Arduino,我试图通过编写一个从1到10计数的小程序,使用\u开关盒,然后使LED在每次计数器同时达到0、6或9时闪烁。无论何时它达到0或9,它都应该倒计时或倒计时,这取决于它是在底部还是顶部。如何使用我当前的代码使其工作 int COUNT=0//åtelle 0-10 inc.的计数整数。 无效设置(){ 对于(int i=2;i我有一些类似的代码: nt ports [] = {2,3,4,5,6,7,8,9}; // Digital PINS: used for display controll.

我试图通过编写一个从1到10计数的小程序,使用
\u开关盒
,然后使LED在每次计数器同时达到0、6或9时闪烁。无论何时它达到0或9,它都应该倒计时或倒计时,这取决于它是在底部还是顶部。如何使用我当前的代码使其工作

int COUNT=0//åtelle 0-10 inc.的计数整数。
无效设置(){

对于(int i=2;i我有一些类似的代码:

nt ports [] = {2,3,4,5,6,7,8,9};  // Digital PINS: used for display controll.
  int my_display [10] [7] ={      // Array with values of digital pins.
  {1,1,1,1,1,1,0},    // 0
  {0,1,1,0,0,0,0},    // 1
  {1,1,0,1,1,0,1},    // 2
  {1,1,1,1,0,0,1},    // 3
  {0,1,1,0,0,1,1},    // 4
  {1,0,1,1,0,1,1},    // 5
  {1,0,1,1,1,1,1},    // 6
  {1,1,1,0,0,0,0},    // 7
  {1,1,1,1,1,1,1},    // 8
  {1,1,1,0,0,1,1},    // 9
  };


void setup(){
  for (int i = 0; i < 8; i++){     // Set all digital pin in OUTPUT mode.
    pinMode(ports[i], OUTPUT);
  }  
}

void loop(){
 digitalWrite(9,LOW);              // Pin 9 control the display dot.
 for(int i = 0; i<10; i++ ){       // This loop numbers array.
   for(int j = 0; j<7; j++ ){      // This loop pins array.
    digitalWrite(ports[j],my_display[i][j]);    // Set Value to pin in function of number.
    }
 delay(1000);                      // Refresh time
 }

// Now start reverse count. And put visible the display dot.
 digitalWrite(9,HIGH);

 for(int i = 9; i>=0; i-- ){
   for(int j = 6; j>=0; j-- ){
    digitalWrite(ports[j],my_display[i][j]);
    }
 delay(1000);
 }
}
nt端口[]={2,3,4,5,6,7,8,9};//数字管脚:用于显示控制。
int my_display[10][7]={//带有数字管脚值的数组。
{1,1,1,1,1,1,0},    // 0
{0,1,1,0,0,0,0},    // 1
{1,1,0,1,1,0,1},    // 2
{1,1,1,1,0,0,1},    // 3
{0,1,1,0,0,1,1},    // 4
{1,0,1,1,0,1,1},    // 5
{1,0,1,1,1,1,1},    // 6
{1,1,1,0,0,0,0},    // 7
{1,1,1,1,1,1,1},    // 8
{1,1,1,0,0,1,1},    // 9
};
无效设置(){
对于(int i=0;i<8;i++){//将所有数字管脚设置为输出模式。
pinMode(端口[i],输出);
}  
}
void循环(){
digitalWrite(9,低);//引脚9控制显示点。
对于(int i=0;i=0;j--){
digitalWrite(端口[j],我的U显示[i][j]);
}
延迟(1000);
}
}
在我的代码中,如果要反转计数,只需更改循环的限制,只需将闪烁代码放在循环的末尾


PD:您说过“每次计数器同时达到0、6或9时,它都会闪烁,然后倒数并重置自身”“如果您将计数倒数到6,怎么可能到9呢?

在删除了大量意义不大的代码后(至少当涉及到手头的问题时)看起来您需要类似于以下内容的内容:

int COUNT=0;
int change = 1;

void setup(){...}

void loop() {
    switch (COUNT){
        // cases 0-9:
        // Do something
        // break;
    }

    if(COUNT == 9) { change = -1; }
    if(COUNT == 0) { change = 1; }
    COUNT += change;
}
在这里,您为每个迭代指定一个增量(1表示递增,-1表示递减),然后在每个迭代中添加该更改以实际上移或下移


然后,您需要做的唯一更改是,当您到达0和9的一端时,将增量调整到相反的方向。

我不理解您的
if(COUNT==10)
case,将
COUNT
设置为9,然后将其递减,您还希望发生什么?在您这样做之后,它是8,小于10,并将像以前一样递增。我不完全理解编码是如何工作的,这就是为什么我问如何不使其再次计数。它不会在6重置,让我编辑问题,抱歉混乱。你能试着在代码中注释一下吗?我的英语不是很好,但我想我能读懂。我把代码改成使用这个系统,但现在它只从0开始计数,直接跳到6,然后直接跳到9,但现在它正确地倒计时了?我说的跳跃,是指它从0跳到1,然后再跳到2等等,它从0直接计数到6,然后我不认为问题出在我的开关盒上,因为它们工作得很好,只是计数似乎不起作用。没关系,你的计数系统并没有像我使用的旧系统那样自动延迟,尽管它使用了我的代码,所以谢谢你。@Encore啊,我明白了,我消除了你if语句中的任何延迟最后,您需要重新添加您的
延迟(1000)
,表示歉意