+++ /dev/null
-/*
- * Exit Rum
- * (c) Tomas 'Harvie' Mudrunka 2016
- */
-
-#include <Wire.h>
-#include <LiquidCrystal_I2C.h>
-#include <TM1637Display.h>
-
-#define TIMEOUT 300
-#define BEEP_FREQ 3000
-#define BEEP_LEN 50
-
-#define P_NASLAP 12
-#define P_PIEZO 35
-#define P_RELAY_1 9
-#define P_RELAY_2 8
-#define P_LEDSEG_CLK 2
-#define P_LEDSEG_DIO 3
-#define P_LEDSTRIP 11
-
-TM1637Display display(P_LEDSEG_CLK, P_LEDSEG_DIO);
-LiquidCrystal_I2C lcd(0x3F, 16, 2); //i2c addr, chars, lines
-
-#define JBASE 38
-#define JCOUNT 16
-
-#define J_A 0
-#define J_B 2
-#define J_C 4
-#define J_D 6
-#define J_E 8
-#define J_F 10
-#define J_G 12
-#define J_H 14
-#define J_1 1
-#define J_2 3
-#define J_3 5
-#define J_4 7
-#define J_5 9
-#define J_6 11
-#define J_7 13
-#define J_8 15
-
-boolean jumpers_read[JCOUNT][JCOUNT] = {0}, jumpers_secret[JCOUNT][JCOUNT] = {0};
-
-void jumper_store(int a, int b, boolean c) {
- jumpers_secret[min(a,b)][max(a,b)]=c;
-}
-
-void sound(char sndpin, float freq, float duration) { //Play bit-bang sound
- if(duration<=0) return; if(freq<=0) { delay(duration); return; }
- freq=((1000000/2)/freq); //Convert freq to delay (us)
- duration*=1000; //Convert duration to us
- pinMode(sndpin, OUTPUT);
- for(;duration>0;duration-=2*freq) {
- digitalWrite(sndpin, HIGH); delayMicroseconds(freq);
- digitalWrite(sndpin, LOW); delayMicroseconds(freq);
- }
- pinMode(sndpin, INPUT); //Close pin to avoid noise (optional)
-}
-
-int check_jumpers() {
- int i, j, check = 0, fail = 0;
-
- for(i=0;i<JCOUNT;i++) {
- pinMode(JBASE+i, OUTPUT);
- digitalWrite(JBASE+i, LOW);
- for(j=0;j<JCOUNT;j++) if(i<j) {
- pinMode(JBASE+j, INPUT_PULLUP);
- jumpers_read[i][j] = !digitalRead(JBASE+j);
- if(jumpers_read[i][j]) {
- check++;
- Serial.print(JBASE+i, DEC);
- Serial.print("->");
- Serial.print(JBASE+j, DEC);
- if(jumpers_secret[i][j]) {
- Serial.print("!");
- } else {
- fail++;
- }
- Serial.print(", ");
- }
- }
- pinMode(JBASE+i, INPUT_PULLUP);
- }
- Serial.println();
- check = fail ? -check : check;
- Serial.println(check, DEC);
- return check;
-}
-
-void setup() {
- jumper_store(J_A, J_5, true);
- jumper_store(J_B, J_4, true);
- jumper_store(J_C, J_7, true);
- jumper_store(J_D, J_2, true);
- jumper_store(J_E, J_6, true);
- jumper_store(J_F, J_8, true);
- jumper_store(J_G, J_1, true);
- jumper_store(J_H, J_3, true);
-
- pinMode(P_NASLAP, INPUT_PULLUP);
- pinMode(P_RELAY_1, OUTPUT);
- pinMode(P_RELAY_2, OUTPUT);
- pinMode(P_LEDSTRIP, OUTPUT);
-
- Serial.begin(9600);
- lcd.begin();
-}
-
-#define seconds_display(seconds) ((((seconds)/60)*100)+((seconds)%60))
-
-// the loop function runs over and over again forever
-void loop() {
- Serial.println("Inicializace systemu...");
-
- lcd.backlight();
- lcd.clear();
- lcd.print(" (c) SPOJE.NET");
- lcd.setCursor(0,1);
- lcd.print("Tomas@MudrunkaCZ");
-
- display.setBrightness(0x0f);
- display.setColon(true);
- display.showNumberDec(2323);
-
- delay(5000);
-
- lcd.noDisplay();
- lcd.noBacklight();
- display.setBrightness(0x00);
-
- display.setBrightness(0);
- display.showNumberDec(0);
-
- analogWrite(P_LEDSTRIP, 0);
- digitalWrite(P_RELAY_1, HIGH);
- digitalWrite(P_RELAY_2, HIGH);
-
- sound(P_PIEZO, BEEP_FREQ, BEEP_LEN);
- delay(BEEP_LEN);
- sound(P_PIEZO, BEEP_FREQ, BEEP_LEN);
- Serial.println("Cekam na aktivaci...");
- while(digitalRead(P_NASLAP));
-
- Serial.println("Sekvence aktivovana!");
-
- display.setBrightness(0x0f);
- for(int i=0;i<70;i++) {
- sound(P_PIEZO, random(500,10000), random(10,100));
- display.showNumberDec(random(1000,9999));
- analogWrite(P_LEDSTRIP, random(0,255));
- }
- sound(P_PIEZO, BEEP_FREQ, 2000);
-
- Serial.println("Odpocet aktivovan!");
- int timer = TIMEOUT;
- while(check_jumpers() != 8) {
- Serial.print("Zbyva: ");
- Serial.print(timer, DEC);
- Serial.println(" sekund");
- if(timer <= 0) {
- digitalWrite(P_RELAY_1, LOW);
- }
- display.setColon(timer%2);
- display.showNumberDec(seconds_display(timer));
- analogWrite(P_LEDSTRIP, map(timer%5, 0, 4, 255, 10));
- digitalWrite(P_RELAY_2, timer%2);
- if(timer>0) {
- timer--;
- sound(P_PIEZO, BEEP_FREQ, BEEP_LEN);
- delay(1000-BEEP_LEN);
- } else {
- analogWrite(P_LEDSTRIP, random(0,255));
- sound(P_PIEZO, random(500,10000), random(100,1000));
- }
- }
-
- Serial.println("Odpocet zastaven.");
- display.setColon(true);
- display.showNumberDec(seconds_display(timer));
- analogWrite(P_LEDSTRIP, 0);
- digitalWrite(P_RELAY_1, HIGH);
-
- //Muhammad Ismáil Árifi
- lcd.clear();
- lcd.print(" Muhammad");
- lcd.setCursor(0,1);
- lcd.print(" Ismail Arifi");
- lcd.backlight();
- lcd.display();
-
- Serial.println("Cekam na reset...");
- //while(digitalRead(P_NASLAP));
- while(check_jumpers() != 0) delay(1000);
-}