• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Wyswietlacz 7-segmentowy
#1
Witam, mam problem z kodem obsługującym dwa 7-segmentowe wyświetlacze ze wspólną anodą.
A mianowicie, aktualnie program liczy od 0 do 9999. do 99 jest wszystko w porządku, ale z przejściem na 3 cyfrę coś się knoci, dalej liczy od 100 w górę, ale na pierwszej cyfrze jest liczba setek. Oto kod:
Kod:
int digits[10] = {0b11000000, 0b11111001, 0b10100100, 0b10110000, 0b10011001, 0b10010010, 0b10000010, 0b11111000, 0b10000000, 0b10010000};
//zdefiniowanie wszystkich liczb na wyswietlaczu 7 segmentowym (w kolejnosci od 0 do 9) stany sa odwrocone, 0 jest gdy swieci, 1 gdy nie swieci.
void setup() {
 DDRA = 0xFF; //zdefiniowanie wszystkich portow A jako wyjscia
 PORTA = 0xFF; //wszystkie wyjscia portu A maja stan wysoki, wyswietlacz ze wspolna anoda
 pinMode(2, OUTPUT); // pierwsza od prawej cyfra
 pinMode(3, OUTPUT); // druga od prawej cyfra
 pinMode(4, OUTPUT); // trzecia...
 pinMode(5, OUTPUT); // czwarta ..
}

void disp(char *c) {
 int _time = millis();
 char tmp[2];
 while(millis()-_time < 100) { //jedna cyfra ma byc pokazywana przez 100 milisec
   for (int j = 0; j < strlen(c); j++) { //petla dla kazdej cyfry
    digitalWrite(j+2, HIGH); //zapalenie odpowiedniej cyfry. jest +2 bo cyfry zaczynaja sie od drugiego pinu
     tmp[0] = c[j];
     tmp[1] = '\0'; //zakonczenie tablicy
     delay(1); //niewiem dlaczego, ale bez tego delaya nie chce dzialac :/ Pokazuja sie razem te same cyfry na 2 pierwszych cyfrach(od prawej)
     PORTA = digits[atoi(tmp)]; // ustawianie portu A do konkretnej liczby
    digitalWrite(j+2, LOW);
   }
 }
}

void invert(char *c) { //funkcja odwracajaca tablice znakow np z takiej postaci {5, 1, 2, 7} do {7, 2, 1, 5}. Ta funkcja jest dlatego, iz cyfry sa wyrywnane do prawej
 char temp[5];
 for(int i = 0; i < 5; i++) {
   temp[i] = c[4-i];
 }
   for(int i = 0; i < 5; i++) {
   c[i]=temp[i];
 }
}

void loop() {
 char _buffer [5];
 for(int i = 0; i < 9999; i++) {
     char _buffer [5];
     itoa(i, _buffer, 10); //konwersia liczby (int) do tablicy znakow (char)
     invert(_buffer); //odwrocenie tablicy znakow (char)
     disp(_buffer); //funkcja wyswietlajaca liczbe na wyswietlaczu
 }
}

jakby ktoś wolał na Pastebinie:
Kod:
https://pastebin.com/wACF88Ub

Dodam że moja przygoda z arduino nie jest zbyt długa  Big Grin. Proszę kogoś doświadczonego o pomoc, w wyjaśnieniu owego błędu. Pozdrawiam
 
Odpowiedź
  


Wiadomości w tym wątku
Wyswietlacz 7-segmentowy - przez MrRed - 30-09-2018, 15:13
RE: Wyswietlacz 7-segmentowy - przez es2 - 30-09-2018, 21:48
RE: Wyswietlacz 7-segmentowy - przez MrRed - 01-10-2018, 20:52
RE: Wyswietlacz 7-segmentowy - przez kaczakat - 02-10-2018, 01:23
RE: Wyswietlacz 7-segmentowy - przez es2 - 02-10-2018, 09:12
RE: Wyswietlacz 7-segmentowy - przez MrRed - 02-10-2018, 15:10
RE: Wyswietlacz 7-segmentowy - przez es2 - 02-10-2018, 15:36
RE: Wyswietlacz 7-segmentowy - przez MrRed - 02-10-2018, 16:28
RE: Wyswietlacz 7-segmentowy - przez MrRed - 02-10-2018, 16:32
RE: Wyswietlacz 7-segmentowy - przez es2 - 02-10-2018, 19:08
RE: Wyswietlacz 7-segmentowy - przez MrRed - 02-10-2018, 20:47
RE: Wyswietlacz 7-segmentowy - przez es2 - 02-10-2018, 20:53

Skocz do:


Przeglądający: 1 gości