相信在这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));
}
希望你可以学会这些知识,如果还是不会,评论区问我
还有新代码(完整代码)加了鸣谢,仅此而已。
这里是分享文件:
********************************************************