Menu
CoddyTech

Wzory cyfr w bajtach

Część sekcji Wyświetlacze i czujniki ścieżki Arduino w Coddy. Lekcja 2 z 24.

Siedem wierszy digitalWrite() dla każdej cyfry to dużo kodu. Zapisz każdą cyfrę jako wzorzec: jeden bit odpowiada segmentowi, 1 oznacza, że segment świeci, a 0, że jest wyłączony.

byte to liczba całkowita od 0 do 255, składająca się z ośmiu bitów. Zapisz ją w systemie binarnym, dodając z przodu 0b. Odczytuj bity od prawej strony: ostatni bit to segment a, poprzedni to b i tak dalej, aż do g.

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

W tablicy zmieści się dziesięć wzorców, więc digits[3] to wzorzec cyfry 3. bitRead(), znana z licznika binarnego, odczytuje jeden bit wzorca, licząc od prawej strony i zaczynając od 0:

bitRead(0b0000110, 0)  // 0: segment a jest wyłączony
bitRead(0b0000110, 1)  // 1: segment b jest zapalony

Funkcja może przejść przez siedem bitów za pomocą pętli for i ustawić każdy pin segmentu, dzięki czemu narysowanie dowolnej cyfry wymaga jednego wywołania: showDigit(7);

challenge icon

Wyzwanie

Średni

W kodzie początkowym są wszystkie wzory oprócz 4 i 7, a loop() wyświetla 1, 4 i 7.

  • uzupełnij wzory dla 4 (segmenty b, c, f, g) i 7 (a, b, c)
  • napisz showDigit(n): dla każdego i od 0 do 6 ustaw segmentPins[i] na LOW, gdy bit i w digits[n] ma wartość 1, a na HIGH, gdy ma wartość 0

Naciśnij Run, a następnie Check.

Spróbuj swoich sił

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

// Jeden wzorzec na cyfrę, odczytywany od prawej: ostatni bit odpowiada segmentowi a.
//                     gfedcba
const byte digits[10] = {
  0b0111111,  // 0
  0b0000110,  // 1
  0b1011011,  // 2
  0b1001111,  // 3
  0b0000000,  // 4: uzupełnij
  0b1101101,  // 5
  0b1111101,  // 6
  0b0000000,  // 7: uzupełnij
  0b1111111,  // 8
  0b1101111   // 9
};

void showDigit(int n) {
  // zapal segmenty wskazane przez digits[n], a pozostałe zgaś
}

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 iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Wyświetlacze i czujniki

Poćwicz samodzielnie: Edytor online Arduino