электронный замок на 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); }