• 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
Odczyt z drugiego DS18B20
#1
Witam. Mam problem z odczytem drubiego czujnika. Z odczytu portu szeregowego odczytuje oba czujniki ale jak chcę wysłać odczyt na wyświetlacz to drugiego nie widzi tylko wartość 1. Co może być przyczyną?

Kod:
// Program odczytuje temperaturę kilku czujników

#include <OneWire.h>
#include <DS18B20.h>
#include <LiquidCrystal.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// 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, 0xB1, 0x6D, 0xA1, 0x3, 0x0, 0x0, 0x11,
  0x28, 0x87, 0x6A, 0xA1, 0x3, 0x0, 0x0, 0x1F
};

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

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

  sensors.begin();
  sensors.request();
  lcd.begin(20, 4);
  lcd.backlight();
}

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

      //Serial.print(F("#"));
      //Serial.print(i);
      //Serial.print(F(": "));
      //Serial.print(temperature);
      //Serial.println(F(" 'C"));
      lcd.setCursor(14, 0);
      lcd.print(temperature);
      lcd.setCursor(14, 1);
      lcd.print(i);
    }

    sensors.request();
  }


}
 
Odpowiedź
#2
Jak mniemam, na wyświetlaczu pojawia się tylko odczyt z ostatniego czujnika? Jeśli się przypadkiem nie omyliłem, spróbuj delikatnie zmienić pętlę for:
Kod:
for (byte i = 0; i < SENSORS_NUM; i++)
    {
      float temperature = sensors.readTemperature(FA(address[i]));

      //Serial.print(F("#"));
      //Serial.print(i);
      //Serial.print(F(": "));
      //Serial.print(temperature);
      //Serial.println(F(" 'C"));
      lcd.setCursor(14, 0);
      lcd.print(temperature);
      lcd.setCursor(14, 1);
      lcd.print(i);
      delay(2000);
    }
Zbyt wiele to nie zmieni, ale pokaże Ci na wyświetlaczu temperaturę każdego czujnika przez dwie sekundy.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości