Arduino hoz kérhetek egy kis segítséget?
3db DS18B20 sensort szeretnék bus rendszeren használni. Bármelyik két érzékelő müködik együtt. De három érzékelő már nem, mind 0 celsiust mér. Hol a hiba?
példa a kapcsolásra
#include <OneWire.h>
#include <DallasTemperature.h>
OneWire oneWire(10);
DallasTemperature sensors(&oneWire);
void setup()
{
Serial.begin(9600);
sensors.begin();
}
void loop()
{
{
sensors.requestTemperatures();
float currentTemp0;
currentTemp0 = sensors.getTempCByIndex(0);
Serial.print(currentTemp0);
float currentTemp1;
currentTemp1 = sensors.getTempCByIndex(1);
Serial.print(currentTemp1);
float currentTemp2;
currentTemp2 = sensors.getTempCByIndex(2);
Serial.println(currentTemp3);
}
delay (10000);
}
"float currentTemp2;
currentTemp2 = sensors.getTempCByIndex(2);
Serial.println(currentTemp3); "
Én itt látok valami furcsaságot.
Mindegyik közt 3 másodperc szünettel semmi változás.
#include <OneWire.h>
#include <DallasTemperature.h>
OneWire oneWire(10);
DallasTemperature sensors(&oneWire);
void setup()
{
Serial.begin(9600);
sensors.begin();
}
void loop()
{
{
sensors.requestTemperatures();
float currentTemp0;
currentTemp0 = sensors.getTempCByIndex(0);
Serial.print(currentTemp0);
delay (3000);
float currentTemp1;
currentTemp1 = sensors.getTempCByIndex(1);
Serial.print(currentTemp1);
delay (3000);
float currentTemp2;
currentTemp2 = sensors.getTempCByIndex(2);
Serial.println(currentTemp2);
delay (3000);
}
delay (10000);
}
Arduino UNO R3
Van két változat is mind a kettő ugyan ezt csinálja. Az a furcsa hogy kettövel müködik de hárommal nem.
Találtam egy megoldást, kicsit más függvényeket használ több szenzorhoz, és az address-eket is előkotorja valahogy:
#include <OneWire.h>
#include <DallasTemperature.h>
/*-----( Declare Constants )-----*/
#define ONE_WIRE_BUS 2 /*-(Connect to Pin 2 )-*/
/*-----( Declare objects )-----*/
/* Set up a oneWire instance to communicate with any OneWire device*/
OneWire ourWire(ONE_WIRE_BUS);
/* Tell Dallas Temperature Library to use oneWire Library */
DallasTemperature sensors(&ourWire);
/*-----( Declare Variables )-----*/
void setup() /*----( SETUP: RUNS ONCE )----*/
{
/*-(start serial port to see results )-*/
delay(1000);
Serial.begin(9600);
Serial.println("YourDuino.com: Temperature Sensor Test Program");
Serial.println("Temperature Sensor: DS18B20");
delay(1000);
/*-( Start up the DallasTemperature library )-*/
sensors.begin();
}/*--(end setup )---*/
void loop() /*----( LOOP: RUNS CONSTANTLY )----*/
{
Serial.println();
Serial.print("Requesting temperature...");
sensors.requestTemperatures(); // Send the command to get temperatures
Serial.println("DONE");
Serial.print("Device 1 (index 0) = ");
Serial.print(sensors.getTempCByIndex(0));
Serial.println(" Degrees C");
Serial.print("Device 1 (index 0) = ");
Serial.print(sensors.getTempFByIndex(0));
Serial.println(" Degrees F");
Serial.print("Device 1 (index 0) = ");
Serial.print(sensors.getTempFByIndex(0));
Serial.println(" Degrees G");
delay(5000);
}
Ezzel is ugyan az kettövel müködik hárommal nem csak itt 0 32 32 hömérsékletet ad vissza.
Az ez alatti kódra értettem ahol address alapján kérdezi le:
sensors.getTempC(deviceAddress);
a Multiple DS18B20 Example-től
#include <OneWire.h>
//Get DallasTemperature Library here: [link]
#include <DallasTemperature.h>
/*-----( Declare Constants and Pin Numbers )-----*/
#define ONE_WIRE_BUS_PIN 10
/*-----( Declare objects )-----*/
// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS_PIN);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
/*-----( Declare Variables )-----*/
// Assign the addresses of your 1-Wire temp sensors.
// See the tutorial on how to obtain these addresses:
// [link]
DeviceAddress Probe01 = { 0x28, 0x8A, 0xB1, 0x40, 0x04, 0x00, 0x00, 0xC7 };
DeviceAddress Probe02 = { 0x28, 0xCC, 0x92, 0x40, 0x04, 0x00, 0x00, 0xB6 };
DeviceAddress Probe03 = { 0x28, 0x4D, 0x8D, 0x40, 0x04, 0x00, 0x00, 0x78 };
void setup() /****** SETUP: RUNS ONCE ******/
{
// start serial port to show results
Serial.begin(9600);
Serial.print("Initializing Temperature Control Library Version ");
Serial.println(DALLASTEMPLIBVERSION);
// Initialize the Temperature measurement library
sensors.begin();
// set the resolution to 10 bit (Can be 9 to 12 bits .. lower is faster)
sensors.setResolution(Probe01, 10);
sensors.setResolution(Probe02, 10);
sensors.setResolution(Probe03, 10);
}//--(end setup )---
void loop() /****** LOOP: RUNS CONSTANTLY ******/
{
delay(1000);
Serial.println();
Serial.print("Number of Devices found on bus = ");
Serial.println(sensors.getDeviceCount());
Serial.print("Getting temperatures... ");
Serial.println();
// Command all devices on bus to read temperature
sensors.requestTemperatures();
Serial.print("Probe 01 temperature is: ");
printTemperature(Probe01);
Serial.println();
Serial.print("Probe 02 temperature is: ");
printTemperature(Probe02);
Serial.println();
Serial.print("Probe 03 temperature is: ");
printTemperature(Probe03);
Serial.println();
}//--(end main loop )---
/*-----( Declare User-written Functions )-----*/
void printTemperature(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
if (tempC == -127.00)
{
Serial.print("Error getting temperature ");
}
else
{
Serial.print("C: ");
Serial.print(tempC);
Serial.print(" F: ");
Serial.print(DallasTemperature::toFahrenheit(tempC));
}
}
három érzékelővel ez is mind nulla. Kettővel pedig "Error getting temperature"
Jól értelmezem hogy it egyenként meg kell határozni az érzékelők cimeit "DeviceAddress"? pl ezzel a programmal [link]
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!