Witam
W celach edukacyjnych użycie tego wyświetlacza ma sens, ale robisz to na zaliczenie, że chcesz się dzielić $?
Jak nie chcesz się zniechęcić to kup sobie jakiegoś oleda 128x64 i w parę minut to ogarniesz, do podłączenia 2 kabelki do danych i 2 do zasilania. Ilość błędów możliwa do zrobienia przy podłączaniu 4 cyfr segmentowych przez lajkonika jest ogromna.
A tu jest kolejna biblioteka i schematy
https://github.com/MiguelPynto/ShiftDisplay . By nie grzebać w bebechach po prostu robisz podłączenie dokładnie jak tutaj. Wystarczy rozszyfrować kolejność pinów, zwykle nr 1 jest na dole po lewej i tak do 12 odwrotnie do ruchu wskazówek zegara. U mnie jest to A11 (pin 11), B7, C4, D2, E1, F10, G5, DOT3, i poszczególne wyświetlacze od lewej 1-12, 2-9,3-8,4-6. Do procka podłączasz 3 piny i resztę masz na swoje potrzeby. Nie zapomnij o rezystorach, dla 5V coś między 250 a 700om będzie działać (ja mam 470 i świeci dość jasno).
Kodowanie jest teraz banalne, wgraj jakikolwiek przykład z biblioteki, ma działać. Jak nie działa to coś źle podłączyłeś. Sam nie widzisz to wołasz brata, ojca, kolegę i niech on popatrzy, ewentualnie wrzucasz fotkę na forum. Trzeba też wiedzieć czy jest
COMMON_CATHODE czy COMMON_ANODE, przykłady są dla obu, zmiana jednego parametru i działa z drugim rodzajem.
Zaczynasz od wyświetlenia napisu, ewentualnie liczby całkowitej:
Kod:
#include <ShiftDisplay.h>
ShiftDisplay display(COMMON_CATHODE, 4); //jaki wyswietlacz, ile modulow
void setup() {
for (int i = 199; i > -199; i--) {
// store number and show it for (xx)ms
display.set(i, ALIGN_CENTER);
display.show(50);
// add dot to stored number and show it for (xx)ms
display.changeDot(1);
display.show(50);
}
display.set("GO"); // store "GO"
}
void loop() {
display.update(); // show stored "GO" while in loop
}
Jak to działa, to ta akurat biblioteka obsługuje również float i wystarczy ją poznać:
Kod:
#include <ShiftDisplay.h>
// Arduino pin 6 connected to shift register latch, pin 7 to clock and pin 5 to data
// common anode display with 2 digits
ShiftDisplay display( COMMON_CATHODE, 4); //jak masz inny to wpisujesz np. COMMON_ANODE cyfra to liczba cyfr wyswietlacza
void setup() {}
void loop() {
static float m = 127.9;
display.set(m, 1); // float with one decimal place
m-=0.1;
// display.set(m, ALIGN_RIGHT);
display.show(100);
if(m<=-99.8) m=127.9;
}
Jak już umiesz wyświetlać floaty to dodajesz bibliotekę DS.
Kod:
#include <ShiftDisplay.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 4
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// Arduino pin 6 connected to shift register latch, pin 7 to clock and pin 5 to data
// common anode display with 2 digits
ShiftDisplay display( COMMON_CATHODE, 4);
float temp;
void setup()
{
sensors.begin();
sensors.requestTemperatures(); // Send the command to get temperatures
sensors.setWaitForConversion(0);
}
void loop() {
temp = sensors.getTempCByIndex(0);
display.update();
sensors.requestTemperatures();
if(temp>-10 && temp<100) display.set(temp, 2); // float with one decimal place
else display.set(temp,1);
display.show(1000);
}
Jak już umiesz połączyć biblioteki, możesz zacząć kombinować ze swoją wersją obsługi wyświetlacza segmentowego.
Przynajmniej wiesz, że jest dobrze wszystko połączone i sprawne. Ja jej nie znam i nie używam. Podłączyłem sobie na próbę i "u mnie działa":
Ale kabelkami się namachałem, u mnie pierwszy rejestr przesuwny jest ten po prawej.
Działa jako tako, DS trochę czasu potrzebuje i jest mignięcie, niestety wysterowanie wyświetlacza polega na kolejnym pokazywaniu każdej cyfry osobno. By tego nie było musiałby być pewnie osobny chip do sterowania tylko wyświetlaczem, komunikacji z DS nie można przerywać. Dlatego są też dedykowane drivery sprzętowe do tego.
A $ możesz wrzucić tu:
http://fundacja-sloneczko.pl/frame/pokaz...?ida=733/K .