Arduino Polska Forum

Pełna wersja: Wyświetlanie na wyświetlaczu 7seg
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
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.
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;}
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.
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.
No zadziała gdy linię liczba.setNumber(klawisz) ;
zamienimy na liczba.setChars(klawisz);
Czyli źle konwertuje zrób to na piechotę.

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