автоматическая запись адресов ds18b20
- Войдите на сайт для отправки комментариев
Ср, 11/05/2016 - 19:15
Добрый день! подскажите где ошибка.
пытаюсь реализовать автоматическую запись адресов ds18b20.
т.е. втыкаем в выключенную ардуину один датчик, включаем, если его адрес не совпадает с уже известными адресами, то ищется первый "пустой" адрес в массиве (в качестве "пустого" адреса я прописал {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}) и на него пишется адрес нового датчика. так же этот адрес пишется в еепром (еепром пока не реализовал, но не думаю что с этим будут проблемы).
Сначала проходятся все маячки tut1 tut2 tut3, а потом всё время tut1 tut2, tut1 tut2... хотя должно только tut1 прилетать
#include <OneWire.h> OneWire ds(10); // on pin 10 (a 4.7K resistor is necessary) byte addr[4][8]={{0x28,0xFF,0x35,0x86,0x90,0x15,0x04,0x94},{0x28,0x63,0x8E,0x03,0x00,0x00,0x80,0xE9},{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}}; byte ddr[8]; void setup(void) { Serial.begin(9600); } void loop(void) { byte ddr[8]; if (ds.search(ddr)) { Serial.println("tut1"); if (ddr[0] == 0x28) { if (ddr!=addr[0] && ddr!=addr[1] && ddr!=addr[2] && ddr!=addr[3]) { Serial.println("tut2"); for (byte n = 0; n<4; n++) { if (addr[n][0]== 0x00 && addr[n][1]== 0x00 && addr[n][2]== 0x00 && addr[n][3]== 0x00 && addr[n][4]== 0x00 && addr[n][5]== 0x00 && addr[n][6]== 0x00 && addr[n][7]== 0x00) { Serial.println("tut3"); Serial.println(n); for(byte m = 0; m < 8; m++) {addr[n][m] = ddr[m]; Serial.println(addr[n][m], HEX);} break; } } } } } Serial.println(); }
во время писания первого сообщения посетила не одна идея которые я успел перепробовать... и всё не работают.
и вот что прилетьает в монитор. т.е. после записи адреса нового датчика при проверке стр19 получается что адрес не совпадает с уже записанными(хотя мы его только что записали). и запись новго датчика прекращается только когда заканчиваются пустые ячейки...
ядрена пассатижи... в самом начале упустил что адрес этого датчика прописан в первом же слоте... ёманарот, как сравниваются элементы массивов? что я делаю не так? моск опух, весь день как баран об ворота...
вот чем форум помогает. опишешь проблему, перечитаешь что написал и заметишь что неверно обращался к массиву...
byte
addr[8]={0x28,0xFF,0x35,0x86,0x90,0x15,0x04,0x94};
как это правильно записать и считать с eeproma?
byte
addr[8]={0x28,0xFF,0x35,0x86,0x90,0x15,0x04,0x94};
как это правильно записать и считать с eeproma?
Можно побайтово:
Можно - юзая eeprom_write_block. Можно - EEPROM.put(0,addr). Выбирайте по вкусу.
Побайтно записать и побайтно же считать.
спсибо за помощь, голова думать не может. весь день сегодня на работе ковыряюсь...)
в отдельном скетче всё заработало. надо разбираться в основном.
сделал так.
запись:
чтение: