群里看到有人上传了个文件。。。。
然后我就分享了。。。。。大家可以看看原作者鬼斧神工的画图
以下是正文
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
今天花了几个小时仿照书籍编写了一个程序,程序的功能是控制电机正反转 和速度,用到的电子元器件 在电路图上看
电路图是我根据用的硬件来画的,我实际用的是下面这个
在来看看代码吧,代码如下。
#define switchPin 2 //控制开关1 (引脚2) #define switchPin2 3 //控制开关2 (引脚3) #define motorPin1 5 //电机正转 (引脚 PWM5) #define motorPin2 6 //电机反转 (引脚 PWM6) #define ledPin 7 //报警灯 (引脚7) #define potPin 0 //电位器 (模拟引脚0) int pinValue; //存储电位器的值 /************** setup函数 只执行一次 *****************/ void setup() { pinMode(switchPin,INPUT); //开关1输入模式 pinMode(switchPin2,INPUT); //开关2输入模式 pinMode(motorPin1,OUTPUT); //电机正转输出模式 pinMode(motorPin2,OUTPUT); //电机反转输出模式 pinMode(ledPin,OUTPUT); // 报警LED输出模式 } /************** loop函数 反复循环执行 *************/ void loop() { pinValue = analogRead(potPin); //获取引脚的模拟量值,将其保存在pinValue中 pinValue = map(pinValue,0,1023,0,255); //将pinValue的值除以4以对应到0至255的范围内 /************** 下面的if控制电机正转 ************/ if (digitalRead(switchPin)) //如果开关1按下 { analogWrite(motorPin1,pinValue); //电机正转(电压器调节速度) } else //如果开关松开 { analogWrite(motorPin1,LOW); //电机停止 } /************** 下面的if控制电机反转 *****************/ if (digitalRead(switchPin2)) { analogWrite(motorPin2,pinValue); } else { analogWrite(motorPin2,LOW); } /************* 下面的if控制报警灯 ************/ if(digitalRead(switchPin) && digitalRead(switchPin2)) //如果两个开关按钮同时按下 { analogWrite(motorPin1,LOW); analogWrite(motorPin2,LOW); analogWrite(potPin,LOW); digitalWrite(ledPin,HIGH); } else { digitalWrite(ledPin,LOW); } }
到这里就结束了,我不做太多的解释,大家都能看清楚。
这个程序还有一个不足之处就后面的代码。
/************* 下面的if控制报警灯 ************/ if(digitalRead(switchPin) && digitalRead(switchPin2)) //如果两个开关按钮同时按下 { analogWrite(motorPin1,LOW); //关闭正转 analogWrite(motorPin2,LOW); //关闭反转 analogWrite(potPin,LOW); //关闭电位器控制 digitalWrite(ledPin,HIGH); 开报警灯 } else { digitalWrite(ledPin,LOW); 、、关闭报警灯 }
问题就是:当同时按下两个按钮时 电机正反转引脚不能完全关闭,还有小电流,不知如何解决。
所以我就把这个程序共享出来给大家 供大家学习和参考。如果你能解决问题或比我编写的更好,别忘了也共享出来让大家也学习一下,取长补短,这样你的学习就有提高,学习的更快,更熟练。谢谢