行程开关控制马达问题
本帖最后由 ouyangxp 于 2013-7-19 20:17 编辑有如下问题,4个开关控制两个马达,如图所示,要求:
1.初始状态,SW1和SW4是闭合的(就是ML和MR压住开关);
2.ML首先启动(SW1放开),碰到SW2后返回;
3. ML返回后碰到SW1,然后ML停止,MR启动(SW4放开);
4. MR启动后碰到SW5,然后返回;
5. MR压住SW4,此时,MR停止,ML启动;
6. 如此周而复始;
本帖最后由 ouyangxp 于 2013-7-19 20:17 编辑
我自己写了一下程序,但是运行老是出错,
图看得不太明白!!!! 刚好最近在谈另一本新书是有关 电机控制的
如果图能正确标记 运行方向 及开关位置
我想 对於站内 诸多逻辑达人 来说,要回答这个问题,并不是件困难的事
我看懂了,你呢?逻辑达人 当然 这也是新进人员最容易犯的错
以为自已了解的机械动作,别人就一定也知道
新进人员不一定是新手,可能是有几十年老经验的某范围专家。 本帖最后由 ouyangxp 于 2013-7-19 20:45 编辑
学长 发表于 2013-7-19 04:32 static/image/common/back.gif
当然 这也是新进人员最容易犯的错
以为自已了解的机械动作,别人就一定也知道
我是学机械的,对于电子毫无了解,最近才接触Arduino
下面描述一下运动的过程,简单来说就像走路,
一条腿动完后,另一条腿接着动,
学慧放弃 发表于 2013-7-18 20:33 static/image/common/back.gif
图看得不太明白!!!!
我已经上传详细解释图,请参考,谢谢! 麻烦会的人给予支持,谢谢!
:lol:lol:lol:lol:lol:lol:lol:lol ouyangxp 发表于 2013-7-19 11:45 static/image/common/back.gif
我已经上传详细解释图,请参考,谢谢!
谢谢楼主!!!!!!!!! ouyangxp 发表于 2013-7-19 13:38 static/image/common/back.gif
麻烦会的人给予支持,谢谢!
自己琢磨了一下,修改成功,因为只是学了几天C语言,所以,还是很多不懂,麻烦帮忙指正一下,谢谢!
//任务:通过按钮控制电机启停和正反转,通过电位计调节电机转速。
int Switch1=5;//把Switch1(正转)按钮连在数字端口5
int Switch2=6;//把Switch2(反转)按钮连在数字端口6
int Switch3=7;//把Switch3(停止)按钮连在数字端口7
int Switch4=12; //把Switch4(正转)按钮连在数字端口10
int Switch5=11; //把Switch5(反转)按钮连在数字端口11
int potpin = 3; // 把电位计连在模拟端口3
int MotorIN1=3; //数字端口2、3控制电机启停和转向
int MotorIN2=2;
int MotorIN3=4;//数字端口4、8控制电机启停和转向
int MotorIN4=8;
int PWMpinMotorL = 9; // 数字端口9输出PWM信号,控制M1电机转速
int PWMpinMotorR = 10; // 数字端口10输出PWM信号,控制M2电机转速
int ML=0; //定义左右马达切换的判断
int MR=0;
//初始化
void setup() {
Serial.begin(9600);
pinMode(Switch1,INPUT);//把数字端口5、6、7设置输入模式
pinMode(Switch2,INPUT);
pinMode(Switch3,INPUT);
pinMode(Switch4,INPUT);
pinMode(Switch5,INPUT);
pinMode(MotorIN1,OUTPUT);//把数字端口2、3设置输入模式
pinMode(MotorIN2,OUTPUT);
pinMode(MotorIN3,OUTPUT);
pinMode(MotorIN4,OUTPUT);
}
//主程序
void loop() {
//读取输入Pin脚信号
int SW1=digitalRead(Switch1);
int SW2=digitalRead(Switch2);
int SW3=digitalRead(Switch3);
int SW4=digitalRead(Switch4);
int SW5=digitalRead(Switch5);
//如果按下Switch3(总开关)按钮
if(SW3==LOW) {
//起始状态1
if(SW1==LOW && SW4==LOW && ML==0 && MR==0) {
//电机ML(正转) Start
digitalWrite(MotorIN1,LOW);
digitalWrite(MotorIN2,HIGH);
//电机MR Stop
digitalWrite(MotorIN3,LOW);
digitalWrite(MotorIN4,LOW);
}
//状态3: ML运行到Switch2处,按下Switch2(ML反转)按钮
if(SW2==LOW) {
//ML电机反转
digitalWrite(MotorIN1,HIGH);
digitalWrite(MotorIN2,LOW);
ML+=1;
MR=0;//MR数据清零
Serial.print(ML);
}
//状态4: ML返回到Swintch1处,此时switch1作为切换按钮,停止ML,启动MR
if(SW1==LOW && SW4==LOW && ML!=0 && MR==0) {
//电机ML Stop
digitalWrite(MotorIN1,LOW);
digitalWrite(MotorIN2,LOW);
//电机MR (正转) Start
digitalWrite(MotorIN3,LOW);
digitalWrite(MotorIN4,HIGH);
}
//状态6: MR运行到Switch5处,按下Switch5(MR反转)按钮
if(SW5==LOW) {
//ML电机反转
digitalWrite(MotorIN3,HIGH);
digitalWrite(MotorIN4,LOW);
MR+=1;
ML=0; //ML数据清零
Serial.print(MR);
}
//状态7: MR返回到Swintch4处,此时switch4作为切换按钮,停止MR,启动ML
if(SW1==LOW && SW4==LOW && ML==0 && MR!=0) {
//电机MR Stop
digitalWrite(MotorIN3,LOW);
digitalWrite(MotorIN4,LOW);
//电机ML (正转) Start
digitalWrite(MotorIN1,LOW);
digitalWrite(MotorIN2,HIGH);
}
/*
int sensorValue = analogRead(potpin); //读取电位计采样值
sensorValue = sensorValue/4; // 采样值 0-1024 转换为 0-255
*/
int sensorValue = 50;
analogWrite(PWMpinMotorL, sensorValue);//把处理后的转换值以PWM信号形式输出
analogWrite(PWMpinMotorR, sensorValue);//把处理后的转换值以PWM信号形式输出
delay(20);//延时
}
//如果按下Switch3(停止)按钮
else{
//电机停止
digitalWrite(MotorIN1,LOW);
digitalWrite(MotorIN2,LOW);
digitalWrite(MotorIN3,LOW);
digitalWrite(MotorIN4,LOW);
}
}
页:
[1]