• 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
Wyswietlacz 7 segmentowy + db18b20
#1
Witam wszystkich, dopiero co zaczynam zabawe z arduino i mam problem aby temperatura odczytana z czujnika db18b20 pokazywała mi sie na wyswietlaczu. szukalem w necie i jedynie co udalo mi sie znalezc poprawnie dzialajacy kod aby w ogole cokolwiek wyswietlic, jednak zczytanie temperatury i jej wyswietlenie nie dziala. Czy ktos moglby sprawdzic co w ponizszym kodzie moze byc zle? W zalaczniku jak podlaczylem wyswietlacz.

Kod:
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 13
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

int a = 2;
int b = 3;
int c = 4;
int d = 5;
int e = 12;
int f = 7;
int g = 8;
int GND1 = 6;
int GND2 = 11;
int GND3 = 10;
int GND4 = 9;
int dig1 = 0;
int dig2 = 0;
int dig3 = 0;
int dig4 = 0;
int Temp;
void setup(void)
{
//Serial.begin(9600); //Begin serial communication
// Serial.println("Arduino Digital Temperature // Serial Monitor Version"); //Print a message
 
 sensors.begin();
 pinMode(a, OUTPUT);
 pinMode(b, OUTPUT);
 pinMode(c, OUTPUT);
 pinMode(d, OUTPUT);
 pinMode(e, OUTPUT);
 pinMode(f, OUTPUT);
 pinMode(g, OUTPUT);
 pinMode(GND1, OUTPUT);
 pinMode(GND2, OUTPUT);
 pinMode(GND3, OUTPUT);
 pinMode(GND4, OUTPUT);
}

void loop(void)
{
sensors.requestTemperatures();
  //Serial.print("Temperature is: ");
 //Serial.println(sensors.getTempCByIndex(0)); // Why "byIndex"? You can have more than one IC on the same bus. 0 refers to the first IC on the wire
 //Update value every 1 sec.
 delay(1000);
   dig1 = Temp / 10;
   dig2 = Temp - (dig1 * 10);
   dig3 = 10;
   dig4 = 11;


   
       digitalWrite( GND4, HIGH);    //digit 4
       DisplayNumber(dig4);
       delay(400);
       digitalWrite( GND4, LOW);

       digitalWrite( GND3, HIGH);    //digit 3
       DisplayNumber(dig3);
       delay(400);
       digitalWrite( GND3, LOW);

       digitalWrite( GND2, HIGH);   //digit 2
       DisplayNumber(dig2);
       delay(400);
       digitalWrite( GND2, LOW);

       digitalWrite( GND1, HIGH);   //digit 1
       DisplayNumber(dig1);
       delay(400);
       digitalWrite( GND1, LOW);
 
}
void DisplayNumber(int x) {
 switch (x) {
   case 0: zero(); break;
   case 1: one(); break;
   case 2: two(); break;
   case 3: three(); break;
   case 4: four(); break;
   case 5: five(); break;
   case 6: six(); break;
   case 7: seven(); break;
   case 8: eight(); break;
   case 9: nine(); break;
   case 10: o(); break;
   case 11: C(); break;
 }
}



void zero()
{
 digitalWrite( a, LOW);
 digitalWrite( b, LOW);
 digitalWrite( c, LOW);
 digitalWrite( d, LOW);
 digitalWrite( e, LOW);
 digitalWrite( f, LOW);
 digitalWrite( g, HIGH);
}

void one()
{
 digitalWrite( a, HIGH);
 digitalWrite( b, LOW);
 digitalWrite( c, LOW);
 digitalWrite( d, HIGH);
 digitalWrite( e, HIGH);
 digitalWrite( f, HIGH);
 digitalWrite( g, HIGH);
}

void two()
{
 digitalWrite( a, LOW);
 digitalWrite( b, LOW);
 digitalWrite( c, HIGH);
 digitalWrite( d, LOW);
 digitalWrite( e, LOW);
 digitalWrite( f, HIGH);
 digitalWrite( g, LOW);
}

void three()
{
 digitalWrite( a, LOW);
 digitalWrite( b, LOW);
 digitalWrite( c, LOW);
 digitalWrite( d, LOW);
 digitalWrite( e, HIGH);
 digitalWrite( f, HIGH);
 digitalWrite( g, LOW);
}

void four()
{
 digitalWrite( a, HIGH);
 digitalWrite( b, LOW);
 digitalWrite( c, LOW);
 digitalWrite( d, HIGH);
 digitalWrite( e, HIGH);
 digitalWrite( f, LOW);
 digitalWrite( g, LOW);
}

void five()
{
 digitalWrite( a, LOW);
 digitalWrite( b, HIGH);
 digitalWrite( c, LOW);
 digitalWrite( d, LOW);
 digitalWrite( e, HIGH);
 digitalWrite( f, LOW);
 digitalWrite( g, LOW);
}

void six()
{
 digitalWrite( a, LOW);
 digitalWrite( b, HIGH);
 digitalWrite( c, LOW);
 digitalWrite( d, LOW);
 digitalWrite( e, LOW);
 digitalWrite( f, LOW);
 digitalWrite( g, LOW);
}

void seven()
{
 digitalWrite( a, LOW);
 digitalWrite( b, LOW);
 digitalWrite( c, LOW);
 digitalWrite( d, HIGH);
 digitalWrite( e, HIGH);
 digitalWrite( f, HIGH);
 digitalWrite( g, HIGH);
}

void eight()
{
 digitalWrite( a, LOW);
 digitalWrite( b, LOW);
 digitalWrite( c, LOW);
 digitalWrite( d, LOW);
 digitalWrite( e, LOW);
 digitalWrite( f, LOW);
 digitalWrite( g, LOW);
}

void nine()
{
 digitalWrite( a, LOW);
 digitalWrite( b, LOW);
 digitalWrite( c, LOW);
 digitalWrite( d, LOW);
 digitalWrite( e, HIGH);
 digitalWrite( f, LOW);
 digitalWrite( g, LOW);
}
void o()
{
 digitalWrite( a, LOW);
 digitalWrite( b, LOW);
 digitalWrite( c, HIGH);
 digitalWrite( d, HIGH);
 digitalWrite( e, HIGH);
 digitalWrite( f, LOW);
 digitalWrite( g, LOW);
}

void C()
{
 digitalWrite( a, LOW);
 digitalWrite( b, HIGH);
 digitalWrite( c, HIGH);
 digitalWrite( d, LOW);
 digitalWrite( e, LOW);
 digitalWrite( f, LOW);
 digitalWrite( g, HIGH);
}


Załączone pliki Miniatury
   
 
Odpowiedź
#2
Błędny schemat .
Po drugie aby wyświetlać co innego na każdym LCD musisz zrobić odświeżanie używając przerwania programowego.
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#3
Cytat:Po drugie aby wyświetlać co innego na każdym LCD musisz zrobić odświeżanie używając przerwania programowego.

mam rozumieć, że do każdej osobnej cyferki na wyświetlaczu 4-ro cyfrowym muszę zrobić osobne odświeżanie? Są tak wstawione dealay'e po każdej z wyświetlanych cyfr.
 
Odpowiedź
#4
Wyświetlacze takie jak Twój produkowane są w dwóch konfiguracjach: ze wspólną anodą lub ze wspólną katodą. To tak, jakbyś połączył kilka LED'ów tak, że łączysz ze sobą wszystkie katody (i to włączasz do masy), a na anody podajesz osobno sygnał, wtedy ząłączają się konkretne LED'y (segmenty wyświetlacza).
Przy okazji: tutaj znajdziesz dość dużo o tym czujniku (łącznie z przykładowymi połączeniami, kodami, czym i dlaczego), a tutaj trochę na temat samego wyświetlacza i tego, co miałem na myśli.
 
Odpowiedź
#5
Dzieki za cenne info, tylko że ja mam wyświetlacz taki jak w załączniku z numerami LFD056BUE-101A


Załączone pliki Miniatury
   
 
Odpowiedź
#6
Tutaj jest jakiś przykład. Może Ci pomoże.
 
Odpowiedź
#7
Dzięki za odpowiedź, chodzi mi bardziej o to jak mam wyświetlić dane z czujnika db18b20 na tym wyświetlaczu? schemat połączeń mam i coś się wyświetla jednak nie potrafię danych z czujnika przerzucić na wyświetlacz.

wyczytałem gdzieś, że można połączyć ten typ wyświetlacza za pomocą jakiegoś mikroprocesora czy coś. W zestawie otrzymałem coś takiego PCF8574N. W innych schematach widziałem inne numery. Czy to mi pomoże zniwelować ilość kabli podłączonych do arduino? Bo nie ukrywam, że zależy mi na tym bo chce jeszcze inne rzeczy podpiąć.
 
Odpowiedź
#8
(05-12-2017, 19:43)hazi18 napisał(a): W zestawie otrzymałem coś takiego PCF8574N. W innych schematach widziałem inne numery. Czy to mi pomoże zniwelować ilość kabli podłączonych do arduino? Bo nie ukrywam, że zależy mi na tym bo chce jeszcze inne rzeczy podpiąć.
Zniwelować nie, ale zwiększyć ilość pinów Arduino już tak. Tutaj masz przykład. Używałem takiego układu (do testów tylko co prawda, z ciekawości), ale zachowuje się poprawnie.
Tutaj natomiast znajdziesz sposób wyświetlania temperatury. Co prawda autor zrobił to za pomocą innego czujnika (LM35), ale to nie powinno być problemem. Użył za to rejestru przesuwnego (74HC595), dzięki czemu ograniczył ilość przewodów wychodzących z Arduino, a o to Ci chyba chodziło.
 
Odpowiedź
#9
Dzięki wielkie, chodziło mi o zwiększenie ilości pinów aby móc dodatkowo coś podłączyć. Akurat nie mam czasu aby do tego zajrzeć, odezwę się jak sprawdzę.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości