b

 

 

Бложик потихоньку переезжает сюда

Электронный замок с ключами на EEPROM 24C02




электронный замок на arduino с самодельными ключами на еепром 24C02, код из видео





#include <Wire.h>
#include <EEPROM.h>
#include <Eeprom24C01_02.h>
#include <Servo.h> 

#define resetButton 7
#define programmedButton 8

#define keyAdresse 0x50

Servo servo; 
static Eeprom24C01_02 key(keyAdresse);

boolean keySearch(){ // возвращает 0 если нашел ключ
    Wire.beginTransmission(keyAdresse);
    return Wire.endTransmission();
}

boolean keyTest(){ // возвращает 1 если ключи совпали
   for (byte i = 0; i < 64; i++){
    if (EEPROM.read(i) != key.readByte(i)) return 0; 
  }
  return 1;
}


void resetKey(){ // заливает случайный код в ключ и память
  if (keySearch()) error(); // если нет ключа
  for (byte i = 0; i < 64; i++){
    byte val = random(0, 255);
    EEPROM.write(i, val);
    delay(5);
    key.writeByte(i, val);
    delay(5);    
  }  
  // маргнем светодиодом
    digitalWrite (13, HIGH);
    delay(1000);
    digitalWrite (13, LOW);
   
}

void programmedKey(){ // заливает код из памяти в ключ
  if (keySearch()) error(); // если нет ключа
  for (byte i = 0; i < 64; i++){
    byte val = EEPROM.read(i); 
    key.writeByte(i, val);
    delay(5);
  }  
  // маргнем светодиодом
    digitalWrite (13, HIGH);
    delay(1000);
    digitalWrite (13, LOW);
} 

void error(){
  while(1){
    digitalWrite(13, !digitalRead(13));
    delay(300);
  }
}//

void setup() {
// Serial.begin(9600);

  //  Wire.begin(); // ненужно
  key.initialize();
  servo.attach(9);
  
  pinMode(13, OUTPUT);
  pinMode(resetButton, INPUT_PULLUP);
  pinMode(programmedButton, INPUT_PULLUP);
  
  if (!digitalRead(resetButton) && !digitalRead(programmedButton)) error();
  if (!digitalRead(resetButton)) resetKey();  
  if (!digitalRead(programmedButton)) programmedKey();
  
}

void loop() {
  if (keySearch() == 0){ // если нашли ключ  
    if (keyTest() == 1){ // если ключ совпал
      servo.write(100);  // вертим верву  
    }
  }  
  else servo.write(0);   // 
  
  delay(1000); 
}