Skocz do zawartości

odczyt temperatury z dwóch czujników i LCD


Pomocna odpowiedź

Napisano

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

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...

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)

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

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...