понедельник, 19 октября 2015 г.

Игра "Разминируй бомбу" с помощью Ардуино

Game "Defuse bomb" with Arduino Uno

You need:
Arduino UNO R3
4 digits 7-segments display with TM1637 driver
Buzzer
2 Leds - green and red with 2 risistors
Button
wires



Sketch
/*
Автор Saftik  Bomba_v1.0
муляж бомбы для фильма.
ИДЕОЛОГИЯ:
Изначально на дисплее 30 минут.
кнопкой Btn_+minute прибовляю + 1 минуту.
кнопкой Btn_-minute убираю - 1 минуту.
кнопкой Start запускаем таймер.
провод  Stop = остановка
провод  Speed = ускоряет отсчет
провод  Provod_minus_polovina= половина минут убрать

*/
#define Btn_plus_minute   7
#define Btn_minus_minute  6
#define Btn_Start_minute  8
#define Provod_Stop       A3
#define Provod_Speed      A4
#define Provod_minus_polovina A5
#define ledPin 13
#define greenLed 9
#define redLed 10
#define BUZZER_PIN  3

int timerFlag = 0;
int duration = 5;
int uskorenie = 1;
boolean polovinaFlag = 0;
//===================================================== display
#include "TM1637.h"                                    // библиотека дисплея
#define DISPLAY_CLK_PIN 11                             // на других пинах криво работает 
#define DISPLAY_DIO_PIN 12
TM1637 display(DISPLAY_CLK_PIN, DISPLAY_DIO_PIN);
unsigned char hour = 0;
unsigned char minute = 30;                            // первоначальное время
unsigned char second = 0;
unsigned char milisecond = 0;
unsigned char halfsecond = 0;
//=====================================================
unsigned long timeTimer = 0;
unsigned long startTimer = 0;
//=====================================================
void setup() {
  display.set(3);  //Включаем и настраиваем индикатор в скобках (яркость 0-7)
  display.init();  //Получаем число из строки, зная номер первого символа
  // Serial.begin(9600);

  pinMode(Btn_plus_minute,   INPUT_PULLUP);
  pinMode(Btn_minus_minute,  INPUT_PULLUP);
  pinMode(Btn_Start_minute,  INPUT_PULLUP);
  pinMode(ledPin, OUTPUT);
  pinMode(greenLed, OUTPUT);
  pinMode(redLed, OUTPUT);
  // пин с пьезопищалкой — выход...
  pinMode(BUZZER_PIN, OUTPUT);
  beep(50);
  beep(50);
  beep(50);

}
void loop() {
  opros_knopok();
  timer();
  displey();
}
void opros_knopok() {
  if (digitalRead(Btn_plus_minute) == LOW) {
    delay (250), duration++;
  }
  if (digitalRead(Btn_minus_minute) == LOW) {
    delay (250), duration--;
    if (duration == 0) {
      duration = 60;
    }
  }
  if (digitalRead(Btn_Start_minute) == LOW) {
    delay (250); timerFlag = 1; digitalWrite(redLed, HIGH); digitalWrite(greenLed, LOW);
    uskorenie = 500; polovinaFlag = 0; startTimer = millis();
  }

  if (analogRead(Provod_Stop) > 20)  {
    delay (150), timerFlag = 0;
    digitalWrite(redLed, LOW);
    digitalWrite(greenLed, HIGH);
    playmario();
  }

  if (analogRead(Provod_Speed) > 20) {
    uskorenie = 15;
  }

  if (analogRead(Provod_minus_polovina) > 20 && duration > 2 && polovinaFlag == 0) {
    delay (50);
    duration /= 2; polovinaFlag = 1;
  }
}

void timer() {
  if (timerFlag == 1) {
    timeTimer = (millis() - startTimer);
    if (timeTimer >= uskorenie) {
      halfsecond ++;
      startTimer = millis();
    }
    if (halfsecond == 2) {
      halfsecond = 0, second-- ;
      beep(100);
    }
    if (second == 0) {
      second = 59, duration--;
    }
  }
  if (timerFlag == 1 && duration == -1) {
    second = 0;
    startTimer = 0;
    duration = 0;
    timeTimer = 0;
    timerFlag = 0;
    digitalWrite(ledPin, HIGH);
    polovinaFlag = 0;
    analogWrite(BUZZER_PIN, 1);
  }
}

void displey() {
  hour = duration / 60;
  minute = duration - (hour * 60);

  if (duration >= 60) {
    int8_t timeDisp[4];
    timeDisp[0] = hour / 10;
    timeDisp[1] = hour % 10;
    timeDisp[2] = minute / 10;
    timeDisp[3] = minute % 10;

    display.display(timeDisp);
    if (halfsecond == 1) {
      display.point(POINT_ON);
      beep(100);
    }
    else
    { display.point(POINT_OFF);
    }
    // display.point(halfsecond ==1 ? POINT_OFF : POINT_ON);

  }
  if (duration < 60 && duration >= 1) {
    int8_t timeDisp[4];
    timeDisp[0] = minute / 10;
    timeDisp[1] = minute % 10;
    timeDisp[2] = second / 10;
    timeDisp[3] = second % 10;

    display.display(timeDisp);
    display.point(halfsecond == 1 ? POINT_OFF : POINT_ON);
  }
  if (duration < 1) {
    milisecond = (timeTimer - hour * 3600 - minute * 60 - second) % 100; 
    // Serial.println (milisecond);
    int8_t timeDisp[4];
    timeDisp[0] = second / 10;
    timeDisp[1] = second % 10;
    timeDisp[2] = milisecond / 10;
    timeDisp[3] = milisecond % 10;

    display.display(timeDisp);
    display.point(halfsecond == 1 ? POINT_OFF : POINT_ON);
  }
}

void beep(unsigned char delayms) {
  analogWrite(BUZZER_PIN, 200);      // Almost any value can be used except 0 and 255
  // experiment to get the best tone
  delay(delayms);          // wait for a delayms ms
  analogWrite(BUZZER_PIN, 0);       // 0 turns it off
  delay(delayms);          // wait for a delayms ms
}
void playmario() {
tone(BUZZER_PIN,1318,150);
delay(150);
tone(BUZZER_PIN,1318,300);
delay(300);
tone(BUZZER_PIN,1318,150);
delay(300);
tone(BUZZER_PIN,1046,150);
delay(150);
tone(BUZZER_PIN,1318,300);
delay(300);
tone(BUZZER_PIN,1568,600);
delay(600);
tone(BUZZER_PIN,784,600);
delay(600); 
tone(BUZZER_PIN,1046,450) ; // 2й такт
delay(450);
tone(BUZZER_PIN,784,150);
delay(450);
tone(BUZZER_PIN,659,300);
delay(450);
tone(BUZZER_PIN,880,300);
delay(300);
tone(BUZZER_PIN,987,150);
delay(300);
tone(BUZZER_PIN,932,150);
delay(150);
tone(BUZZER_PIN,880,300);
delay(300);
tone(BUZZER_PIN,784,210); // 3й такт
delay(210);
tone(BUZZER_PIN,1318,210);
delay(210);
tone(BUZZER_PIN,1568,150);
delay(150);
tone(BUZZER_PIN,1750,300);
delay(300);
tone(BUZZER_PIN,1396,150);
delay(150);
tone(BUZZER_PIN,1568,150);
delay(300);
tone(BUZZER_PIN,1318,300);
delay(300);
tone(BUZZER_PIN,1046,150);
delay(150);
tone(BUZZER_PIN,1174,150);
delay(150);
tone(BUZZER_PIN,987,450);
delay(450);
tone(BUZZER_PIN,1046,450); // 4й такт
delay(450);
tone(BUZZER_PIN,784,150);
delay(450);
tone(BUZZER_PIN,659,300);
delay(450);
tone(BUZZER_PIN,880,300);
delay(300);
tone(BUZZER_PIN,987,150);
delay(300);
tone(BUZZER_PIN,932,150);
delay(150);
tone(BUZZER_PIN,880,300);
delay(300);
tone(BUZZER_PIN,784,210); // 5й такт
delay(210);
tone(BUZZER_PIN,1318,210);
delay(210);
tone(BUZZER_PIN,1568,150);
delay(150);
tone(BUZZER_PIN,1750,300);
delay(300);
tone(BUZZER_PIN,1396,150);
delay(150);
tone(BUZZER_PIN,1568,150);
delay(300);
tone(BUZZER_PIN,1318,300);
delay(300);
tone(BUZZER_PIN,1046,150);
delay(150);
tone(BUZZER_PIN,1174,150);
delay(150);
tone(BUZZER_PIN,987,450);
delay(600);
tone(BUZZER_PIN,1568,150); // 6ой Спуск вниз
delay(150);
tone(BUZZER_PIN,1480,150);
delay(150);
tone(BUZZER_PIN,1396,150);
delay(150);
tone(BUZZER_PIN,1244,300);
delay(300);
tone(BUZZER_PIN,1318,150);
delay(300);
tone(BUZZER_PIN,830,150);
delay(150);
tone(BUZZER_PIN,880,150);
delay(150);
tone(BUZZER_PIN,1046,150);
delay(300);
tone(BUZZER_PIN,880,150);
delay(150);
tone(BUZZER_PIN,1046,150);
delay(150);
tone(BUZZER_PIN,1174,150);
delay(150);
delay(300); // 7ой 
tone(BUZZER_PIN,1568,150);
delay(150);
tone(BUZZER_PIN,1480,150);
delay(150);
tone(BUZZER_PIN,1396,150);
delay(150);
tone(BUZZER_PIN,1244,300);
delay(300);
tone(BUZZER_PIN,1318,150);
delay(300);
tone(BUZZER_PIN,2093,300);
delay(300);
tone(BUZZER_PIN,2093,150);
delay(150);
tone(BUZZER_PIN,2093,600);
delay(600);
tone(BUZZER_PIN,1568,150); // 6ой Спуск вниз ПОВТОР
delay(150);
tone(BUZZER_PIN,1480,150);
delay(150);
tone(BUZZER_PIN,1396,150);
delay(150);
tone(BUZZER_PIN,1244,300);
delay(300);
tone(BUZZER_PIN,1318,150);
delay(300);
tone(BUZZER_PIN,830,150);
delay(150);
tone(BUZZER_PIN,880,150);
delay(150);
tone(BUZZER_PIN,1046,150);
delay(300);
tone(BUZZER_PIN,880,150);
delay(150);
tone(BUZZER_PIN,1046,150);
delay(150);
tone(BUZZER_PIN,1174,150);
delay(450);
tone(BUZZER_PIN,1244,300);
delay(450);
tone(BUZZER_PIN,1174,450);
delay(450);
tone(BUZZER_PIN,1046,600);
delay(1200 );
tone(BUZZER_PIN,1568,150); // 6ой Спуск вниз
delay(150);
tone(BUZZER_PIN,1480,150);
delay(150);
tone(BUZZER_PIN,1396,150);
delay(150);
tone(BUZZER_PIN,1244,300);
delay(300);
tone(BUZZER_PIN,1318,150);
delay(300);
tone(BUZZER_PIN,830,150);
delay(150);
tone(BUZZER_PIN,880,150);
delay(150);
tone(BUZZER_PIN,1046,150);
delay(300);
tone(BUZZER_PIN,880,150);
delay(150);
tone(BUZZER_PIN,1046,150);
delay(150);
tone(BUZZER_PIN,1174,150);
delay(150);
delay(300); // 7ой 
tone(BUZZER_PIN,1568,150);
delay(150);
tone(BUZZER_PIN,1480,150);
delay(150);
tone(BUZZER_PIN,1396,150);
delay(150);
tone(BUZZER_PIN,1244,300);
delay(300);
tone(BUZZER_PIN,1318,150);
delay(300);
tone(BUZZER_PIN,2093,300);
delay(300);
tone(BUZZER_PIN,2093,150);
delay(150);
tone(BUZZER_PIN,2093,600);
delay(600);
tone(BUZZER_PIN,1568,150); // 6ой Спуск вниз ПОВТОР
delay(150);
tone(BUZZER_PIN,1480,150);
delay(150);
tone(BUZZER_PIN,1396,150);
delay(150);
tone(BUZZER_PIN,1244,300);
delay(300);
tone(BUZZER_PIN,1318,150);
delay(300);
tone(BUZZER_PIN,830,150);
delay(150);
tone(BUZZER_PIN,880,150);
delay(150);
tone(BUZZER_PIN,1046,150);
delay(300);
tone(BUZZER_PIN,880,150);
delay(150);
tone(BUZZER_PIN,1046,150);
delay(150);
tone(BUZZER_PIN,1174,150);
delay(450);
tone(BUZZER_PIN,1244,300);
delay(450);
tone(BUZZER_PIN,1174,450);
delay(450);
tone(BUZZER_PIN,1046,600);
delay(1200);
tone(BUZZER_PIN,1046,150); // 8ой такт
delay(150);
tone(BUZZER_PIN,1046,300);
delay(300);
tone(BUZZER_PIN,1046,150);
delay(300);
tone(BUZZER_PIN,1046,150);
delay(150);
tone(BUZZER_PIN,1174,300);
delay(300);
tone(BUZZER_PIN,1318,150);
delay(150);
tone(BUZZER_PIN,1046,300);
delay(300);
tone(BUZZER_PIN,880,150);
delay(150);
tone(BUZZER_PIN,784,600);
delay(600);
tone(BUZZER_PIN,1046,150);
delay(150);
tone(BUZZER_PIN,1046,300);
delay(300);
tone(BUZZER_PIN,1046,150);
delay(300);
tone(BUZZER_PIN,1046,150);
delay(150);
tone(BUZZER_PIN,1174,300);
delay(300);
tone(BUZZER_PIN,1318,150);
delay(150);
delay(1200);
tone(BUZZER_PIN,1046,150); // 8ой такт
delay(150);
tone(BUZZER_PIN,1046,300);
delay(300);
tone(BUZZER_PIN,1046,150);
delay(300);
tone(BUZZER_PIN,1046,150);
delay(150);
tone(BUZZER_PIN,1174,300);
delay(300);
tone(BUZZER_PIN,1318,150);
delay(150);
tone(BUZZER_PIN,1046,300);
delay(300);
tone(BUZZER_PIN,880,150);
delay(150);
tone(BUZZER_PIN,784,600);
delay(600);
tone(BUZZER_PIN,1046,150);
delay(150);
tone(BUZZER_PIN,1046,300);
delay(300);
tone(BUZZER_PIN,1046,150);
delay(300);
tone(BUZZER_PIN,1046,150);
delay(150);
tone(BUZZER_PIN,1174,300);
delay(300);
tone(BUZZER_PIN,1318,150);
delay(150);
delay(1200);
tone(BUZZER_PIN,1046,450) ; // 2й такт
delay(450);
tone(BUZZER_PIN,784,150);
delay(450);
tone(BUZZER_PIN,659,300);
delay(450);
tone(BUZZER_PIN,880,300);
delay(300);
tone(BUZZER_PIN,987,150);
delay(300);
tone(BUZZER_PIN,932,150);
delay(150);
tone(BUZZER_PIN,880,300);
delay(300);
tone(BUZZER_PIN,784,210); // 3й такт
delay(210);
tone(BUZZER_PIN,1318,210);
delay(210);
tone(BUZZER_PIN,1568,150);
delay(150);
tone(BUZZER_PIN,1750,300);
delay(300);
tone(BUZZER_PIN,1396,150);
delay(150);
tone(BUZZER_PIN,1568,150);
delay(300);
tone(BUZZER_PIN,1318,300);
delay(300);
tone(BUZZER_PIN,1046,150);
delay(150);
tone(BUZZER_PIN,1174,150);
delay(150);
tone(BUZZER_PIN,987,450);
delay(450);
tone(BUZZER_PIN,1046,450); // 4й такт
delay(450);
tone(BUZZER_PIN,784,150);
delay(450);
tone(BUZZER_PIN,659,300);
delay(450);
tone(BUZZER_PIN,880,300);
delay(300);
tone(BUZZER_PIN,987,150);
delay(300);
tone(BUZZER_PIN,932,150);
delay(150);
tone(BUZZER_PIN,880,300);
delay(300);
tone(BUZZER_PIN,784,210); // 5й такт
delay(210);
tone(BUZZER_PIN,1318,210);
delay(210);
tone(BUZZER_PIN,1568,150);
delay(150);
tone(BUZZER_PIN,1750,300);
delay(300);
tone(BUZZER_PIN,1396,150);
delay(150);
tone(BUZZER_PIN,1568,150);
delay(300);
tone(BUZZER_PIN,1318,300);
delay(300);
tone(BUZZER_PIN,1046,150);
delay(150);
tone(BUZZER_PIN,1174,150);
delay(150);
tone(BUZZER_PIN,987,450);
delay(600);
tone(BUZZER_PIN,1568,150); // 6ой Спуск вниз
delay(150);
tone(BUZZER_PIN,1480,150);
delay(150);
tone(BUZZER_PIN,1396,150);
delay(150);
tone(BUZZER_PIN,1244,300);
delay(300);
tone(BUZZER_PIN,1318,150);
delay(300);
tone(BUZZER_PIN,830,150);
delay(150);
tone(BUZZER_PIN,880,150);
delay(150);
tone(BUZZER_PIN,1046,150);
delay(300);
tone(BUZZER_PIN,880,150);
delay(150);
tone(BUZZER_PIN,1046,150);
delay(150);
tone(BUZZER_PIN,1174,150);
delay(150);
delay(300); // 7ой 
tone(BUZZER_PIN,1568,150);
delay(150);
tone(BUZZER_PIN,1480,150);
delay(150);
tone(BUZZER_PIN,1396,150);
delay(150);
tone(BUZZER_PIN,1244,300);
delay(300);
tone(BUZZER_PIN,1318,150);
delay(300);
tone(BUZZER_PIN,2093,300);
delay(300);
tone(BUZZER_PIN,2093,150);
delay(150);
tone(BUZZER_PIN,2093,600);
delay(600);
tone(BUZZER_PIN,1568,150); // 6ой Спуск вниз ПОВТОР
delay(150);
tone(BUZZER_PIN,1480,150);
delay(150);
tone(BUZZER_PIN,1396,150);
delay(150);
tone(BUZZER_PIN,1244,300);
delay(300);
tone(BUZZER_PIN,1318,150);
delay(300);
tone(BUZZER_PIN,830,150);
delay(150);
tone(BUZZER_PIN,880,150);
delay(150);
tone(BUZZER_PIN,1046,150);
delay(300);
tone(BUZZER_PIN,880,150);
delay(150);
tone(BUZZER_PIN,1046,150);
delay(150);
tone(BUZZER_PIN,1174,150);
delay(450);
tone(BUZZER_PIN,1244,300);
delay(450);
tone(BUZZER_PIN,1174,450);
delay(450);
tone(BUZZER_PIN,1046,600);
delay(1200 );
tone(BUZZER_PIN,1568,150); // 6ой Спуск вниз
delay(150);
tone(BUZZER_PIN,1480,150);
delay(150);
tone(BUZZER_PIN,1396,150);
delay(150);
tone(BUZZER_PIN,1244,300);
delay(300);
tone(BUZZER_PIN,1318,150);
delay(300);
tone(BUZZER_PIN,830,150);
delay(150);
tone(BUZZER_PIN,880,150);
delay(150);
tone(BUZZER_PIN,1046,150);
delay(300);
tone(BUZZER_PIN,880,150);
delay(150);
tone(BUZZER_PIN,1046,150);
delay(150);
tone(BUZZER_PIN,1174,150);
delay(150);
delay(300); // 7ой 
tone(BUZZER_PIN,1568,150);
delay(150);
tone(BUZZER_PIN,1480,150);
delay(150);
tone(BUZZER_PIN,1396,150);
delay(150);
tone(BUZZER_PIN,1244,300);
delay(300);
tone(BUZZER_PIN,1318,150);
delay(300);
tone(BUZZER_PIN,2093,300);
delay(300);
tone(BUZZER_PIN,2093,150);
delay(150);
tone(BUZZER_PIN,2093,600);
delay(600);
tone(BUZZER_PIN,1568,150); // 6ой Спуск вниз ПОВТОР
delay(150);
tone(BUZZER_PIN,1480,150);
delay(150);
tone(BUZZER_PIN,1396,150);
delay(150);
tone(BUZZER_PIN,1244,300);
delay(300);
tone(BUZZER_PIN,1318,150);
delay(300);
tone(BUZZER_PIN,830,150);
delay(150);
tone(BUZZER_PIN,880,150);
delay(150);
tone(BUZZER_PIN,1046,150);
delay(300);
tone(BUZZER_PIN,880,150);
delay(150);
tone(BUZZER_PIN,1046,150);
delay(150);
tone(BUZZER_PIN,1174,150);
delay(450);
tone(BUZZER_PIN,1244,300);
delay(450);
tone(BUZZER_PIN,1174,450);
delay(450);
tone(BUZZER_PIN,1046,600);
delay(1200);
tone(BUZZER_PIN,1046,150); // 8ой такт
delay(150);
tone(BUZZER_PIN,1046,300);
delay(300);
tone(BUZZER_PIN,1046,150);
delay(300);
tone(BUZZER_PIN,1046,150);
delay(150);
tone(BUZZER_PIN,1174,300);
delay(300);
tone(BUZZER_PIN,1318,150);
delay(150);
tone(BUZZER_PIN,1046,300);
delay(300);
tone(BUZZER_PIN,880,150);
delay(150);
tone(BUZZER_PIN,784,600);
delay(600);
tone(BUZZER_PIN,1046,150);
delay(150);
tone(BUZZER_PIN,1046,300);
delay(300);
tone(BUZZER_PIN,1046,150);
delay(300);
tone(BUZZER_PIN,1046,150);
delay(150);
tone(BUZZER_PIN,1174,300);
delay(300);
tone(BUZZER_PIN,1318,150);
delay(150);
delay(1200);
tone(BUZZER_PIN,1046,150); // 8ой такт
delay(150);
tone(BUZZER_PIN,1046,300);
delay(300);
tone(BUZZER_PIN,1046,150);
delay(300);
tone(BUZZER_PIN,1046,150);
delay(150);
tone(BUZZER_PIN,1174,300);
delay(300);
tone(BUZZER_PIN,1318,150);
delay(150);
tone(BUZZER_PIN,1046,300);
delay(300);
tone(BUZZER_PIN,880,150);
delay(150);
tone(BUZZER_PIN,784,600);
delay(600);
tone(BUZZER_PIN,1046,150);
delay(150);
tone(BUZZER_PIN,1046,300);
delay(300);
tone(BUZZER_PIN,1046,150);
delay(300);
tone(BUZZER_PIN,784,150);
delay(150);
tone(BUZZER_PIN,1174,300);
delay(300);
tone(BUZZER_PIN,1046,2400);
delay(24000);
delay(1200);
}

Комментариев нет:

Отправить комментарий