Menu
CoddyTech

Baytlardaki Rakam Desenleri

Coddy'nin Arduino Journey'sinin Ekranlar ve Sensörler bölümünün bir parçası. Ders 2 / 24.

Her rakam için yedi digitalWrite() satırı oldukça fazla kod demek. Her rakamı bir desen olarak sakla: her bit bir segmenti temsil eder; 1 yanık, 0 sönük demektir.

byte, sekiz bitten oluşan ve 0 ile 255 arasında bir tam sayıdır. Önüne 0b koyarak ikili biçimde yaz. Bitleri sağdan oku: son bit a segmentidir, ondan önceki b segmentidir ve bu şekilde g segmentine kadar devam eder.

//           gfedcba
byte one = 0b0000110;  // b ve c: birer 1

On desen bir diziye sığar; böylece digits[3], 3'ün desenidir. İkili sayaçtan gelen bitRead(), sağdan başlayıp 0'dan sayarak bir bitini okur:

bitRead(0b0000110, 0)  // 0: segment a sönük
bitRead(0b0000110, 1)  // 1: segment b yanıyor

Bir fonksiyon, yedi biti for döngüsüyle dolaşıp her segment pinini ayarlayabilir; böylece herhangi bir rakamı çizmek için tek bir çağrı yeterlidir: showDigit(7);

challenge icon

Görev

Orta

Başlangıç kodunda 4 ve 7 dışındaki tüm desenler var ve loop() 1, 4 ve 7'yi gösteriyor.

  • 4'ü (segmentler b, c, f, g) ve 7'yi (a, b, c) tamamla
  • showDigit(n) fonksiyonunu yaz: 0'dan 6'ya kadar her i için, digits[n] içindeki i biti 1 olduğunda segmentPins[i] değerini LOW, 0 olduğunda HIGH yap

Run'a, ardından Check'e bas.

Kendin dene

const int segmentPins[7] = {2, 3, 4, 5, 6, 7, 8};  // a, b, c, d, e, f, g

// Her rakam için bir desen; sağdan sola okuyun: en sağdaki bit, a segmentidir.
//                     gfedcba
const byte digits[10] = {
  0b0111111,  // 0
  0b0000110,  // 1
  0b1011011,  // 2
  0b1001111,  // 3
  0b0000000,  // 4: doldurun
  0b1101101,  // 5
  0b1111101,  // 6
  0b0000000,  // 7: doldurun
  0b1111111,  // 8
  0b1101111   // 9
};

void showDigit(int n) {
  // digits[n] için segmentleri yakın, diğerlerini söndürün
}

void setup() {
  for (int i = 0; i < 7; i++) {
    pinMode(segmentPins[i], OUTPUT);
  }
}

void loop() {
  showDigit(1);
  delay(1000);
  showDigit(4);
  delay(1000);
  showDigit(7);
  delay(1000);
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Ekranlar ve Sensörler bölümündeki tüm dersler

Kendi başına pratik yap: Arduino playground