Arduino 搭建简单模拟C4定时器

发布于 2024-02-27  3648 次阅读


基本展示

很简单,大概的效果如下

特点:

  • 有三段蜂鸣频率
  • 有显示动画效果
  • LED简单等效

使用的材料

Arduino UNO 、OLED 0.96 IIC 128x64 屏幕、有源蜂鸣器、LED灯

线路布局

去掉元件后:

所使用的代码

使用Adafruit_SSD1306库,在使用代码时候请用IDE下载一下,部分代码注释来自太极创客

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
 

/************************************
*                                   *
*        转载请注明出处:            *
*        uulin.cn                   *
*                                   *
*************************************/
 


#define SCREEN_WIDTH 128 // 设置OLED宽度,单位:像素
#define SCREEN_HEIGHT 64 // 设置OLED高度,单位:像素

#define redPin 9
#define greenPin 8
#define bluePin 10
#define beePin 2
#define BPin 13
 
// 自定义重置引脚,虽然教程未使用,但却是Adafruit_SSD1306库文件所必需的
#define OLED_RESET 4
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
bool red=0,green=0,blue=0;

void setup() {
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
  pinMode(beePin, OUTPUT);
  pinMode(BPin,INPUT_PULLUP);
  digitalWrite(beePin, HIGH);
  
}


void displayColor()
{
  if (red == 1){
    digitalWrite(redPin, HIGH);
  }
  else
    digitalWrite(redPin, LOW);
  if (green == 1){
    digitalWrite(greenPin, HIGH);
  }
  else
    digitalWrite(greenPin, LOW);
  if (blue == 1){
    digitalWrite(bluePin, HIGH);
  }
  else
    digitalWrite(bluePin, LOW);
}
void show(){
  red=0;
  green=0;
  blue=0;
  red = 1;
  displayColor();
  delay (250);
  red = 0;
  green =1;
  displayColor();
  delay (250);
  green =0;
  blue = 1;
  displayColor();
  delay (250);
  red=0;
  green=0;
  blue=0;
  displayColor();
}
void beforeBoom()
{
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(1.5);
  display.setCursor(0, 0);
  display.print("Touch the Botton to  Start");
  display.setCursor(0, 20);
  display.print("Now you are");
  display.setTextSize(2);
  display.setCursor(0, 40);
  display.print("   Safe");
}

void readyBoom(int time)
{
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(2);
  display.setCursor(0, 0);
  display.print("WARNING");
  display.setCursor(0, 20);
  display.setTextSize(1.5);
  display.print("The TNT will BOOM in");
  display.setTextSize(3);
  display.setCursor(0, 40);
  display.print("  ");
  display.print(time);
  display.print("S");
}
void haveBoom()
{
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(4.5);
  display.setCursor(0, 0);
  display.print("BOOM!");
}
void youDie()
{
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(4.5);
  display.setCursor(0, 0);
  display.print("You");
  display.setCursor(0, 35);
  display.print("Die!");
}
void loop() {
  beforeBoom();
  display.display();
  if(digitalRead(BPin) == LOW)
  {
    digitalWrite(beePin, LOW);
    delay(100);
    digitalWrite(beePin, HIGH);
  }
  else
  return;
   // show();
   for(int time = 20;time>=10;time--)
   {
    digitalWrite(beePin, LOW);
    delay(250);
    digitalWrite(beePin, HIGH);
    readyBoom(time);
    display.display();
    show();
   }
   
   for(int time = 9;time>=4;time--)
   {

    for(int i=1;i<=5;i++)
    { 
      digitalWrite(beePin, LOW);
      delay(100);
      digitalWrite(beePin, HIGH);
      red=1;
      green=1;
      blue=1;
      displayColor();
      delay(90);
      red=0;
      green=0;
      blue=0;
      displayColor();
      readyBoom(time);
      display.display();
   }
  }
     for(int time = 3;time>0;time--)
   {

    for(int i=1;i<=10;i++)
    { 
      digitalWrite(beePin, LOW);
      delay(50);
      digitalWrite(beePin, HIGH);
      red=1;
      green=1;
      blue=1;
      displayColor();
      delay(40);
      red=0;
      green=0;
      blue=0;
      displayColor();
      readyBoom(time);
      display.display();
   }
  }

   readyBoom(0);
   display.display();
   digitalWrite(beePin, LOW);
   delay(3000);
   digitalWrite(beePin, HIGH);
   
   haveBoom();
   display.display();
   delay(1000);
   youDie();
   display.display();
   delay(3000);
}

具体的接线在前面define那里。

参考:太极创客 - Arduino驱动OLED屏幕

就这么多了,你还往下愁啥(bushi)

如果有什么问题,您可以在本页留下评论(填入并检查自己的邮箱),或者直接根据本博客主页留下的邮箱联系我

本文章使用CC BY-NC-SA 4.0协议,商业转载请联系作者获得授权,非商业转载请注明出处。