Считывание ключей ТМ (i-Button) и работа с библиотекой 1-Wire
- Войдите на сайт для отправки комментариев
Чт, 13/02/2014 - 21:33
Добрый вечер. Не получается считать код ключа ТМ с использованием библиотеки 1-Wire. Скачал самый распространенный скетч в инете, все пишут что результат отличный, у меня же ничего не происходит. Постоянное сообщение что нет ключа. Ключи точно 1-Wire. Подскажите какова вероятность что проблемы с самой Arduino (MEGA 2560) и можно ли ее перепрошить. Не первый раз замечаю что скетчи которые все нахваливают у меня просто не работают. Вот скетч на считывание ключей.
#include <OneWire.h>
/*
* test 1-Wire whith DS1990A
*/
OneWire ds(10); // на digital pin 10
void setup(void) {
Serial.begin(9600);
}
void loop(void) {
byte i;
byte present = 0;
byte data[12];
byte addr[8];
if ( !ds.search(addr)) {
Serial.print("No more addresses.\n");
ds.reset_search();
delay(1000);
return;
}
Serial.print("R=");
for( i = 0; i < 8; i++) {
Serial.print(addr[i], HEX);
Serial.print(" ");
}
Serial.println();
ds.reset();
delay(1000);
}
Подтягивающий резистор на линии имеется? Какого номинала?
Домофонные ключи, работающие по 1-wire, могут быть не обязательно стандарта i-button.
Добрый вечер. По поводу самих ключей, ключи точно те которые нужны. А вот по поводу резистора, как говорится, можно по подробнее (не использую никакой)?
P.S. хотел бы отдельно поблагодарить maksima за то что почти всегда он первый откликается на просьбы начинающих. Ну и конечно всем остальным большое СПАСИБО, кто уже мне помог и кто еще поможет!!!
http://robocraft.ru/blog/communication/117.html
Добрый день. Снова возникли вопросы. Со считыванием ключа я справился. Теперь решил немного изменить скетч, чтобы считанный ключ можно было хранить в памяти и приложении его, что-то выполнять. Но компилятор при загрузку на Ардуино просто виснет. Подскажите где я ошибся. Заранее СПАСИБО.
#include <OneWire.h> /* * test 1-Wire whith DS1990A */ OneWire ds(10); // на digital pin 10 byte i,k; int value; byte present = 0; byte data[12]; byte addr[8]; byte addr1[8]; void setup() { Serial.begin(9600); } void loop() { value=Serial.read(); if (value=='#') { Serial.println ("Ввод нового ключа"); readTM(); } if ( ds.search(addr)) { k=0; for (i=0; i<8; i++) { if (addr[i]==addr1[i]) k=k+1; } if (k==6) Serial.println("Ключ подходит!!!"); ds.reset_search(); } } void readTM() { Serial.println ("Приложите ключ!!!"); if ( !ds.search(addr)) // ожидание ключа { ds.reset_search(); return; } Serial.print("Код ключа: "); for( i = 0; i < 8; i++) { Serial.print(addr[i], HEX); addr1[i]=addr[i]; Serial.print(" "); } Serial.println(); }Проблема с заливкой кода в Мегу >!!!<
И почитайте memcpy и memcmp.
if(!memcmp(addr, addr1, 8)) Serial.println("Ключ подходит!");