• 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
4 Bits Digital Tube LED Display Module74HC595
#1
Witam wszystkich. Jestem tu od kilku dni i próbuję się uczyć programować. Mam dwa wyświetlacze-jeden 4 cyfrowy i drugi 8 cyfrowy. Oba sprawne - przetestowane. Pobrałem program na 4 cyfrowy i usiłuję go zrozumieć. Przetłumaczyłem komentarze na polski. Tak to wygląda.
Kod:
//Biblioteka
#include <TM74HC595Display.h>
//Piny na Arduino Uno i wyświetlaczu
int SCLK = 4;
int RCLK = 5;
int DIO = 6;
//Piny na wyświetlaczu
TM74HC595Display disp(SCLK, RCLK, DIO);
unsigned char LED_0F[10];

void setup() {
// Która dioda się zapala  
LED_0F[0] = 0x00; //Wszystkie - 8.
LED_0F[1] = 0xFF; //Żadna
LED_0F[2] = 0x7F; //1
LED_0F[3] = 0xBF; //2
LED_0F[4] = 0xDF; //3
LED_0F[5] = 0xEF; //4
LED_0F[6] = 0xF7; //5
LED_0F[7] = 0xFB; //6
LED_0F[8] = 0xFD; //7
LED_0F[9] = 0xFE; //8 kropka .
}

void loop() {
// Która cyfra na wyświetlaczu od prawej na wyświetlaczu 4 cyfrowym
int i;

for (i=0; i<10; i++) {
disp.send(LED_0F[i], 0b0001); //wysłanie cyfrowo "." do pierwszgo wskaźnika
delay(500);
}

for (i=0; i<10; i++) {
disp.send(LED_0F[i], 0b0010); //wysłanie cyfrowo "." do drugiego wskaźnika
delay(500);
}

for (i=0; i<10; i++) {
disp.send(LED_0F[i], 0b0100); //wysłanie cyfrowo "." do trzeciego wskaźnika
delay(500);
}

for (i=0; i<10; i++) {
disp.send(LED_0F[i], 0b1000); //wysłanie cyfrowo "." do czwartego wskaźnika
delay(500);
}

}
Mam pytania. Jak bym chciał żeby wyświetlał na całym 8 cyfrowym to trzeba dopisać cztery wysłania cyfrowe do odpowiedniego wskaźnika? Jak napisać żeby stan początkowy na wyświetlaczu był 0000? Jak dołożyć do tego przycisk pod pin 10 aby naciśnięcie dodawało +1 za każdym razem? Na razie tyle pytań.
 
Odpowiedź
#2
Nie mam takiego wyświetlacza, ale znalazłem w Sieci informację, że kod 0 to 0xC0.
Twój kod miałby więc postać:
Kod:
LED_0F[0] = 0xC0;
Jeśli chodzi o dodanie przycisku, to nie do końca wiem, o co Ci chodzi. Podam Ci więc kod, który zwiększy wartość zmiennej o 1 za każdym naciśnięciem przycisku. Przycisk podłączony będzie do pinu 10, a z drugiej strony do masy (nie do zasilania!). Przy uruchomieniu programu włącz sobie serial monitor, żeby obserwować efekt.

Kod:
int zmienna=0;
void setup(){
pinMode(10, INPUT_PULLUP);
Serial.begin(9600);
}
void loop(){
if(digitalRead(10)==LOW){
while(digitalRead(10)==LOW){}
zmienna++;
}
Serial.print("Wartość zmiennej: ");
Serial.println(zmienna);
}
 
Odpowiedź
#3
(04-11-2017, 20:52)krn78 napisał(a): Nie mam takiego wyświetlacza, ale znalazłem w Sieci informację, że kod 0 to 0xC0.
Twój kod miałby więc postać:
Kod:
LED_0F[0] = 0xC0;
Jeśli chodzi o dodanie przycisku, to nie do końca wiem, o co Ci chodzi. Podam Ci więc kod, który zwiększy wartość zmiennej o 1 za każdym naciśnięciem przycisku. Przycisk podłączony będzie do pinu 10, a z drugiej strony do masy (nie do zasilania!). Przy uruchomieniu programu włącz sobie serial monitor, żeby obserwować efekt.

Kod:
int zmienna=0;
void setup(){
pinMode(10, INPUT_PULLUP);
Serial.begin(9600);
}
void loop(){
if(digitalRead(10)==LOW){
while(digitalRead(10)==LOW){}
zmienna++;
}
Serial.print("Wartość zmiennej: ");
Serial.println(zmienna);
}
 
Odpowiedź
#4
(04-11-2017, 21:00)Ronin napisał(a):
(04-11-2017, 20:52)krn78 napisał(a): Nie mam takiego wyświetlacza, ale znalazłem w Sieci informację, że kod 0 to 0xC0.
Twój kod miałby więc postać:
Kod:
LED_0F[0] = 0xC0;
Jeśli chodzi o dodanie przycisku, to nie do końca wiem, o co Ci chodzi. Podam Ci więc kod, który zwiększy wartość zmiennej o 1 za każdym naciśnięciem przycisku. Przycisk podłączony będzie do pinu 10, a z drugiej strony do masy (nie do zasilania!). Przy uruchomieniu programu włącz sobie serial monitor, żeby obserwować efekt.

Kod:
int zmienna=0;
void setup(){
pinMode(10, INPUT_PULLUP);
Serial.begin(9600);
}
void loop(){
if(digitalRead(10)==LOW){
while(digitalRead(10)==LOW){}
zmienna++;
}
Serial.print("Wartość zmiennej: ");
Serial.println(zmienna);
}
naciśnięciu przycisku  pojawia się 1 i po chwili 2 bez naciśnięcia i tak w kółko. A powinno -przycisk -1 przycisk 2 - przycisk 3 i tak dalej.
Kod:
//Biblioteka Przełączniki?
#include <Bounce2.h>
//Ustawienie pinu Arduino D2
#define BUTTON_PIN 2
//
Bounce debouncer = Bounce();
byte digitBuffer[4];
int zmienna = 0;
void setup() {

 pinMode(BUTTON_PIN, INPUT_PULLUP);
 debouncer.attach(BUTTON_PIN);
 debouncer.interval(100); // interwał w ms
 Serial.begin(9600);

}
void loop()
{

 debouncer.update();
 if ( ! debouncer.read() )
  {
   zmienna = zmienna + 1;
   
   Serial.println(zmienna);
   delay(1000);
  }
}

Nie wiem co robi !. A dokładniej to chciałem uzyskać 0+1=1+1=2+1=3 itd.
 
Odpowiedź
#5
(04-11-2017, 21:06)Ronin napisał(a): naciśnięciu przycisku  pojawia się 1 i po chwili 2 bez naciśnięcia i tak w kółko. A powinno -przycisk -1 przycisk 2 - przycisk 3 i tak dalej
Kod, który Ci podałem, wykonuje właśnie taką operację (przed chwilą to sprawdziłem). Złóż układ zawierający tylko przycisk podłączony na jednym pinie do 10, a na przeciwległym do GND i wgraj mój program. Potem uruchom monitor szeregowy i obserwuj efekt. 
Teraz tylko musisz zaadaptować mój kod do swojego rozwiązania.
 
Odpowiedź
#6
(05-11-2017, 17:34)krn78 napisał(a):
(04-11-2017, 21:06)Ronin napisał(a): naciśnięciu przycisku  pojawia się 1 i po chwili 2 bez naciśnięcia i tak w kółko. A powinno -przycisk -1 przycisk 2 - przycisk 3 i tak dalej
Kod, który Ci podałem, wykonuje właśnie taką operację (przed chwilą to sprawdziłem). Złóż układ zawierający tylko przycisk podłączony na jednym pinie do 10, a na przeciwległym do GND i wgraj mój program. Potem uruchom monitor szeregowy i obserwuj efekt. 
Teraz tylko musisz zaadaptować mój kod do swojego rozwiązania.
Działa. Tylko że wyświetla Wartość zmiennej:0 w liniach aż do naciśnięcia przycisku to zmienia o jeden Wartość zmiennej:1 i dalej tak samo. Jak bym chciał dołożyć drugi przycisk to co trzeba wpisać? Bo wtedy by musiały być dwie zmienne. Przycisk 1 = zmienna a przycisk 2 = zmienna 1?
Kod:
#include <Bounce2.h>
#define BUTTON_PIN 2 // Jedności
Bounce debouncer = Bounce();
int zmienna=0;
void setup(){
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  debouncer.attach(BUTTON_PIN);
  debouncer.interval(5); // interwał w ms
 
    Serial.begin(9600);
 
}
void loop(){
debouncer.update();
if(digitalRead(2)==LOW){
while(digitalRead(2)==LOW){}
delay(1000);
zmienna++;

delay(1000);
}
Serial.print("Wartość zmiennej: ");
Serial.println(zmienna);
}
 
Odpowiedź
#7
(05-11-2017, 21:03)Ronin napisał(a): Jak bym chciał dołożyć drugi przycisk to co trzeba wpisać? Bo wtedy by musiały być dwie zmienne. Przycisk 1 = zmienna a przycisk 2 = zmienna 1?
To zależy, jaka byłaby funkcja drugiego przycisku, bo z jednej strony możesz użyć innej zmiennej (bo kto Ci tego zabroni, w końcu to Twój program i Twoje urządzenie), a z drugiej, jeśli, na przykład, drugi przycisk miałby zmniejszać wartość zmiennej (pierwszy przycisk zwiększa: 1 -> 2 -> 3 itp., natomiast drugi działałby odwrotnie: 3 -> 2 -> 1), to możesz to zrobić na tej samej zmiennej.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości