Skocz do zawartości

odczyt temperatury z dwóch czujników i LCD


koragreg

Pomocna odpowiedź

Cześć

mam taki kod który po wgraniu do arduino uno działa

// Program odczytuje temperaturę kilku czujników

 

#include <OneWire.h>

#include <DS18B20.h>

 

// Numer pinu do którego podłaczasz czujnik

#define ONEWIRE_PIN 2

 

// Ilość czujników

#define SENSORS_NUM 2

 

// Adresy czujników

const byte address[SENSORS_NUM][8] PROGMEM = {

  0x28, 0xFF, 0x64, 0xE, 0x71, 0xB3, 0xE9, 0x35,

  0x28, 0xFF, 0x64, 0xE, 0x7D, 0x55, 0x9E, 0x2A

};

 

OneWire onewire(ONEWIRE_PIN);

DS18B20 sensors(&onewire);

 

void setup() {

  while(!Serial);

  Serial.begin(9600);

 

  sensors.begin();

  sensors.request();

}

 

void loop() {

  if (sensors.available())

  {

    for (byte i=0; i<SENSORS_NUM; i++)

    {

      float temperature = sensors.readTemperature(FA(address));

 

      Serial.print(F("#"));

      Serial.print(i);

      Serial.print(F(": "));

      Serial.print(temperature);

      Serial.println(F(" 'C"));

    }

 

    sensors.request();

  }

 

  // tu umieść resztę twojego programu

  // Będzie działał bez blokowania

}

nie wiem co wpisuje się w część ....resztę twojego programu..."

ale mam pokazał mi się inny problem wgrałem inny kod 

#include <OneWire.h>

#include <DallasTemperature.h>

#include <LiquidCrystal.h>

 

#define ONE_WIRE_BUS 8

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);

 

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

 

void setup(void)

{

  Serial.begin(9600);

  sensors.begin();

  lcd.begin(16, 2);

 

}

 

void loop(void){

 

  sensors.requestTemperatures();

  lcd.clear();

  lcd.setCursor(0, 0);

  lcd.print("Temp(C)");

  lcd.setCursor(10, 0);

  lcd.print(sensors.getTempCByIndex(0));

....

w tym kodzie dopisałem kilka linijek gdyż ten kod dobrze pracuje ale odczytuje wyłącznie z jednego czujnika a ja mam dwa wobec tego dopisałem linie 

stałej związaną z adresami czujników i pokazał się problem czy ktoś może mi pomóc poniżej przedstawiam kod który zmieniłem i błędy które się pokazały

 

#include <OneWire.h>

#include <DS18B20.h>

#include <LiquidCrystal.h>

 

#define ONE_WIRE_BUS 2

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);

#define SENSORS_NUM 2

 

const int rs = 12, en = 11, d4 = 6, d5 = 5, d6 = 4, d7 = 3;

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

const byte address[SENSORS_NUM][8] PROGMEM = {

  0x28, 0xFF, 0x64, 0xE, 0x71, 0xB3, 0xE9, 0x35,

  0x28, 0xFF, 0x64, 0xE, 0x7D, 0x55, 0x9E, 0x2A

};

OneWire onewire(ONEWIRE_PIN);

DS18B20 sensors(&onewire);

 

void setup(void)

{

  Serial.begin(9600);

  sensors.begin();

  lcd.begin(16, 2);

 

}

 

void loop(void){

 

  sensors.requestTemperatures();

  lcd.clear();

  lcd.setCursor(0, 0);

  lcd.print("Temp(C)");

  lcd.setCursor(10, 0);

  lcd.print(sensors.getTempCByIndex(0));

.......

 

 

 

błędy:


C:\Users\GREG\Desktop\pawel\sprawdzenie\DS18B20_LCD\DS18B20_LCD.ino:7:1: error: 'DallasTemperature' does not name a type
 DallasTemperature sensors(&oneWire);
 ^~~~~~~~~~~~~~~~~
C:\Users\GREG\Desktop\pawel\sprawdzenie\DS18B20_LCD\DS18B20_LCD.ino:16:17: error: 'ONEWIRE_PIN' was not declared in this scope
 OneWire onewire(ONEWIRE_PIN);
                 ^~~~~~~~~~~
C:\Users\GREG\Desktop\pawel\sprawdzenie\DS18B20_LCD\DS18B20_LCD.ino:16:17: note: suggested alternative: 'ONEWIRE_CRC'
 OneWire onewire(ONEWIRE_PIN);
                 ^~~~~~~~~~~
                 ONEWIRE_CRC
C:\Users\GREG\Desktop\pawel\sprawdzenie\DS18B20_LCD\DS18B20_LCD.ino: In function 'void loop()':
C:\Users\GREG\Desktop\pawel\sprawdzenie\DS18B20_LCD\DS18B20_LCD.ino:29:11: error: 'class DS18B20' has no member named 'requestTemperatures'; did you mean 'readTemperature'?
   sensors.requestTemperatures();
           ^~~~~~~~~~~~~~~~~~~
           readTemperature
C:\Users\GREG\Desktop\pawel\sprawdzenie\DS18B20_LCD\DS18B20_LCD.ino:34:21: error: 'class DS18B20' has no member named 'getTempCByIndex'
   lcd.print(sensors.getTempCByIndex(0));
                     ^~~~~~~~~~~~~~~
C:\Users\GREG\Desktop\pawel\sprawdzenie\DS18B20_LCD\DS18B20_LCD.ino:39:21: error: 'class DS18B20' has no member named 'getTempFByIndex'
   lcd.print(sensors.getTempFByIndex(0));
                     ^~~~~~~~~~~~~~~
Znaleziono wiele bibliotek w "LiquidCrystal.h"
  Wykorzystane: C:\Users\GREG\Documents\Arduino\libraries\LiquidCrystal
  Niewykorzystane: C:\Users\GREG\AppData\Local\Arduino15\libraries\LiquidCrystal
exit status 1

Compilation error: 'DallasTemperature' does not name a type

Link do komentarza
Share on other sites

7 godzin temu, rziomber napisał:

Trochę trudno odczytać nieformatowany kod

Mówiąc wprost: jest to w zasadzie niemożliwe.

@koragreg Zedytuj tekst tak, żeby czytający byli w stanie w ciągu jednej minuty zorientować się, gdzie leży sedno Twojego pytania. Do wszystkich fragmentów kodu użyj opcji "<> Wstaw kod programu" widocznej w okienku edycji...

Link do komentarza
Share on other sites

cześć

wstawiam jeszcze raz kod

```cpp
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>

#define ONE_WIRE_BUS 8
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);



void setup(void)
{
  Serial.begin(9600);
  sensors.begin();
  lcd.begin(20, 4);
  
}

void loop(void){ 
  
  sensors.requestTemperatures(); 
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Temp(C)");
  lcd.setCursor(10, 0);
  lcd.print(sensors.getTempCByIndex(0));

  lcd.setCursor(0, 1);
  lcd.print("Temp(F)");
  lcd.setCursor(10, 1);
  lcd.print(sensors.getTempFByIndex(0));
  
  delay(1000);
}

```

i tak usunę część wskazania tj. nie potrzebna temp. Farenhaida

ale za to pokazują mi się błędy jak wstawiam część kodu z adresami czujników (są dwie sztuki)

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

Udało się link pomógł

podaję kod który działa

```cpp
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>

#define ONE_WIRE_BUS 8
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
int deviceCount = 0;
float tempC;

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);



void setup(void)
{
  Serial.begin(9600);
  sensors.begin();
  lcd.begin(20, 4);
  
}

void loop(void){ 
  
  sensors.requestTemperatures(); 
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Temp1(C)");
  lcd.setCursor(10, 0);
  lcd.print(sensors.getTempCByIndex(0));

  lcd.setCursor(0, 1);
  lcd.print("Temp2(C)");
  lcd.setCursor(10, 1);
  lcd.print(sensors.getTempCByIndex(1));
  
  delay(1000);
}

```

 

  • Lubię! 2
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • 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.