|
楼主 |
发表于 2013-7-19 17:31:57
|
显示全部楼层
ouyangxp 发表于 2013-7-19 13:38
麻烦会的人给予支持,谢谢!
自己琢磨了一下,修改成功,因为只是学了几天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);
}
}
|
|