Считывание ключей ТМ (i-Button) и работа с библиотекой 1-Wire

flashman
Offline
Зарегистрирован: 04.02.2014

Добрый вечер. Не получается считать код ключа ТМ с использованием библиотеки 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);
}

 

maksim
Offline
Зарегистрирован: 12.02.2012

Подтягивающий резистор на линии имеется? Какого номинала?

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

Домофонные ключи, работающие по 1-wire, могут быть не обязательно стандарта i-button.

flashman
Offline
Зарегистрирован: 04.02.2014

Добрый вечер. По поводу самих ключей, ключи точно те которые нужны. А вот по поводу резистора, как говорится, можно по подробнее (не использую никакой)?
P.S. хотел бы отдельно поблагодарить maksima за то что почти всегда он первый откликается на просьбы начинающих. Ну и конечно всем остальным большое СПАСИБО, кто уже мне помог и кто еще поможет!!!

maksim
Offline
Зарегистрирован: 12.02.2012
flashman
Offline
Зарегистрирован: 04.02.2014

Добрый день. Снова возникли вопросы. Со считыванием ключа я справился. Теперь решил немного изменить скетч, чтобы считанный ключ можно было хранить в памяти и приложении его, что-то выполнять. Но компилятор при загрузку на Ардуино просто виснет. Подскажите где я ошибся. Заранее СПАСИБО.



#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();
}

 

maksim
Offline
Зарегистрирован: 12.02.2012

Проблема с заливкой кода в Мегу >!!!<

И почитайте memcpy и memcmp.

if(!memcmp(addr, addr1, 8)) Serial.println("Ключ подходит!");