Arduino Polska Forum

Pełna wersja: Termometr cztero-czujnikowy
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Stron: 1 2
Od dobrych paru dni próbuję zrobić termometr który wyświetlałby na wyświetlaczu pomiary z czterech czujników . Ale chciałbym aby te cztery temperatury wyświetlały się w sposób ciągły obok siebie . Udało mi się tylko zrobić że temperatura wyświetla się na wyświetlaczu raz z jednego czujnika raz z drugiego . Co zmienić w kodzie aby wyświetlały się wszystkie temperatury naraz . Oto program jakiego użyłem .

Kod:
#include <OneWire.h>
#include <DS18B20.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define BACKLIGHT_PIN 3
#define ONEWIRE_PIN 2

#define SENSORS_NUM 2

const byte address[SENSORS_NUM][8] PROGMEM = {
0x28, 0x27, 0xB9, 0xF3, 0x4, 0x0, 0x0, 0xF6 ,
0x28, 0xFD, 0x3A, 0xF3, 0x4, 0x0, 0x0, 0x78
};
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7);
OneWire onewire(ONEWIRE_PIN);
DS18B20 sensors(&onewire);

void setup() {

while(!Serial);
Serial.begin(9600);
lcd.begin(16,2);
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
lcd.setBacklight(HIGH);
sensors.begin();
sensors.request();

}

void loop() {

if (sensors.available())
{
  for (byte i=0; i<SENSORS_NUM; i++)
  {
    int temperature = sensors.readTemperature(FA(address[i]));

   
   
   
    lcd.clear();

lcd.setCursor(0,0);
lcd.print("PIEC ");

lcd.print(temperature);

lcd.print("C");
delay(1100);
  }

  sensors.request();
}
Spróbuj coś takiego:
Kod:
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define BACKLIGHT_PIN 3
LiquidCrystal_I2C  lcd(0x27,2,1,0,4,5,6,7);

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

byte temp[8] = //ikona temperatury
{
  B00100,
  B01010,
  B01010,
  B01110,
  B01110,
  B11111,
  B11111,
  B01110
};
byte stopnie[8] = //ikona stopni
{
  B01100,
  B10010,
  B10010,
  B01100,
  B00000,
  B00000,
  B00000,
  B00000
};

DeviceAddress P1 = { 0x28, 0x00, 0x00, 0x1E, 0x07, 0x00, 0x00, 0x00 }; // tu trzeba wpisać swoje adresy
DeviceAddress P2 = { 0x28, 0x00, 0x00, 0x1F, 0x07, 0x00, 0x00, 0x00 };
DeviceAddress P3 = { 0x28, 0x00, 0x00, 0x1F, 0x07, 0x00, 0x00, 0x00 };
DeviceAddress P4 = { 0x28, 0x00, 0x00, 0x1F, 0x07, 0x00, 0x00, 0x00 };

void setup()
{
 Serial.begin(115200);
sensors.begin();
Wire.begin();
 lcd.begin(16, 2);
 lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
 lcd.setBacklight(HIGH);
 lcd.createChar(0, temp);
 lcd.createChar(3, stopnie);
}
void loop(){
sensors.requestTemperatures();
float tempC1 = sensors.getTempC(P1);
float tempC2 = sensors.getTempC(P2);
float tempC3 = sensors.getTempC(P3);
float tempC4 = sensors.getTempC(P4);

  lcd.setCursor (0, 0);
  lcd.write("1");
  lcd.write(byte(0));
  lcd.print("=");
  lcd.print(tempC1, 1);
  lcd.write(byte(3));
  lcd.print("C");
 
  lcd.setCursor (10, 0);
  lcd.write("2");
  lcd.write(byte(0));
  lcd.print("=");
  lcd.print(tempC2, 1);
  lcd.write(byte(3));
  lcd.print("C");
 
  lcd.setCursor (0, 1);
  lcd.write("3");
  lcd.write(byte(0));
  lcd.print("=");
  lcd.print(tempC3, 1);
  lcd.write(byte(3));
  lcd.print("C");
 
  lcd.setCursor (10, 1);
  lcd.write("4");
  lcd.write(byte(0));
  lcd.print("=");
  lcd.print(tempC4, 1);
  lcd.write(byte(3));
  lcd.print("C");
 
}
Niestety nie udaje się tego załadować . Wyskakuje - exit status 1
Błąd kompilacji.
Masz wszystkie biblioteki?
Tak . Przecież pisałem w poście pierwszym że mi działa tylko wyświetla temperatury na przemian . Musi w twoim programie być gdzieś błąd . A i bardzo dziękuję jako jedynemu zainteresowanie problemem . Myślałem że nie będzie problemu z tak prostym wydawałoby sie projektem . A jednak . Odezwałeś się tylko ty . Dziękuję.
W moim kodzie jest inna biblioteka do czujnika,sprawdź to.
(30-12-2015, 18:06)zbyszek78 napisał(a): [ -> ]W moim kodzie jest inna biblioteka do czujnika,sprawdź to.

Kurcze nawet nie sądziłem że do tego czujnika mogą być inne biblioteki . Zmodyfikowałem lekko twój program na taki :
Kod:
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define BACKLIGHT_PIN 3
LiquidCrystal_I2C  lcd(0x27,2,1,0,4,5,6,7);

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




DeviceAddress P1 = { 0x28, 0xFD, 0x3A, 0xF3, 0x4, 0x0, 0x0, 0x78 };
DeviceAddress P2 = { 0x28, 0xFD, 0x3A, 0xF3, 0x4, 0x0, 0x0, 0x78 };
DeviceAddress P3 = { 0x28, 0x27, 0xB9, 0xF3, 0x4, 0x0, 0x0, 0xF6 };
DeviceAddress P4 = { 0x28, 0x27, 0xB9, 0xF3, 0x4, 0x0, 0x0, 0xF6 };

void setup()
{
Serial.begin(115200);
sensors.begin();
Wire.begin();
lcd.begin(16, 2);
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
lcd.setBacklight(HIGH);

}
void loop(){
sensors.requestTemperatures();
int tempC1 = sensors.getTempC(P1);
int tempC2 = sensors.getTempC(P2);
int tempC3 = sensors.getTempC(P3);
int tempC4 = sensors.getTempC(P4);

 lcd.setCursor (0, 0);
 lcd.write("PIEC ");
 lcd.print(tempC1, 1);
 lcd.print("C");
 
 lcd.setCursor (9, 0);
 lcd.write("WYJ ");
 lcd.print(tempC2, 1);
 lcd.print("C");

 lcd.setCursor (0, 1);
 lcd.write("POWR ");
 lcd.print(tempC3, 1);
 lcd.print("C");
 
 lcd.setCursor (9, 1);
 lcd.write("MIE ");
 lcd.print(tempC4, 1);
 lcd.print("C");
 
}


I wreszcie osiągnąłem efekt jaki chciałem . Ponieważ mam na razie tylko dwa czujniki to ich adresy mam zdublowane w programie . Jeszcze raz podziękowania dla zbyszek78
Temat można zamknąć.
A oto efekt działania programu 

[Obrazek: 20151231_013210.jpg]
Zamiast

Kod:
lcd.print("C");

użyłbym

Kod:
lcd.write(byte(223));
lepiej wygląda moim zdaniem, ale to już kwestia gustu. w każdym razie mi też się przydało kilka informacji z tego wątku, więc dzięki.

Mój efekt wygląda tak:

[Obrazek: jnialnmyldpfylttwbktugktvlyrnbnheenrenwb...dyqplwsfma]

Pozdrawiam.
(31-12-2015, 13:13)Lobaf napisał(a): [ -> ]Zamiast

Kod:
lcd.print("C");

użyłbym

Kod:
lcd.write(byte(223));
lepiej wygląda moim zdaniem, ale to już kwestia gustu. w każdym razie mi też się przydało kilka informacji z tego wątku, więc dzięki.

Mój efekt wygląda tak:

[Obrazek: jnialnmyldpfylttwbktugktvlyrnbnheenrenwb...dyqplwsfma]

Pozdrawiam.

Może i masz rację . Ale jakby jeszcze znak stopni przesunąć bardziej w prawo to byłoby może lepiej .
Witam ja stworzyłem coś  takiego (dopiero zaczynam)

Kod:
#include <Adafruit_PCD8544.h>
#include <Adafruit_GFX.h>
#include <SPI.h>


// Software SPI (slower updates, more flexible pin options):
// pin 7 - Serial clock out (SCLK)
// pin 6 - Serial data out (DIN)
// pin 5 - Data/Command select (D/C)
// pin 4 - LCD chip select (CS)
// pin 3 - LCD reset (RST)

Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);

int sensorPin0 = A0;
int sensorPin1 = A1;
int sensorPin2 = A2;
int sensorPin3 = A3;
//int sensotPin4 = A4;

int sensorValue0 = 0;
int sensorValue1 = 1;
int sensorValue2 = 2;
int sensorValue3 = 3;
//int sensorValue4 = 4;


void setup() {
display.begin();

display.setContrast(50);

display.display();
delay(2000);
display.clearDisplay();  
display.setTextSize(1);
display.setTextColor(BLACK);
display.setRotation(2);
pinMode(8, OUTPUT);
pinMode(9, INPUT_PULLUP);
digitalWrite(8, LOW);
}
void loop() {
if (digitalRead(9) == LOW) {
  digitalWrite(8, LOW);
  delay(5000);
} else {
  digitalWrite(8, HIGH);

}

display.clearDisplay();
display.setCursor(0, 0);
display.println("Dom");
display.setCursor(20, 0);
sensorValue0 = analogRead(sensorPin0);
display.println((sensorValue0 * (5000 / 1024) / 10));
display.setCursor(32, 0);
display.println("C");
display.display();



display.setCursor(0, 8);
display.println("Piec");
display.setCursor(25, 8);
sensorValue1 = analogRead(sensorPin1);
display.println((sensorValue1 * (5000 / 1024) / 10));
display.setCursor(37, 8);
display.println("C");
display.display();

display.setCursor(0, 16);
display.println("Podloga");
display.setCursor(47, 16);
sensorValue2 = analogRead(sensorPin2);
display.println((sensorValue2 * (5000 / 1024) / 10));
display.setCursor(60, 16);
display.println("C");
display.display();

display.setCursor(0, 24);
display.println("Dwor");
display.setCursor(25, 24);
sensorValue3 = analogRead(sensorPin3);
display.println((sensorValue3 * (5000 / 1024) / 10));
display.setCursor(37, 24);
display.println("C");
display.display();

 display.setCursor(0, 32);
display.println("CWU");
display.setCursor(17, 32);
sensorValue4 = analogRead(sensorPin4);
display.println((sensorValue4 * (5000 / 1024) / 10));
display.setCursor(30, 32);
display.println("C");
display.display();


  delay(2000);
}

i mam mały problem przy kompilacji
UWAGA: Kategoria '' w bibliotece OneWire jest nieprawidłowa. Ustawiono na 'Uncategorized'
In file included from C:\Users\User\Desktop\PRUBKI ANDRUINO\sketch_mar14ryszard\sketch_mar14ryszard.ino:1:0:

C:\Users\User\Desktop\PRUBKI ANDRUINO\libraries\Adafruit-PCD8544-Nokia-5110-LCD-library-master/Adafruit_PCD8544.h:69:46: error: expected class-name before '{' token

class Adafruit_PCD8544 : public Adafruit_GFX {

                                             ^

C:\Users\User\Desktop\PRUBKI ANDRUINO\sketch_mar14ryszard\sketch_mar14ryszard.ino: In function 'void setup()':

sketch_mar14ryszard:34: error: 'class Adafruit_PCD8544' has no member named 'setTextSize'

 display.setTextSize(1);

         ^

sketch_mar14ryszard:35: error: 'class Adafruit_PCD8544' has no member named 'setTextColor'

display.setTextColor(BLACK);

        ^

sketch_mar14ryszard:36: error: 'class Adafruit_PCD8544' has no member named 'setRotation'

 display.setRotation(2);

         ^

C:\Users\User\Desktop\PRUBKI ANDRUINO\sketch_mar14ryszard\sketch_mar14ryszard.ino: In function 'void loop()':

sketch_mar14ryszard:51: error: 'class Adafruit_PCD8544' has no member named 'setCursor'

  display.setCursor(0, 0);

          ^

sketch_mar14ryszard:52: error: 'class Adafruit_PCD8544' has no member named 'println'

  display.println("Dom");

          ^

sketch_mar14ryszard:53: error: 'class Adafruit_PCD8544' has no member named 'setCursor'

  display.setCursor(20, 0);

          ^

sketch_mar14ryszard:55: error: 'class Adafruit_PCD8544' has no member named 'println'

  display.println((sensorValue0 * (5000 / 1024) / 10));

          ^

sketch_mar14ryszard:56: error: 'class Adafruit_PCD8544' has no member named 'setCursor'

  display.setCursor(32, 0);

          ^

sketch_mar14ryszard:57: error: 'class Adafruit_PCD8544' has no member named 'println'

  display.println("C");

          ^

sketch_mar14ryszard:62: error: 'class Adafruit_PCD8544' has no member named 'setCursor'

  display.setCursor(0, 8);

          ^

sketch_mar14ryszard:63: error: 'class Adafruit_PCD8544' has no member named 'println'

  display.println("Piec");

          ^

sketch_mar14ryszard:64: error: 'class Adafruit_PCD8544' has no member named 'setCursor'

  display.setCursor(25, 8);

          ^

sketch_mar14ryszard:66: error: 'class Adafruit_PCD8544' has no member named 'println'

  display.println((sensorValue1 * (5000 / 1024) / 10));

          ^

sketch_mar14ryszard:67: error: 'class Adafruit_PCD8544' has no member named 'setCursor'

  display.setCursor(37, 8);

          ^

sketch_mar14ryszard:68: error: 'class Adafruit_PCD8544' has no member named 'println'

  display.println("C");

          ^

sketch_mar14ryszard:71: error: 'class Adafruit_PCD8544' has no member named 'setCursor'

  display.setCursor(0, 16);

          ^

sketch_mar14ryszard:72: error: 'class Adafruit_PCD8544' has no member named 'println'

  display.println("Podloga");

          ^

sketch_mar14ryszard:73: error: 'class Adafruit_PCD8544' has no member named 'setCursor'

  display.setCursor(47, 16);

          ^

sketch_mar14ryszard:75: error: 'class Adafruit_PCD8544' has no member named 'println'

  display.println((sensorValue2 * (5000 / 1024) / 10));

          ^

sketch_mar14ryszard:76: error: 'class Adafruit_PCD8544' has no member named 'setCursor'

  display.setCursor(60, 16);

          ^

sketch_mar14ryszard:77: error: 'class Adafruit_PCD8544' has no member named 'println'

  display.println("C");

          ^

sketch_mar14ryszard:80: error: 'class Adafruit_PCD8544' has no member named 'setCursor'

  display.setCursor(0, 24);

          ^

sketch_mar14ryszard:81: error: 'class Adafruit_PCD8544' has no member named 'println'

  display.println("Dwor");

          ^

sketch_mar14ryszard:82: error: 'class Adafruit_PCD8544' has no member named 'setCursor'

  display.setCursor(25, 24);

          ^

sketch_mar14ryszard:84: error: 'class Adafruit_PCD8544' has no member named 'println'

  display.println((sensorValue3 * (5000 / 1024) / 10));

          ^

sketch_mar14ryszard:85: error: 'class Adafruit_PCD8544' has no member named 'setCursor'

  display.setCursor(37, 24);

          ^

sketch_mar14ryszard:86: error: 'class Adafruit_PCD8544' has no member named 'println'

  display.println("C");

          ^

sketch_mar14ryszard:89: error: 'class Adafruit_PCD8544' has no member named 'setCursor'

   display.setCursor(0, 32);

           ^

sketch_mar14ryszard:90: error: 'class Adafruit_PCD8544' has no member named 'println'

  display.println("CWU");

          ^

sketch_mar14ryszard:91: error: 'class Adafruit_PCD8544' has no member named 'setCursor'

  display.setCursor(17, 32);

          ^

sketch_mar14ryszard:92: error: 'sensorPin4' was not declared in this scope

  sensorValue4 = analogRead(sensorPin4);

                            ^

sketch_mar14ryszard:93: error: 'class Adafruit_PCD8544' has no member named 'println'

  display.println((sensorValue4 * (5000 / 1024) / 10));

          ^

sketch_mar14ryszard:94: error: 'class Adafruit_PCD8544' has no member named 'setCursor'

  display.setCursor(30, 32);

          ^

sketch_mar14ryszard:95: error: 'class Adafruit_PCD8544' has no member named 'println'

  display.println("C");

          ^

exit status 1
'class Adafruit_PCD8544' has no member named 'setTextSize'

przy odznaczeniu 4 pomiaru jest ok.
Stron: 1 2