RowColumnScanning

LED ekranlar genellikle ortak anotlar ve ortak katotların sütunları veya tersi şeklinde düzenlenmiş LED matrisleri olarak paketlenir. İşte tipik bir örnek ve şeması:

Bunlar çok kullanışlı görüntüler olabilir. Bir matrisi kontrol etmek için, hem satırlarını hem de sütunlarını mikro denetleyicinize bağlarsınız. Sütunlar LED katotlarına bağlanır (bkz. Şekil 1), bu nedenle bu sütundaki LED'lerden herhangi birinin açılması için bir sütunun DÜŞÜK olması gerekir. Sıralar LED anotlarına bağlanır, bu nedenle tek bir LED'in açılması için sıranın YÜKSEK olması gerekir. Sıra ve sütun hem yüksek hem de düşükse, LED'den voltaj akmaz ve açılmaz.

Tek bir LED'i kontrol etmek için sütununu DÜŞÜK ve satır YÜKSEK olarak ayarlarsınız. Bir satırda birden fazla LED'i kontrol etmek için, satırı YÜKSEK olarak ayarlarsınız, sonra sütunu yüksek alırsınız, ardından sütunları DÜŞÜK veya YÜKSEK olarak uygun şekilde ayarlarsınız; DÜŞÜK sütun ilgili LED'i AÇAR, YÜKSEK sütun bunu kapatır.

İpucu - PinMode komutu kullanılarak ÇIKIŞ olarak ayarlanan pimler , aksi belirtilmedikçe DÜŞÜK olarak ayarlanmıştır

Önceden yapılmış LED matrisleri olmasına rağmen, yukarıda gösterilen şemayı kullanarak 64 LED'den kendi matrisinizi de yapabilirsiniz.

Mikrodenetleyicinin hangi pinlerini satırlara ve sütunlara bağladığınız önemli değildir, çünkü yazılımda bir şeyler atayabilirsiniz. Pimleri kablolamayı en kolay hale getirecek şekilde bağladı. Tipik bir düzen aşağıda gösterilmiştir.

Yukarıdaki şemaya göre pin bağlantılarının bir matrisi aşağıdadır:

Matris pin no.

Kürek çekmek

sütun

Arduino pin numarası

1

5

-

13

2

7

-

12

3

-

2

11

4

-

3

10

5

8

-

16 (analog pim 2)

6

-

5

17 (analog pim 3)

7

6

-

18 (analog pim 4)

8

3

-

19 (analog pim 5)

9

1

-

2

10

-

4

3

11

-

6

4

12

4

-

5

13

-

1

6

14

2

-

7

15

-

7

8

16

-

8

9

Gerekli Donanım

  • Arduino veya Genuino Kurulu
  • 8 x 8 LED Matris
  • 2 adet 10k ohm potansiyometre
  • bağlantı telleri
  • breadboard

Devre

Matrisin 16 pimi, Arduino veya Genuino kartının 16 pimine kadar kancalanır. Analog pimlerin dördü 16 ila 19 arasındaki dijital girişler olarak kullanılır. Pimlerin sırası koddaki iki dizide atanır.

Analog pim 0 ve 1'e bağlı iki potansiyometre, yanan bir LED'in matristeki hareketini kontrol eder.

büyütmek için resme tıklayın

Şematik

resmi büyütmek için tıklayın .

Kod


/*
  Row-Column Scanning an 8x8 LED matrix with X-Y input

  This example controls an 8x8 LED matrix using two analog inputs.

  This example works for the Lumex LDM-24488NI Matrix. See
  http://sigma.octopart.com/140413/datasheet/Lumex-LDM-24488NI.pdf
  for the pin connections.

  For other LED cathode column matrixes, you should only need to change the pin
  numbers in the row[] and column[] arrays.

  rows are the anodes
  cols are the cathodes
  ---------

  Pin numbers:
  Matrix:
  - digital pins 2 through 13,
  - analog pins 2 through 5 used as digital 16 through 19
  Potentiometers:
  - center pins are attached to analog pins 0 and 1, respectively
  - side pins attached to +5V and ground, respectively

  created 27 May 2009
  modified 30 Aug 2011
  by Tom Igoe

  This example code is in the public domain.

  http://www.arduino.cc/en/Tutorial/RowColumnScanning

  see also http://www.tigoe.net/pcomp/code/category/arduinowiring for more
*/

// 2-dimensional array of row pin numbers:
const int row[8] = {
  2, 7, 19, 5, 13, 18, 12, 16
};

// 2-dimensional array of column pin numbers:
const int col[8] = {
  6, 11, 10, 3, 17, 4, 8, 9
};

// 2-dimensional array of pixels:
int pixels[8][8];

// cursor position:
int x = 5;
int y = 5;

void setup() {
  // initialize the I/O pins as outputs iterate over the pins:
  for (int thisPin = 0; thisPin < 8; thisPin++) {
    // initialize the output pins:
    pinMode(col[thisPin], OUTPUT);
    pinMode(row[thisPin], OUTPUT);
    // take the col pins (i.e. the cathodes) high to ensure that the LEDS are off:
    digitalWrite(col[thisPin], HIGH);
  }

  // initialize the pixel matrix:
  for (int x = 0; x < 8; x++) {
    for (int y = 0; y < 8; y++) {
      pixels[x][y] = HIGH;
    }
  }
}

void loop() {
  // read input:
  readSensors();

  // draw the screen:
  refreshScreen();
}

void readSensors() {
  // turn off the last position:
  pixels[x][y] = HIGH;
  // read the sensors for X and Y values:
  x = 7 - map(analogRead(A0), 0, 1023, 0, 7);
  y = map(analogRead(A1), 0, 1023, 0, 7);
  // set the new pixel position low so that the LED will turn on in the next
  // screen refresh:
  pixels[x][y] = LOW;

}

void refreshScreen() {
  // iterate over the rows (anodes):
  for (int thisRow = 0; thisRow < 8; thisRow++) {
    // take the row pin (anode) high:
    digitalWrite(row[thisRow], HIGH);
    // iterate over the cols (cathodes):
    for (int thisCol = 0; thisCol < 8; thisCol++) {
      // get the state of the current pixel;
      int thisPixel = pixels[thisRow][thisCol];
      // when the row is HIGH and the col is LOW,
      // the LED where they meet turns on:
      digitalWrite(col[thisCol], thisPixel);
      // turn the pixel off:
      if (thisPixel == LOW) {
        digitalWrite(col[thisCol], HIGH);
      }
    }
    // take the row pin low to turn off the whole row:
    digitalWrite(row[thisRow], LOW);
  }
}

See Also

  • pinMode()
  • for()
  • digitalWrite()
  • if()
  • map()

  • Writing Functions- Tanımlanmış bir görevi gerçekleştirmek için modüler kod parçaları oluşturun.
  • For Loop Iteration- Bir Döngü için birden fazla LED'i kontrol edin.
  • Arrays- Loop için bir dizinin nasıl kullanılacağını gösteren bir varyasyon.
  • If Statement- Değişen giriş koşullarına bağlı olarak çıkış koşullarını değiştirmek için bir if ifadesi nasıl kullanılır.
  • LED Bar Graph- Bir LED çubuk grafik nasıl yapılır.


There is a more complex example in the Arduino playground. Diğer örnekler Tom Igoe'un blogunda bulunabilir :