话本小说网 > 短篇小说 > arduino学习笔记
本书标签: 短篇 

舵机和显示器的联合应用:兽装可动耳(有角度显示)

arduino学习笔记

相信在这1.6万的阅读量里总有十几个福瑞控吧,相信你们经常看到有的视频里有人手搓可动耳,相信你们也很想要,现在它来了!

如果你不是福瑞控,也没有什么关系,你拿他做个起重机玩具,做个什么奇奇怪怪的东西我也不反对,但是这篇文章就拿兽装可动耳举例吧!

分析问题:

1.怎么动耳朵?

2.如何控制?

3.如何实现显示功能?

其实它的本质是很简单的,别听评论区里那些唬人的话,这个问题就是这么简单,就三个问题。

然后我们就要为其准备材料了:

问题一解决方案:准备舵机可以调整角度

问题二解决方案:由三个开关来选择:左耳或右耳;上;下这四种状态。为了方便还可以添加一个复位功能,暂设定为两个按钮同时按下。

问题三解决方案:使用显示器

准备好了材料我们就可以制作了:

接线:

VDD - 5V

VSS - GND

VO接适量电阻接GND

RS - 1

RW -GND

E - 2

D4 - 4

D5 - 5

D6 - 6

D7 - 7

A - 3.3V

K - GND

两个开关(上下)接到13和12上

方向调整开关接到8上

在9和10口上分别接两个舵机舵机橘线

舵机红黑接正和负

我们接好线了以后(建议先不接舵机,把显示屏和板子做成一个控制模块,这样留出5V,GND 10,9四根线最后确定控制部分和舵机长度了再去接。)

就可以开始编程了

我们这次要导入两个库(请把#替换成英文井号,因为发布后英文井号会乱码):

#nclude<Servo.h>

#include<LiquidCrystal.h>

然后是初始化:

const int rs = 1, en = 2, d4 = 4, d5 = 5, d6 = 6, d7 = 7;

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

Servo M_left;

Servo M_right;

int left = 90;

int right = 90;

void setup() {

lcd.begin(16, 2);

lcd.setCursor(0, 0);

M_left.attach(9);

M_right.attach(10);

lcd.write("loading...");

M_left.write(left);

M_right.write(right);

pinMode(12, INPUT);

pinMode(13, INPUT);

pinMode(8, INPUT);

lcd.clear();

lcd.setCursor(0, 0);

lcd.write("Load complete");

delay(2000);

lcd.clear();

lcd.setCursor(0, 0);

lcd.write("Fursuit Movable Ear System 1.1");

delay(3000);

lcd.clear();

lcd.setCursor(0,0);

lcd.write("by YingXing");

delay(2000);

}

之前讲过,大家都看得懂

然后就是主程序了

void loop() {

if (digitalRead(12) == HIGH && digitalRead(8) == LOW && left < 90 && digitalRead(13) == LOW) {

left = left + 5;

delay(250);

}

if (digitalRead(12) == LOW && digitalRead(8) == LOW && left > 0 && digitalRead(13) == HIGH) {

left = left - 5;

delay(250);

}

if (digitalRead(12) == HIGH && digitalRead(8) == HIGH && right < 90 && digitalRead(13) == LOW) {

right = right + 5;

delay(250);

}

if (digitalRead(12) == LOW && digitalRead(8) == HIGH && right > 0 && digitalRead(13) == HIGH) {

right = right - 5;

delay(250);

}

if (digitalRead(12) == HIGH && digitalRead(13) == HIGH) {

lcd.setCursor(0,0);

lcd.clear();

lcd.write("restore original angle");

right = 90;

left = 90;

lcd.write("restore complete");

delay(250);

}

M_left.write(left);

M_right.write(right);

lcd.clear();

lcd.setCursor(0, 0);

char string_1[25];

itoa(left, string_1, 10);

char name_left[] = "left: ";

char string_2[25];

itoa(right, string_2, 10);

char name_right[] = "right: ";

lcd.write(strcat(name_left, string_1));

lcd.setCursor(0, 1);

lcd.write(strcat(name_right, string_2));

}

这个也很简单,就是从接收模式的pin里面接收高电平和低电平(HIGH和LOW)

以及就是int转str放到显示器上去

最后就是全部的程序了:

#include<Servo.h>

#include<LiquidCrystal.h>

const int rs = 1, en = 2, d4 = 4, d5 = 5, d6 = 6, d7 = 7;

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

Servo M_left;

Servo M_right;

int left = 90;

int right = 90;

void setup() {

lcd.begin(16, 2);

lcd.setCursor(0, 0);

M_left.attach(9);

M_right.attach(10);

lcd.write("loading...");

M_left.write(left);

M_right.write(right);

pinMode(12, INPUT);

pinMode(13, INPUT);

pinMode(8, INPUT);

lcd.clear();

lcd.setCursor(0, 0);

lcd.write("Load complete");

delay(2000);

lcd.clear();

lcd.setCursor(0, 0);

lcd.write("Fursuit Movable Ear System 1.3");

delay(3000);

lcd.clear();

lcd.setCursor(0,0);

lcd.write("by YingXing");

delay(2000);

lcd.setCursor(0,0);

lcd.clear();

lcd.write("Acknowledgement:");

delay(1000);

lcd.clear();

lcd.setCursor(0,0);

lcd.write("All educational websites");

delay(1000);

}

void loop() {

if (digitalRead(12) == HIGH && digitalRead(8) == LOW && left < 90 && digitalRead(13) == LOW) {

left = left + 5;

delay(250);

}

if (digitalRead(12) == LOW && digitalRead(8) == LOW && left > 0 && digitalRead(13) == HIGH) {

left = left - 5;

delay(250);

}

if (digitalRead(12) == HIGH && digitalRead(8) == HIGH && right < 90 && digitalRead(13) == LOW) {

right = right + 5;

delay(250);

}

if (digitalRead(12) == LOW && digitalRead(8) == HIGH && right > 0 && digitalRead(13) == HIGH) {

right = right - 5;

delay(250);

}

if (digitalRead(12) == HIGH && digitalRead(13) == HIGH) {

lcd.setCursor(0,0);

lcd.clear();

lcd.write("restore original angle");

right = 90;

left = 90;

lcd.write("restore complete");

delay(250);

}

M_left.write(left);

M_right.write(right);

lcd.clear();

lcd.setCursor(0, 0);

char string_1[25];

itoa(left, string_1, 10);

char name_left[] = "left: ";

char string_2[25];

itoa(right, string_2, 10);

char name_right[] = "right: ";

lcd.write(strcat(name_left, string_1));

lcd.setCursor(0, 1);

lcd.write(strcat(name_right, string_2));

}

希望你可以学会这些知识,如果还是不会,评论区问我

还有新代码(完整代码)加了鸣谢,仅此而已。

这里是分享文件:

********************************************************

上一章 液晶屏的应用:计时器的制作 arduino学习笔记最新章节