Не получается считать данные с ключа ibutton...
- Войдите на сайт для отправки комментариев
Пт, 06/03/2020 - 21:32
Использую такой скетч и схему:
https://yadi.sk/d/V9IN8ujx-F1bVw
Вроде все просто и понятно, но почему то не работает:(
Пробовал сопротивления разного номинала.
Причем если подключать без сопротивления, и взять руками за GND и 10-ый пин (в данном скетче он и является читающим), то иногда в мониторе com порта появляется значения, то есть значит программа все таки работает, но с ключа почему то не читает, причем на сколько я понимаю, дело тут не в номинале сопротивления, так как он на сколько я понимаю используется для подтягивания ноги, что бы не было ложных наводок или для чего он в схеме?
#include <OneWire.h> OneWire iButton(10); // создаём объект 1-wire на 10 выводе void setup (void) { Serial.begin(9600); } void loop(void) { delay(1000); // задержка 1 сек byte addr[8]; // массив для хранения данных ключа if ( !iButton.search(addr) ) { // если ключ не приложен Serial.println("No key connected..."); // сообщаем об этом return; // и прерываем программу } Serial.print("Key : "); for(int i=0; i<8; i++) { Serial.print(addr[i], HEX); // выводим побайтно данные ключа Serial.print(" "); } Serial.println(); iButton.reset(); // сброс ключа }ЕМНИП, после строки №13 нужно ещё
честно говоря, не понятно зачем производить сброс, по скольку при прикосновении к контактам рукой (и отсутствия в схеме сопротивления), наводками ключ записываеться в монитор com порта, после чего опять пишет "No key connected...", получаеться память сбрасываеться и так...
Есть ли еще варианты?
Т.е. Вы даже не попробовали? Смешной Вы, право.
Извиняюсь, подумать подумал, но не написал:) Конечно попробовал, других то вариантов пока у меня нет:)))
Вообщем не помогло:(
Блин, может ключи какие то разные бывают, ну типо потребление у них высокое и им не хватает:)))
Знаете, был тут такой деятель, у которого датчик был не к тому пину присоединён. Ему на это указали, а он такой: "Попробвал другой пин - не помогло, вернул как было". Вот и Вы также.
Я Вам показал на очевидную ошибку, исправьте её, опубликуйте скетч и тогда можно будет смотреть дальше.
#include <OneWire.h> OneWire iButton(10); // создаём объект 1-wire на 10 выводе void setup (void) { Serial.begin(9600); } void loop(void) { delay(1000); // задержка 1 сек byte addr[8]; // массив для хранения данных ключа if ( !iButton.search(addr) ) { // если ключ не приложен iButton.reset_search(); Serial.println("2 No key connected..."); // сообщаем об этом return; // и прерываем программу } Serial.print("Key : "); for(int i=0; i<8; i++) { Serial.print(addr[i], HEX); // выводим побайтно данные ключа Serial.print(" "); } Serial.println(); iButton.reset(); // сброс ключа }Чой та не видать, где вы считанное значение в массив вносите ?
Нигде не хотите там добавить ничего типа:
addr[i] = iButton.read();
read не нужен в данном случае: onewire.search() ...The addrArray is an 8 byte array. If a device is found, addrArray is filled with the device's address and true is returned. If no more devices are found, false is returned.
В принципе, она должна нормально работать.
Схему Вы нам не показали. Давайте ка схему (Вашу, реальную схему, а не левую картинку из интернета, которую Вы там в первом посте положили) и фото сборки.
В принципе - должна. Более того - Example для DS18x20 из библиотеки OneWire вроде как этот ключ находит без проблем.
Да, я попробовал, всё работает.
В принципе, она должна нормально работать.
Схему Вы нам не показали. Давайте ка схему (Вашу, реальную схему, а не левую картинку из интернета, которую Вы там в первом посте положили) и фото сборки.
https://ibb.co/Jnj6H64
https://ibb.co/ZhfYY0Y
В принципе - должна. Более того - Example для DS18x20 из библиотеки OneWire вроде как этот ключ находит без проблем.
Да я понимаю, что должен, но по какой то причине не работает(
#include <OneWire.h> #define pin 0 OneWire ibutton (pin); // Пин D0 для подлючения iButton (Data) byte addr[8]; byte ReadID[8] = { 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F }; // "Универсальный" ключ. Прошивается последовательность 01:FF:FF:FF:FF:FF:FF:2F const int buttonPin = 5; const int ledPin = 2; int buttonState = 0; int writeflag = 0; int readflag = 0; int val = 0; void setup() { pinMode(ledPin, OUTPUT); pinMode(buttonPin, INPUT); Serial.begin(115200); } void loop() { buttonState = digitalRead(buttonPin); if (buttonState == HIGH) { readflag = 1; writeflag = 1; digitalWrite(ledPin, HIGH); val++; if (val > 6) val = 6; Serial.print(val); delay(500); } else { val = 0; } if (!ibutton.search (addr)) { ibutton.reset_search(); delay(50); if (val <= 5) return; val = 0; } digitalWrite(ledPin, HIGH); delay(50); for (byte x = 0; x < 8; x++) { Serial.print(addr[x], HEX); if (readflag == 0) { ReadID[x] = (addr[x]); } Serial.print(":"); } byte crc; // Проверка контрольной суммы crc = ibutton.crc8(addr, 7); Serial.print("CRC: "); Serial.println(crc, HEX); digitalWrite(ledPin, LOW); if ((writeflag == 1) or (Serial.read() == 'w')) { ibutton.skip(); ibutton.reset(); ibutton.write(0x33); Serial.print(" ID before write:"); for (byte x = 0; x < 8; x++) { Serial.print(' '); Serial.print(ibutton.read(), HEX); } // send reset ibutton.skip(); ibutton.reset(); // send 0xD1 ibutton.write(0xD1); // send logical 0 digitalWrite(pin, LOW); pinMode(pin, OUTPUT); delayMicroseconds(60); pinMode(pin, INPUT); digitalWrite(pin, HIGH); delay(10); Serial.print('\n'); Serial.print(" Writing iButton ID:\n "); byte newID[8] = { (ReadID[0]), (ReadID[1]), (ReadID[2]), (ReadID[3]), (ReadID[4]), (ReadID[5]), (ReadID[6]), (ReadID[7]) }; ibutton.skip(); ibutton.reset(); ibutton.write(0xD5); for (byte x = 0; x < 8; x++) { writeByte(newID[x]); Serial.print('*'); } Serial.print('\n'); ibutton.reset(); // send 0xD1 ibutton.write(0xD1); //send logical 1 digitalWrite(pin, LOW); pinMode(pin, OUTPUT); delayMicroseconds(10); pinMode(pin, INPUT); digitalWrite(pin, HIGH); delay(10); writeflag = 0; readflag = 0; digitalWrite(ledPin, LOW); } } int writeByte(byte data) { int data_bit; for (data_bit = 0; data_bit < 8; data_bit++) { if (data & 1) { digitalWrite(pin, LOW); pinMode(pin, OUTPUT); delayMicroseconds(60); pinMode(pin, INPUT); digitalWrite(pin, HIGH); delay(10); } else { digitalWrite(pin, LOW); pinMode(pin, OUTPUT); pinMode(pin, INPUT); digitalWrite(pin, HIGH); delay(10); } data = data >> 1; } return 0; }Вот скетч под Вашу схему! (Читает и шьёт! ключи Dalas1990) И R1 Замените на 500 Ом!!!