sterowanie 7-segmentowym wyświetlaczem z konsoli szeregowej



Postanowiłem rozbudować mój program o możliwość wymuszenia wyświetlanej cyfry z klawiatury komputera.
Oto kod:

int incomingByte = 0;
int timer = 500;
int numbers[]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09,0x61};

void setup() {
  Serial.begin(9600);
  for (int i=6;i<14;i++) {
    pinMode(i,OUTPUT);
  }
}

void loop() {
  if (Serial.available() > 0) {
    incomingByte = Serial.read();
    if((incomingByte > 47) && (incomingByte < 58)) {
      displayNum(incomingByte - 48);
      Serial.print("odczytano cyfre ");
      Serial.println(incomingByte,BYTE);
    }
    else {
      displayNum(10);
      Serial.println("odczytano inny znak");
    }
  }
}

void displayNum(int num) {
  for (int i=0; i<8; i++) {
    digitalWrite(i+6, bitRead(numbers[num],7-i));
  }
}


Do testowania wykorzystałem HyperTerminal. Należy wybrać port COM, pod którym widoczny jest Arduino (USB Serial Port w Menadżerze urządzeń) oraz skonfigurować odpowiednio:
Liczba bitów na sekundę: 9600 - zgodnie z ustawieniami portu w programie
Bity danych: 8
Parzystość: Brak
Bity stopu: 1
Sterowanie przepływem: Brak

Przy okazji uświadomiłem sobie, że funkcje dostarczane w IDE nie pozwalają na ustawienie takich parametrów jak bity danych, parzystość czy bit stopu. Można tylko ustawić liczbę bitów (baud rate). Być może w przyszłości będzie nam to potrzebne. Jeżeli komuś jednak bardzo zależy na tym teraz, tutaj może znaleźć kilka przydatnych informacji.

Z poziomu konsoli wpisujemy odpowiednie znaki. Jeśli są to cyfry od 0 do 9, to są one wyświetlane na wyświetlaczu. Każdy inny znak wyświetlany jest jako E.
Dodatkowo na konsoli szeregowej pojawia się informacja o naciśniętym znaku.



Rezultat:

Komentarze