Attiny2313 кодовый замок КБД-10Н

Yurchik26
Offline
Зарегистрирован: 16.03.2013

Был замок КБД-10Н. Сгорел МК Attiny2313. Чтоб по быстрому сделать, за пару десяток минут набросал скетч без библиотек. Через ARDUINO IDE записал в новый мк. Все работает. 

#define stroka1 12
#define stroka2 11
#define stroka3 10
#define stroka4 9
#define stolb1 15
#define stolb2 14
#define stolb3 13
#define buzzer 6
#define redled 0
#define greenled 1
#define relay 8
int val = 1;
boolean flag11=false;
boolean flag12=false;
boolean flag13=false;
boolean flag14=false;
boolean flag21=false;
boolean flag22=false;
boolean flag23=false;
boolean flag24=false;
boolean flag31=false;
boolean flag32=false;
boolean flag33=false;
boolean flag34=false;


void setup() {                
    pinMode(stroka1, INPUT);   
    pinMode(stroka2, INPUT);   
    pinMode(stroka3, INPUT);   
    pinMode(stroka4, INPUT);
    pinMode(stolb1, OUTPUT);
    pinMode(stolb2, OUTPUT);
    pinMode(stolb3, OUTPUT);
    pinMode(redled, OUTPUT);
    pinMode(greenled, OUTPUT);
    pinMode(buzzer, OUTPUT);
    pinMode(relay, OUTPUT);
    digitalWrite(stroka1, HIGH);
    digitalWrite(stroka2, HIGH);
    digitalWrite(stroka3, HIGH);
    digitalWrite(stroka4, HIGH);
    digitalWrite(stolb1, HIGH);
    digitalWrite(stolb2, HIGH);
    digitalWrite(stolb3, HIGH);
    digitalWrite(redled, HIGH);
    digitalWrite(greenled, HIGH);
    digitalWrite(buzzer, LOW);
    digitalWrite(relay, LOW);
}


void loop() {
  digitalWrite(stolb1, LOW);
  digitalWrite(stolb2, HIGH);
  digitalWrite(stolb3, HIGH);
  if (digitalRead(stroka1) == LOW&&flag11==false) //1
                                {
                                  flag11=true;
                                  digitalWrite(redled, LOW);
                                }
  if (digitalRead(stroka1) == HIGH&&flag11==true)
                                {
                                  val=val+1;
                                  flag11=false;
                                  digitalWrite(redled, HIGH);
                                }
  if (digitalRead(stroka2) == LOW&&flag12==false) //4
                                {
                                  flag12=true;
                                  digitalWrite(redled, LOW);
                                }
  if (digitalRead(stroka2) == HIGH&&flag12==true)
                                {
                                  val=val+25;
                                  flag12=false;
                                  digitalWrite(redled, HIGH);
                                }
  if (digitalRead(stroka3) == LOW&&flag13==false) //7
                                {
                                  flag13=true;
                                  digitalWrite(redled, LOW);
                                }
  if (digitalRead(stroka3) == HIGH&&flag13==true)
                                {
                                  val=val*7;
                                  flag13=false;
                                  digitalWrite(redled, HIGH);
                                }
  digitalWrite(stolb1, HIGH);
  digitalWrite(stolb2, LOW);
  digitalWrite(stolb3, HIGH);
  if (digitalRead(stroka1) == LOW&&flag21==false) //2
                                {
                                  flag21=true;
                                  digitalWrite(redled, LOW);
                                }
  if (digitalRead(stroka1) == HIGH&&flag21==true)
                                {
                                  val=val+25;
                                  flag21=false;
                                  digitalWrite(redled, HIGH);
                                }
  if (digitalRead(stroka2) == LOW&&flag22==false) //5
                                {
                                  flag22=true;
                                  digitalWrite(redled, LOW);
                                }
  if (digitalRead(stroka2) == HIGH&&flag22==true)
                                {
                                  val=val*5;
                                  flag22=false;
                                  digitalWrite(redled, HIGH);
                                }
  if (digitalRead(stroka3) == LOW&&flag23==false) //8
                                {
                                  flag23=true;
                                  digitalWrite(redled, LOW);
                                }
  if (digitalRead(stroka3) == HIGH&&flag23==true)
                                {
                                  val=val+25;
                                  flag23=false;
                                  digitalWrite(redled, HIGH);
                                }
  if (digitalRead(stroka4) == LOW&&flag24==false) //0
                                {
                                  flag24=true;
                                  digitalWrite(redled, LOW);
                                }
  if (digitalRead(stroka4) == HIGH&&flag24==true)
                                {
                                  val = 1;
                                  flag24=false;
                                  digitalWrite(redled, HIGH);
                                }
  digitalWrite(stolb1, HIGH);
  digitalWrite(stolb2, HIGH);
  digitalWrite(stolb3, LOW);
  if (digitalRead(stroka1) == LOW&&flag31==false) //3
                                {
                                  flag31=true;
                                  digitalWrite(redled, LOW);
                                }
  if (digitalRead(stroka1) == HIGH&&flag31==true)
                                {
                                  val=val+25;
                                  flag31=false;
                                  digitalWrite(redled, HIGH);
                                }
  if (digitalRead(stroka2) == LOW&&flag32==false) //6
                                {
                                  flag32=true;
                                  digitalWrite(redled, LOW);
                                }
  if (digitalRead(stroka2) == HIGH&&flag32==true)
                                {
                                  val=val+25;
                                  flag32=false;
                                  digitalWrite(redled, HIGH);
                                }
  if (digitalRead(stroka3) == LOW&&flag33==false) //9
                                {
                                  flag33=true;
                                  digitalWrite(redled, LOW);
                                }
  if (digitalRead(stroka3) == HIGH&&flag33==true)
                                {
                                  val=val+25;
                                  flag33=false;
                                  digitalWrite(redled, HIGH);
                                }
 if (digitalRead(stroka4) == LOW&&flag34==false) //#
                                {
                                  flag34=true;
                                  digitalWrite(redled, LOW);
                                  digitalWrite(greenled, LOW);
                                }
 if (digitalRead(stroka4) == HIGH&&flag34==true)
                                {
                                digitalWrite(redled, HIGH);
                                digitalWrite(greenled, HIGH);
                                if (val == 255)
                                {
                                 digitalWrite(greenled, LOW);
                                 digitalWrite(relay, HIGH);
                                 delay (3000);
                                 digitalWrite(relay, LOW);
                                 digitalWrite(greenled, HIGH);
                                }
                                  val = 1;
                                  flag34=false;
                                }
  digitalWrite(stolb1, HIGH);
  digitalWrite(stolb2, HIGH);
  digitalWrite(stolb3, HIGH); 
}

 

 

b707
Offline
Зарегистрирован: 26.05.2017

такой код не надо выкладывать на форум,  его надо сжигать вместе с автором...

Yurchik26
Offline
Зарегистрирован: 16.03.2013

Точно. Как я сразу не понял. Стояла задача чтоб замок заработал, надо-же было к тебе обратиться, чтоб ты мне красивый скетч сделал, заплатить тебе деньги, а функции он выполнял бы одни и те же с моим. Глупый я, сразу не догадался. Зато скетч какой красивый был бы, загляденье.

Yurchik26
Offline
Зарегистрирован: 16.03.2013

Слушай домашняя армия(b707). Такой скетч хоть и не правильный с точки зрения оптимизации, но написал его я за 10-20 минут, не использовал библиотеки, потому что ограничен в памяти, языком си не владею, двое суток его оптимизировать не вижу смысла, т.к. такой замок мне наверно никогда в жизни больше в руки не попадет. Максимально простой (даже без циклов for) я сделал специально, чтоб все могли разобраться с ним. Ещё плюс в том, что у меня хорошо видно как можно работать с матричной клавиатурой (чтоб понять как работает библиотека матричных клавиатур). В итоге хоть одному человеку что то тут пригодится, а тебе чтоб в следующий раз глаза не выжег такой уродливый скетч, лучше даже не заходи в такие темы.