基本展示
很简单,大概的效果如下
特点:
- 有三段蜂鸣频率
- 有显示动画效果
- 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那里。
就这么多了,你还往下愁啥(bushi)
如果有什么问题,您可以在本页留下评论(填入并检查自己的邮箱),或者直接根据本博客主页留下的邮箱联系我
本文章使用CC BY-NC-SA 4.0协议,商业转载请联系作者获得授权,非商业转载请注明出处。
Comments NOTHING