/* * Naprogramujeme zámek od trezoru s kombinací čísel. * Čísla budeme zadávat pomocí potenciometru, potvrzovat spínačem S1. * Při zadání správného čísla se ozve pozitivní ton, při zadání negativní. * Postup odemčení zámku budou zobrazovat ledky T7 až TC, napojené na D08 až D13 * * * Zapojení drátků * Saimon 1:23-plus, 24-X1, 25-mínus, 119-X2, 120-plus, 121-mínus, 109-mínus * X3-88, X4-89, X5-90, X6-91, napájení číslicovky-plus * * Saimon 4:X1-A07, X2-D02, X3-D04, X4-D05, X5-D06, X6-D07, 108-D03 * D08-T6, D09-T5, D10-T4, D11-T3, D12-T2, D13-T1 */ int num1pin = 7, num2pin = 6, num4pin = 5, num8pin = 4; int spinacS2 = 2, reproPin = 3, potenciometrPin = 7; int T1=13, T2=12, T3=11, T4=10, T5=9, T6=8; int hodnotaPotenciometru, zadaneCislo; int ciselnyKod[] = {5,1,8,15,3,9}; int index=0; void setup() { for (int i=4; i<=13; i++) pinMode (i,OUTPUT); pinMode (spinacS2, INPUT); } void zobrazCislo (int cislo){ // Funkce, která převede (pomocí operace bitový AND) číslo na binární kod, který zapíše na výstupy digitalWrite(num1pin,cislo&1); digitalWrite(num2pin,cislo&2); digitalWrite(num4pin,cislo&4); digitalWrite(num8pin,cislo&8); } void prohra () { // pokud hráč netrefí číslo ze správné kombinace for (int i=8; i<=13; i++) digitalWrite (i, 0); //zhasneme všechny LED for (int i = 1000; i >= 500; i-=50) { //zahrajeme melodii tone (reproPin, i, 50); delay (50); } index = 0; } void vyhra () { // Když se hráč trefí 6 krát, for (int i = 500; i < 1000; i+=100) { // zahrajeme vítěznou melodii tone (reproPin, i, 200); delay (200); } for (int i=8; i<=13; i++) digitalWrite (i, 0); //zhasneme všechny LED index = 0; } int nactiCislo () { //čteme hodnotu potenciometru a mapujeme ji na rozsah čísel 0-15 int cislo; hodnotaPotenciometru = analogRead (potenciometrPin); cislo = map (hodnotaPotenciometru, 0, 1023, 0, 15); zobrazCislo (cislo); return (cislo); } void loop() { zadaneCislo = nactiCislo(); if ( digitalRead (spinacS2)) { //při stisku S2 if ( zadaneCislo == ciselnyKod[index]) { //pokud je zadavane číslo stejné jako číslo uložené v poli digitalWrite (index+8, 1); index++; tone (reproPin, 1000, 50 ); delay (200); } else prohra (); } if ( index == 6 ) vyhra (); }