Паяльник

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Паяльник » Микроконтроллеры » Aduino Uno - Считыватель ключей домофона Dallas на дисплее LCD


Aduino Uno - Считыватель ключей домофона Dallas на дисплее LCD

Сообщений 1 страница 8 из 8

1

Arduino Uno, cчитыватель ключей I-Button, 1- wire, вывод на дисплей LCD1602

http://sg.uploads.ru/t/Dt0W1.jpg

Код:

// SDA - pin A4
// SCL - pin A5

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>

#define pin 10

LiquidCrystal_I2C lcd(0x27,16,2);

byte key_to_write[] = { 0x01, 0xBE, 0x40, 0x11, 0x5A, 0x36, 0x00, 0xE1 };

OneWire  ds(pin);  // pin 10 is 1-Wire interface pin now

String stroka1,stroka2;

void setup(void) {
  Serial.begin(9600);
  lcd.init();  
}

void loop(void) {
  byte i;
  byte data[8];

  delay(1000); // 1 sec
  
  ds.reset();
  delay(50);
  ds.write(0x33); // "READ" command
  
  ds.read_bytes(data, 8);

  Serial.print("KEY ");
  for( i = 0; i < 4; i++) {
    Serial.print(data[i], HEX);
    stroka1 = stroka1 + String(data[i],HEX);
    if (i != 7) {Serial.print(":"); stroka1 = stroka1 + ':'; }
  }
  
    for( i = 4; i < 8; i++) {
    Serial.print(data[i], HEX);
    stroka2 = stroka2 + String(data[i],HEX);
    if (i != 7) {Serial.print(":"); stroka2 = stroka2 + ':'; }
  }
  
    if (data[0] & data[1] & data[2] & data[3] & data[4] & data[5] & data[6] & data[7] == 0xFF)
  {
      stroka1 = "";
      stroka2 = "";
  }
  Serial.println();
  lcd.backlight();
  lcd.clear();
  lcd.setCursor(0,0);  // Lines 1
  lcd.print("KEY:");
  lcd.setCursor(5,0);  // Lines 1
  lcd.print(stroka1);
  lcd.setCursor(0,1); // Lines 2
  lcd.print(stroka2);
  stroka1 = "";
  stroka2 = "";
  
  // Check if FF:FF:FF:FF:FF:FF:FF:FF
  // If your button is really programmed with FF:FF:FF:FF:FF:FF:FF:FF, then remove this check
  if (data[0] & data[1] & data[2] & data[3] & data[4] & data[5] & data[6] & data[7] == 0xFF)
  {
    Serial.println("...nothing found!"); 
    return;
  }

  return; // remove when ready to programm

  // Check if read key is equal to the one to be programmed
  for (i = 0; i < 8; i++)
    if (data[i] != key_to_write[i])
      break;
    else
      if (i == 7)
      {
        Serial.println("...already programmed!");
        return;
      }

  Serial.println();
  Serial.print("Programming new key...");
  
  for (uint8_t i = 0; i < 8; i++)
  {
    ds.reset();
    data[0] = 0x3C; // "WRITE" command
    data[1] = i; // programming i-th byte
    data[2] = 0;
    data[3] = key_to_write[i];
    ds.write_bytes(data, 4);
    Serial.print(".");
  
    uint8_t crc = ds.read();
    
    if (OneWire::crc8(data, 4) != crc) {
        Serial.print("error!\r\n");
        return;
    }
    else
      Serial.print(".");
    
    send_programming_impulse();
  }
  
  Serial.println("done!");
}

void send_programming_impulse()
{
  pinMode(pin, OUTPUT);
  digitalWrite(pin, HIGH); 
  delay(60);
  digitalWrite(pin, LOW); 
  delay(5);
  digitalWrite(pin, HIGH); 
  delay(50); 
}

0

2

А исходники?

0

3

до кучи дубликатор ключей

Код:
#include <OneWire.h>

#define pin 11
OneWire ibutton (pin); // Пин D11 для подлючения iButton (Data)
byte addr[8];
byte ReadID[8] = {0x01, 0xA7, 0x08, 0x9F, 0x01, 0x00, 0x00, 0x0A  }; // "Универсальный" ключ. Прошивается последовательность 01:FF:FF:FF:FF:FF:FF:2F

const int buttonPin = 6;
const int ledPin = 13;
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;
}

http://s8.uploads.ru/t/QVJ7G.png

0

4

приставляем оригинальный ключ..светодиод блинькает..нажимаем кнопу.. приставляем болванку...записалось..радуемся

0

5

Какие типы болванок пишет ?

Похоже эта статья  https://mysku.ru/blog/aliexpress/42027.html

0

6

Интересная инфа по теме http://arduino.ru/forum/programmirovani … nku-rw1990

0

7

15minutka написал(а):

А исходники?

Добавил в шапку

0

8

Technik написал(а):

Какие типы болванок пишет ?

Похоже эта статья  https://mysku.ru/blog/aliexpress/42027.html

берите пробуйте...мне типы болванок не интересны

0


Вы здесь » Паяльник » Микроконтроллеры » Aduino Uno - Считыватель ключей домофона Dallas на дисплее LCD


создать форум