Skocz do zawartości

Arduino termometr z wyświetlaczem 7 segmentowym DallasTemperature/Onewire , program nie działa popra


krzywy187

Pomocna odpowiedź

Witam

Realizuje projekt w którym arduino odczytuje temperaturę z czujnika ds18b20 a następnie za pomocą multipleksowania wyświetla aktualną temperaturę na wyświetlaczu 7 segmenotwym x 4.

Mój problem: gdy program dochodzi do ostatniej cyfry "zatrzymuje się" na chwilę przez co psuje multipleksowanie, myślę że to wina programu, próbowałem z inna biblioteką ale tam był problem ze stablinym odczytem tak więc korzystam z biblioteki DallasTemperature.

żeby łatwiej ogarnąć co zrobiłem opisze każdy segment

1 segment

Pokazuje tylko minus gdy temperatura jest poniżej zera

2 segment

pokazuje liczbę dziesiątek chyba że temperatura jest -10

3 segment

pokazuje liczbe jedności

4 segemnt

na stałe pokazuje litere C

case od 10 do 12 ma zapisane nietypowe stany jak właśnie minus, pusty wyświetlacz albo literę C

załączam filmik z działania

mój kod:

#define SEG_A 2
#define SEG_B 3
#define SEG_C 4
#define SEG_D 5
#define SEG_E 6
#define SEG_F 7
#define SEG_G 8
#define SEG_DP 9

#include <OneWire.h>
#include <DallasTemperature.h>

int liczba1;
int liczba2;

int temp;
int time = 10;


OneWire oneWire(A0);
DallasTemperature sensors(&oneWire);



void setup() {
 Serial.begin(9600);


 pinMode(SEG_A, OUTPUT);
 pinMode(SEG_B, OUTPUT);
 pinMode(SEG_C, OUTPUT);
 pinMode(SEG_D, OUTPUT);
 pinMode(SEG_E, OUTPUT);
 pinMode(SEG_F, OUTPUT);
 pinMode(SEG_G, OUTPUT);
 pinMode(SEG_DP, OUTPUT);

 pinMode(10, OUTPUT);
 pinMode(11, OUTPUT);
 pinMode(12, OUTPUT);
 pinMode(13, OUTPUT);



 digitalWrite(SEG_A, HIGH);
 delay(300);
 digitalWrite(SEG_G, HIGH);
 delay(300);
 digitalWrite(SEG_D, HIGH);
 delay(300);
 digitalWrite(SEG_A, LOW);
 digitalWrite(SEG_G, LOW);
 digitalWrite(SEG_D, LOW);
 delay(300);


}

void loop() {



sensors.begin();


sensors.requestTemperatures();
float ds18b20 = sensors.getTempCByIndex(0);

Serial.println(sensors.getTempCByIndex(0));

temp = float (ds18b20);


int liczba1=temp/10%10;
int liczba2=temp%10;

if (liczba1<0) {liczba1=liczba1*(-1);}  
if (liczba2<0) {liczba2=liczba2*(-1);}



   digitalWrite(10, LOW); 
   digitalWrite(11, HIGH);
   digitalWrite(12, HIGH);
   digitalWrite(13, HIGH);
   digitalWrite(SEG_DP, LOW);
   if (temp<0) {SEGLED(11);} else {SEGLED(12);}
   delay(time);

   digitalWrite(10, HIGH); 
   digitalWrite(11, LOW);
   digitalWrite(12, HIGH);
   digitalWrite(13, HIGH);
   digitalWrite(SEG_DP, LOW);
   if (temp<10 && temp>-10) {SEGLED(12);} else { SEGLED(liczba1);}
   delay(time);

   digitalWrite(10, HIGH); 
   digitalWrite(11, HIGH);
   digitalWrite(12, LOW);
   digitalWrite(13, HIGH);
   digitalWrite(SEG_DP, HIGH);
   SEGLED(liczba2);
   delay(time);

   digitalWrite(10, HIGH); 
   digitalWrite(11, HIGH);
   digitalWrite(12, HIGH);
   digitalWrite(13, LOW);
   digitalWrite(SEG_DP, LOW);
   SEGLED(10);

}
void SEGLED(int cyfra){

 switch (cyfra) {
   case 0:
   digitalWrite(SEG_A, HIGH);
   digitalWrite(SEG_B, HIGH);
   digitalWrite(SEG_C, HIGH);
   digitalWrite(SEG_D, HIGH);
   digitalWrite(SEG_E, HIGH);
   digitalWrite(SEG_F, HIGH);
   digitalWrite(SEG_G, LOW);
   break;

   case 1:
   digitalWrite(SEG_A, LOW);
   digitalWrite(SEG_B, HIGH);
   digitalWrite(SEG_C, HIGH);
   digitalWrite(SEG_D, LOW);
   digitalWrite(SEG_E, LOW);
   digitalWrite(SEG_F, LOW);
   digitalWrite(SEG_G, LOW);
   break;

   case 2:
   digitalWrite(SEG_A, HIGH);
   digitalWrite(SEG_B, HIGH);
   digitalWrite(SEG_C, LOW);
   digitalWrite(SEG_D, HIGH);
   digitalWrite(SEG_E, HIGH);
   digitalWrite(SEG_F, LOW);
   digitalWrite(SEG_G, HIGH);
   break;

   case 3:
   digitalWrite(SEG_A, HIGH);
   digitalWrite(SEG_B, HIGH);
   digitalWrite(SEG_C, HIGH);
   digitalWrite(SEG_D, HIGH);
   digitalWrite(SEG_E, LOW);
   digitalWrite(SEG_F, LOW);
   digitalWrite(SEG_G, HIGH);
   break;

   case 4:
   digitalWrite(SEG_A, LOW);
   digitalWrite(SEG_B, HIGH);
   digitalWrite(SEG_C, HIGH);
   digitalWrite(SEG_D, LOW);
   digitalWrite(SEG_E, LOW);
   digitalWrite(SEG_F, HIGH);
   digitalWrite(SEG_G, HIGH);
   break;

   case 5:
   digitalWrite(SEG_A, HIGH);
   digitalWrite(SEG_B, LOW);
   digitalWrite(SEG_C, HIGH);
   digitalWrite(SEG_D, HIGH);
   digitalWrite(SEG_E, LOW);
   digitalWrite(SEG_F, HIGH);
   digitalWrite(SEG_G, HIGH);
   break;

   case 6:
   digitalWrite(SEG_A, HIGH);
   digitalWrite(SEG_B, LOW);
   digitalWrite(SEG_C, HIGH);
   digitalWrite(SEG_D, HIGH);
   digitalWrite(SEG_E, HIGH);
   digitalWrite(SEG_F, HIGH);
   digitalWrite(SEG_G, HIGH);
   break;

   case 7:
   digitalWrite(SEG_A, HIGH);
   digitalWrite(SEG_B, HIGH);
   digitalWrite(SEG_C, HIGH);
   digitalWrite(SEG_D, LOW);
   digitalWrite(SEG_E, LOW);
   digitalWrite(SEG_F, LOW);
   digitalWrite(SEG_G, LOW);
   break;

   case 8:
   digitalWrite(SEG_A, HIGH);
   digitalWrite(SEG_B, HIGH);
   digitalWrite(SEG_C, HIGH);
   digitalWrite(SEG_D, HIGH);
   digitalWrite(SEG_E, HIGH);
   digitalWrite(SEG_F, HIGH);
   digitalWrite(SEG_G, HIGH);
   break;

   case 9:
   digitalWrite(SEG_A, HIGH);
   digitalWrite(SEG_B, HIGH);
   digitalWrite(SEG_C, HIGH);
   digitalWrite(SEG_D, HIGH);
   digitalWrite(SEG_E, LOW);
   digitalWrite(SEG_F, HIGH);
   digitalWrite(SEG_G, HIGH);
   break;

   case 10:
   digitalWrite(SEG_A, HIGH);
   digitalWrite(SEG_B, LOW);
   digitalWrite(SEG_C, LOW);
   digitalWrite(SEG_D, HIGH);
   digitalWrite(SEG_E, HIGH);
   digitalWrite(SEG_F, HIGH);
   digitalWrite(SEG_G, LOW);
   break;

   case 11:
   digitalWrite(SEG_A, LOW);
   digitalWrite(SEG_B, LOW);
   digitalWrite(SEG_C, LOW);
   digitalWrite(SEG_D, LOW);
   digitalWrite(SEG_E, LOW);
   digitalWrite(SEG_F, LOW);
   digitalWrite(SEG_G, HIGH);
   break;

  case 12:
   digitalWrite(SEG_A, LOW);
   digitalWrite(SEG_B, LOW);
   digitalWrite(SEG_C, LOW);
   digitalWrite(SEG_D, LOW);
   digitalWrite(SEG_E, LOW);
   digitalWrite(SEG_F, LOW);
   digitalWrite(SEG_G, LOW);
   break;


 }
}

Link do komentarza
Share on other sites

Zmieniłem bibliotekę znów i jest nieco lepiej, znacznie wyraźniej lecz sprawne oko wychwyci szum, zauważyłem tez że diody na arduino bardzo szybko migają podczas pracy a konkretnie RX i L. RX rozumiem bo sygnalizuje dane.

#define SEG_A 2
#define SEG_B 3
#define SEG_C 4
#define SEG_D 5
#define SEG_E 6
#define SEG_F 7
#define SEG_G 8
#define SEG_DP 9

#include <OneWire.h>
#include <DS18B20.h>

#define ONEWIRE_PIN A0

int temp = 0;

byte address[8] = {0x28, 0x7, 0x0, 0x7, 0xF4, 0xCE, 0x1, 0x38};

OneWire onewire(ONEWIRE_PIN);
DS18B20 sensors(&onewire);

int liczba1;
int liczba2;
int time = 4;

void setup() {

 Serial.begin(9600);

 sensors.begin();
 sensors.request(address);


 pinMode(SEG_A, OUTPUT);
 pinMode(SEG_B, OUTPUT);
 pinMode(SEG_C, OUTPUT);
 pinMode(SEG_D, OUTPUT);
 pinMode(SEG_E, OUTPUT);
 pinMode(SEG_F, OUTPUT);
 pinMode(SEG_G, OUTPUT);
 pinMode(SEG_DP, OUTPUT);

 pinMode(10, OUTPUT);
 pinMode(11, OUTPUT);
 pinMode(12, OUTPUT);
 pinMode(13, OUTPUT);



 digitalWrite(SEG_A, HIGH);
 delay(200);
 digitalWrite(SEG_G, HIGH);
 delay(200);
 digitalWrite(SEG_D, HIGH);
 delay(200);
 digitalWrite(SEG_A, LOW);
 digitalWrite(SEG_G, LOW);
 digitalWrite(SEG_D, LOW);
 delay(200);


}

void loop() {



temp = sensors.readTemperature(address);
sensors.request(address);

Serial.println(temp);





int liczba1=temp/10%10;
int liczba2=temp%10;

if (liczba1<0) {liczba1=liczba1*(-1);}  
if (liczba2<0) {liczba2=liczba2*(-1);}



   digitalWrite(10, LOW); 
   digitalWrite(11, HIGH);
   digitalWrite(12, HIGH);
   digitalWrite(13, HIGH);
   digitalWrite(SEG_DP, LOW);
   if (temp<0) {SEGLED(11);} else {SEGLED(12);}
   delay(time);

   digitalWrite(10, HIGH); 
   digitalWrite(11, LOW);
   digitalWrite(12, HIGH);
   digitalWrite(13, HIGH);
   digitalWrite(SEG_DP, LOW);
   if (temp<10 && temp>-10) {SEGLED(12);} else { SEGLED(liczba1);}
   delay(time);

   digitalWrite(10, HIGH); 
   digitalWrite(11, HIGH);
   digitalWrite(12, LOW);
   digitalWrite(13, HIGH);
   digitalWrite(SEG_DP, HIGH);
   SEGLED(liczba2);
   delay(time);

   digitalWrite(10, HIGH); 
   digitalWrite(11, HIGH);
   digitalWrite(12, HIGH);
   digitalWrite(13, LOW);
   digitalWrite(SEG_DP, LOW);
   SEGLED(10);
   delay(time);

}
void SEGLED(int cyfra){

 switch (cyfra) {
   case 0:
   digitalWrite(SEG_A, HIGH);
   digitalWrite(SEG_B, HIGH);
   digitalWrite(SEG_C, HIGH);
   digitalWrite(SEG_D, HIGH);
   digitalWrite(SEG_E, HIGH);
   digitalWrite(SEG_F, HIGH);
   digitalWrite(SEG_G, LOW);
   break;

   case 1:
   digitalWrite(SEG_A, LOW);
   digitalWrite(SEG_B, HIGH);
   digitalWrite(SEG_C, HIGH);
   digitalWrite(SEG_D, LOW);
   digitalWrite(SEG_E, LOW);
   digitalWrite(SEG_F, LOW);
   digitalWrite(SEG_G, LOW);
   break;

   case 2:
   digitalWrite(SEG_A, HIGH);
   digitalWrite(SEG_B, HIGH);
   digitalWrite(SEG_C, LOW);
   digitalWrite(SEG_D, HIGH);
   digitalWrite(SEG_E, HIGH);
   digitalWrite(SEG_F, LOW);
   digitalWrite(SEG_G, HIGH);
   break;

   case 3:
   digitalWrite(SEG_A, HIGH);
   digitalWrite(SEG_B, HIGH);
   digitalWrite(SEG_C, HIGH);
   digitalWrite(SEG_D, HIGH);
   digitalWrite(SEG_E, LOW);
   digitalWrite(SEG_F, LOW);
   digitalWrite(SEG_G, HIGH);
   break;

   case 4:
   digitalWrite(SEG_A, LOW);
   digitalWrite(SEG_B, HIGH);
   digitalWrite(SEG_C, HIGH);
   digitalWrite(SEG_D, LOW);
   digitalWrite(SEG_E, LOW);
   digitalWrite(SEG_F, HIGH);
   digitalWrite(SEG_G, HIGH);
   break;

   case 5:
   digitalWrite(SEG_A, HIGH);
   digitalWrite(SEG_B, LOW);
   digitalWrite(SEG_C, HIGH);
   digitalWrite(SEG_D, HIGH);
   digitalWrite(SEG_E, LOW);
   digitalWrite(SEG_F, HIGH);
   digitalWrite(SEG_G, HIGH);
   break;

   case 6:
   digitalWrite(SEG_A, HIGH);
   digitalWrite(SEG_B, LOW);
   digitalWrite(SEG_C, HIGH);
   digitalWrite(SEG_D, HIGH);
   digitalWrite(SEG_E, HIGH);
   digitalWrite(SEG_F, HIGH);
   digitalWrite(SEG_G, HIGH);
   break;

   case 7:
   digitalWrite(SEG_A, HIGH);
   digitalWrite(SEG_B, HIGH);
   digitalWrite(SEG_C, HIGH);
   digitalWrite(SEG_D, LOW);
   digitalWrite(SEG_E, LOW);
   digitalWrite(SEG_F, LOW);
   digitalWrite(SEG_G, LOW);
   break;

   case 8:
   digitalWrite(SEG_A, HIGH);
   digitalWrite(SEG_B, HIGH);
   digitalWrite(SEG_C, HIGH);
   digitalWrite(SEG_D, HIGH);
   digitalWrite(SEG_E, HIGH);
   digitalWrite(SEG_F, HIGH);
   digitalWrite(SEG_G, HIGH);
   break;

   case 9:
   digitalWrite(SEG_A, HIGH);
   digitalWrite(SEG_B, HIGH);
   digitalWrite(SEG_C, HIGH);
   digitalWrite(SEG_D, HIGH);
   digitalWrite(SEG_E, LOW);
   digitalWrite(SEG_F, HIGH);
   digitalWrite(SEG_G, HIGH);
   break;

   case 10:
   digitalWrite(SEG_A, HIGH);
   digitalWrite(SEG_B, LOW);
   digitalWrite(SEG_C, LOW);
   digitalWrite(SEG_D, HIGH);
   digitalWrite(SEG_E, HIGH);
   digitalWrite(SEG_F, HIGH);
   digitalWrite(SEG_G, LOW);
   break;

   case 11:
   digitalWrite(SEG_A, LOW);
   digitalWrite(SEG_B, LOW);
   digitalWrite(SEG_C, LOW);
   digitalWrite(SEG_D, LOW);
   digitalWrite(SEG_E, LOW);
   digitalWrite(SEG_F, LOW);
   digitalWrite(SEG_G, HIGH);
   break;

  case 12:
   digitalWrite(SEG_A, LOW);
   digitalWrite(SEG_B, LOW);
   digitalWrite(SEG_C, LOW);
   digitalWrite(SEG_D, LOW);
   digitalWrite(SEG_E, LOW);
   digitalWrite(SEG_F, LOW);
   digitalWrite(SEG_G, LOW);
   break;


 }
}
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.