簡體   English   中英

Arduino 8x8 LED矩陣不會關閉

[英]Arduino 8x8 LED matrix won't turn off

因此,我正在學習如何使用arduino控制8x8 LED矩陣,但是由於某些原因,我的代碼無法正常工作。 我現在有8行(每個連接到它自己的引腳,從12-5)和4列(每個都有自己的引腳,引腳0-3)正在工作。 我想用我的LED做出蛇形的設計,所以它會沿對角線移動。 該代碼正在工作,然后我決定添加兩行代碼(現在我已刪除了),但仍無法正常工作。 發生的是所有LED永久點亮,而不是一次點亮。

編輯:我知道使用延遲通常不好,以及我本應該使用開關盒的事實,但是我認為這很簡單,不必擔心它。

這是代碼:

int pinnum = 13;
int lastpin = 0;
int col = 0;
int k;

void setup() {  //runs once
//  initialize pins as outputs
  for(int pinnum; pinnum >= lastpin; pinnum--) 
  {
    pinMode(pinnum, OUTPUT);
  }
  for(int i = 5; i <= 13; i++) //starts with all of them off
  {
    digitalWrite(i,LOW);
  }
  for(int i = 0; i <= 4; i++) //starts with all of them off
  {
    digitalWrite(i, HIGH);
  }

}//   END SETUP

void loop() {

 pinon(12);
 togglecol();
 delay(1000);

 pinon(11);
togglecol();
 delay(1000);

 pinon(10);
 togglecol();
 delay(1000);

 pinon(9);
 togglecol();
 delay(1000);

 pinon(8);
 togglecol();
 delay(1000);

 pinon(7);
 togglecol();
 delay(1000);

 pinon(6);
 togglecol();
 delay(1000);

 pinon(5);
 togglecol();
 delay(1000);
}

void togglecol() 
{
 if(col % 4 == 1) //column = 1, pin 3
 {
  digitalWrite(0, HIGH);
  digitalWrite(1, HIGH);
  digitalWrite(2, HIGH);
  digitalWrite(3, LOW);
 }
 else if(col % 4 == 2) //COLUMN = 2, PIN 2
 {
  digitalWrite(0, HIGH); 
  digitalWrite(1, HIGH);
  digitalWrite(2, LOW);
  digitalWrite(3, HIGH);
 }
 else if(col % 4 == 3) //COLUMN = 3, PIN 1
 {
  digitalWrite(0, HIGH); 
  digitalWrite(1, LOW);
  digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);
 }
 else if(col % 4 == 0) //  COLUMN 3, PIN 0
 {
  digitalWrite(0, LOW); 
  digitalWrite(1, HIGH);
  digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);
 }
 col++;
} //END TOGGLECOL



void pinon(int pin)
{
  for(k = 5; k <= 13; k++)  //turning all rows off
  {
    digitalWrite(k, LOW);
  }
    digitalWrite(pin, HIGH); //activating correct row again
}//END PINON`

所以我認為這里至少有一個錯誤

void setup() {  //runs once
//  initialize pins as outputs
  for(int pinnum; pinnum >= lastpin; pinnum--) 
  {
    pinMode(pinnum, OUTPUT);
  }

在此之上,您設置pinnum = 13但在您的for循環中您說for(int pinnum...

這會將pinnum重新初始化為0,因此您的for循環不會出錯。

您可以在這里測試此理論http://www.compileonline.com/compile_cpp_online.php

只需復制並粘貼以下內容,然后點擊編譯即可看到不同之處

//Working for loop

#include <iostream>

using namespace std;

int main()
{
   cout << "Hello World" << endl; 
   int a = 10;

   for(a; a>0; a--){
      cout << a << endl;       
   }
   return 0;
}

然后嘗試

//For loop like yours
#include <iostream>

using namespace std;

int main()
{
   cout << "Hello World" << endl; 
   int a = 10;

   for(int a; a>0; a--){
      cout << a << endl;           
   }
   return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM