30-09-2018, 15:13
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:
jakby ktoś wolał na Pastebinie:
Dodam że moja przygoda z arduino nie jest zbyt długa . Proszę kogoś doświadczonego o pomoc, w wyjaśnieniu owego błędu. Pozdrawiam
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 . Proszę kogoś doświadczonego o pomoc, w wyjaśnieniu owego błędu. Pozdrawiam