• 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
Wyświetlanie na wyświetlaczu 7seg
#1
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.
 
Odpowiedź
#2
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;}
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#3
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.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#4
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.
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#5
No zadziała gdy linię liczba.setNumber(klawisz) ;
zamienimy na liczba.setChars(klawisz);
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#6
Czyli źle konwertuje zrób to na piechotę.

A jeśli wyślesz twardo np.6,7,3 to poprawnie wyświetla?
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości