我们小组一开始找的是一个别人做好的项目,按键控制风扇挡位,不同挡位对应不同LED灯。但是实现过程中存在bug。而且仅仅通过按键控制风扇着实有局限性,因此我觉定用串口控制风扇开关的模式,输入1,风扇变为光敏自动调节,输入2,变为按钮人工控制调节。
我们的思路首先是拆开,把每个功能单独列出来实现,最后再进行合并
我在这里遇到了问题,就是按钮按一下它关闭一会又自动开始转。最后找到了徐大佬,才解决了问题。
猛地关闭风扇,电流会回流,然后把相应的下限变高(我也没听太明白)这个大概就是(buttonValue = analogRead(buttonpin)) > 15而不是大于0的原因。
一开始我用的数字信号,最后用了模拟信号才调出来。。
const int IB = 6;
const int IA = 5;
int buttonpin = A1;
boolean state = false;
void setup() {
Serial.begin(9600);
pinMode(IA, OUTPUT);
pinMode(IB, OUTPUT);
pinMode(buttonpin, INPUT_PULLUP);
}
void loop()
{
int buttonValue = 0;
while ((buttonValue = analogRead(buttonpin)) > 15)
{
Serial.println(buttonValue);
}
Serial.print("a");
if (state == true)
{
analogWrite(IA, 0);
analogWrite(IB, 0);
}
else
{
analogWrite(IA, 105);
analogWrite(IB, 0);
}
state = !state;
delay(600);
}
const int IB=6;
const int IA=5;
void setup(){
Serial.begin(9600);
pinMode(IA,OUTPUT);
pinMode(IB,OUTPUT);
}
void loop(){
if(Serial.available()>0){
char ch=Serial.read();
Serial.println(ch);
if(ch == 'l'){
analogWrite(6,0);
analogWrite(5,0);
//Serial.println("l");
}
else if(ch == 'm'){
analogWrite(6,0);
analogWrite(5,150);
// Serial.println("m");
}
else if(ch =='h'){
analogWrite(6,0);
analogWrite(5,250);
// Serial.println("h");
}
}
}
const int IB=6;
const int IA=5;
void setup(){
Serial.begin(9600);
pinMode(IA,OUTPUT);
pinMode(IB,OUTPUT);
}
void loop(){
int sv=analogRead(A0);
Serial.println(sv);
//光越大sv越小
analogWrite(IB,0);
analogWrite(IA,(600-sv)*0.425 );
}
主要是用了一些条件语句把上面的模块拼到一块,应该能看明白,我就不多说了
const int IB = 6;
const int IA = 5;
int buttonpin = A1;
boolean state = false;
void setup() {
Serial.begin(9600);
pinMode(IA, OUTPUT);
pinMode(IB, OUTPUT);
pinMode(buttonpin, INPUT_PULLUP);
}
void loop() {
if (Serial.available() > 0) {
char ch = Serial.read();
if (ch == '4')
{
Serial.println("你想要智能风扇的哪个功能");
Serial.println("1.按键控制风扇") ;
Serial.println("3.光敏传感器控制风扇");
Serial.println("4.从新选择");
}
else
{
while (1) {
if (ch == '1')
{
int buttonValue = 0;
if (Serial.available() > 0)
{
char bb = Serial.read();
if (bb == '4')
{
analogWrite(IA, 0);
analogWrite(IB, 0);
break;
}
}
else {
while ((buttonValue = analogRead(buttonpin)) > 15)
{
// Serial.println(buttonValue);
}
// Serial.print("a");
if (state == true)
{
analogWrite(IA, 0);
analogWrite(IB, 0);
}
else
{
analogWrite(IA, 105);
analogWrite(IB, 0);
}
state = !state;
delay(600);
}
}
else if (ch == '3')
{
int sv = analogRead(A0);
// Serial.println(sv);
//光越大sv越小
analogWrite(IB, 0);
analogWrite(IA, (600 - sv) * 0.425 );
if (Serial.available() > 0)
{
char ch = Serial.read();
if (ch == '4')
{
analogWrite(IA, 0);
analogWrite(IB, 0);
break;
}
else {
Serial.println("如果想要切换功能请输入4");
}
}
}
}
}
}
}