DS 18x20 oneWire
- Войдите на сайт для отправки комментариев
Чт, 16/02/2017 - 17:59
Здравствуйте! Я новичок у меня возникли трудности при написании кода
Работы с датчиком температуру и вывод в сериал у меня получается и опрашивать несколько датчиков по отдельности в общем проблема в том что нужно запоминать датчики т.е при подключении к линии датчика ардуино его запомнил и прописал допустим как Т1 при подключении следующих запомнил как Т2,Т3 ,Т4 и далее это тоже не сложно но проблема в том что при отключении допустим Т2 все адреса сдвигаются т.е Т2 не держит за собой адрес датчика
Помогите пожалуйста сам не могу ни как догадаться как это сделать буду благодарен любой информации, или подсказке.
А что Вы уже написали?
писал много и по разному но пока остоновился так
думаю то нужно через код найти адрес датика и прописать его в сенсор2 нужно чтобы это делалось автоматиеский с сенсор3 и так далее
#include <OneWire.h> #include <DallasTemperature.h> #include <LiquidCrystal.h> LiquidCrystal lcd(7, 6, 5, 4, 3, 2); OneWire oneWire(9); // вход датчиков 18b20 DallasTemperature ds(&oneWire); DeviceAddress sensor1 = {0x10, 0x91, 0x15, 0xAF, 0x02, 0x08, 0x00, 0xD9}; DeviceAddress sensor2 = {}; void setup() { Serial.begin(9600); ds.begin(); lcd.begin(16, 2); lcd.clear(); } void loop() { ds.requestTemperatures(); // считываем температуру с датчиков lcd.setCursor(0, 0); lcd.print("Sensor 1: "); lcd.print(ds.getTempC(sensor1)); // отправляем температуру lcd.print("C"); lcd.setCursor(0, 1); lcd.print("Sensor 2: "); lcd.print(ds.getTempC(sensor2)); }Ну, Вы же сказали, что можете несколько датчиков опрашивать. ну так покажите это. Я хочу видеть в чём у Вас проблема. а Вы мне что-то совсем другое подсовываете.
с этим кодом я пробывал несколько датиков но индекс свигаеться
#include <LiquidCrystal.h> LiquidCrystal lcd(7, 6, 5, 4, 3, 2); #include <SoftwareSerial.h> #include <OneWire.h> #include <DallasTemperature.h> OneWire oneWire(9);// пин 1 wire DallasTemperature ds(&oneWire); byte DSKI ;//Кол-во DS1820 int i=0; float temp=ds.getTempCByIndex(i); void setup(){ lcd.begin(16,2); Serial.begin(9600); ds.begin();//поиск DS DSKI=ds.getDeviceCount();// кол-во найденых ds Serial.print("DAT4IKI KOL-BO "); Serial.print(DSKI); } void loop () { ds.requestTemperatures();// считываем температуру for (int i =0; i < DSKI; i++){ // крутим цикл опроса Serial.print("Sensor"); Serial.print(i);// индекс ds Serial.print(": "); Serial.print(ds.getTempCByIndex(i));// отправляем температуру в порт Serial.println("C"); } Serial.println(); ds.requestTemperatures(); for (int i =0; i < DSKI; i++){ lcd.begin(16,2); lcd.setCursor(0, 0); lcd.print("Sensor"); lcd.setCursor(7, 0); lcd.print(i); lcd.setCursor(11, 0); lcd.print(ds.getTempCByIndex(i)); delay(1000); } }Ну, Вы используете индекс в качестве уникального идентификатора датчика, потому они у Вас и сбиваются.
Используйте адрес. У датчика запрашиваете адрес и все "знакомые" адреса храните. Тогда Вы всегда сможете узнавать что какой-то отвалисля или какой-то новый появился.
вот в этом и проблема как правельно запросить адрес как хронить я и говорю то я новенький
в каком типе данных их хронить?
Да не мучайте Вы парня.
Каждый датчик имеет свой код. опроси каждый датчик и запиши их коды, потом используй.
https://www.youtube.com/watch?v=eQAMgzAHUNM&t=9s
нет я хочу чтоб происходило это автоматом и не сбивалось
нет я хочу чтоб происходило это автоматом и не сбивалось
Ну интересно, тогда послежу за темой..
у библиотеки OneWire есть пример опроса всех датчиков на шине с выводом для каждого датчика его уникального кода и температуры
как я понял нужно обядинить два этих кода
#include <OneWire.h> #include <DallasTemperature.h> #include <LiquidCrystal.h> OneWire oneWire(15); // вход датчиков 18b20 DallasTemperature ds(&oneWire); LiquidCrystal lcd(8, 9, 4, 5, 6, 7); DeviceAddress sensor1 = {0x28, 0xA8, 0x3E, 0xF9, 0x05, 0x0, 0x0, 0x12}; DeviceAddress sensor2 = {0x28, 0xE6, 0xBD, 0x3B, 0x05, 0x0, 0x0, 0xCF}; void setup() { // Serial.begin(9600); ds.begin(); lcd.begin(16, 2); lcd.clear(); } void loop() { ds.requestTemperatures(); // считываем температуру с датчиков lcd.setCursor(0, 0); lcd.print("Sensor 1: "); lcd.print(ds.getTempC(sensor1)); // отправляем температуру lcd.print("C"); lcd.setCursor(0, 1); lcd.print("Sensor 2: "); lcd.print(ds.getTempC(sensor2)); lcd.print("C"); }-================================================= --------------------------------------------------------------------------------------------- #include <OneWire.h> void setup() { Serial.begin(115200); Serial.println("//\n// Start oneWireSearch.ino \n//"); for (uint8_t pin = 2; pin < 13; pin++) { findDevices(pin); } Serial.println("\n//\n// End oneWireSearch.ino \n//"); } void loop() { } uint8_t findDevices(int pin) { OneWire ow(pin); uint8_t address[8]; uint8_t count = 0; if (ow.search(address)) { Serial.print("\nuint8_t pin"); Serial.print(pin, DEC); Serial.println("[][8] = {"); do { count++; Serial.println(" {"); for (uint8_t i = 0; i < 8; i++) { Serial.print("0x"); if (address[i] < 0x10) Serial.print("0"); Serial.print(address[i], HEX); if (i < 7) Serial.print(", "); } Serial.println(" },"); } while (ow.search(address)); Serial.println("};"); Serial.print("// nr devices found: "); Serial.println(count); } return count; }результат