Arduino Polska Forum
Wyświetlanie na wyświetlaczu 7seg - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica)
+--- Wątek: Wyświetlanie na wyświetlaczu 7seg (/watek-wy%C5%9Bwietlanie-na-wy%C5%9Bwietlaczu-7seg)



Wyświetlanie na wyświetlaczu 7seg - ksizik - 10-06-2017

Witam, zaczynam swoją przygodę z Arduino i programowaniem, zrobiłem kilka prostych przykładów z forbota, jednak chcę zrobić coś "swojego".

Na płytce stykowej mam wyświetlacz 7 segmentowy oraz klawiaturę membranową. Przejrzałem kilka tematów o wyświetlaczu i kilka o klawiaturze, ale nie do końca chce mi wypalić mix obu programów. Chciałbym najzwyczajniej w świecie wyświetlić wybrana na klawiaturze liczbę na wyświetlaczu...

Wyświetlacz podłączony do pinów 2, 3, 4, 5, 6, 7, 8 natomiast klawiatura wiersze do  9, 10, 11 a kolumny do 12 i 13.

Kod:
#include "Keypad.h"
#include "SevSeg.h"
SevSeg liczba;

const byte ROWS = 3; // ile wierszy
const byte COLS = 2; //ile kolumn

byte rowPins[ROWS] = {9, 10, 11}; //piny wierszy
byte colPins[COLS] = {12, 13}; //piny kolum

char keys[ROWS][COLS] = {
 {'1','2'},
 {'4','5'},
 {'7','8'},
};

Keypad klawiatura = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); //inicjalizacja klawiatury

void setup(){
 
 byte numDigits = 1;  
 byte digitPins[] = {1};
 byte segmentPins[] = {2,3,4,5,6,7,8};
 bool resistorsOnSegments = true;
 byte hardwareConfig = COMMON_ANODE;
 liczba.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
}

void loop(){
 byte klawisz = klawiatura.getKey();
 if (klawisz)
 liczba.setNumber(klawisz);
 liczba.refreshDisplay();
 
 }

Po wgraniu powyższego kodu na wyświetlaczu od razu wyświetla mi się 0, jednak po wciśnięciu przycisku zapala się pozioma kreska segmentu g.

Wyświetlacz mam anodą podłączony bezpośrednio do +5V, i nie wiem co wpisać w digitPins, bo wyczytałem, że tego używa się dla sterowania przez tranzystor a nie mogę tego wywalić bo się nie kompiluje...

Naprowadzi ktoś na dobrą drogę co jest nie tak?
Pozdrawiam, ksizik.


RE: Wyświetlanie na wyświetlaczu 7seg - adix - 12-06-2017

bo ty z klawiatury nie odczytujesz np. numer zero tylko 49 ,1>>50,2>>51, to kod ascii
musisz go przekonwertować na przykład użyć switch:
Kod:
switch(klawisz){
49 case: klawisz=0;
break;
50 case: klawisz=1;
break;}



RE: Wyświetlanie na wyświetlaczu 7seg - Robson Kerman - 14-06-2017

Kolego Adix, klawiatura membranowa to zwykła matryca przycisków i nie wysyła ona żadnych kodów ASCII.
Instrukcja makeKeymap(keys) pobiera dwuwymiarową tablicę keys, która to nomen omen jest tablicą znaków char zdefiniowaną przez Ksizika.
Problem polega na tym, że funkcja setNumber oczekuje liczby, a dostaje char.
Do wyświetlania znaków char lub stringów służy funkcja setChars(char str[])
Pamiętać należy jedynie, że muszą być to znaki alfanumeryczne, minus i spacja.


RE: Wyświetlanie na wyświetlaczu 7seg - adix - 15-06-2017

Wybacz nie zauważyłem makeKeymap(keys) tej instrukcji w takim przypadku musi to działać.

klawisz- Czy tu masz poprawne wpisy z klawiatury spróbuj wydrukować to w terminalu,
ogólnie ma to działać poprawnie.


RE: Wyświetlanie na wyświetlaczu 7seg - Robson Kerman - 15-06-2017

No zadziała gdy linię liczba.setNumber(klawisz) ;
zamienimy na liczba.setChars(klawisz);


RE: Wyświetlanie na wyświetlaczu 7seg - adix - 15-06-2017

Czyli źle konwertuje zrób to na piechotę.

A jeśli wyślesz twardo np.6,7,3 to poprawnie wyświetla?