我用的arduino mage 2560开发板,步进电机是kamoer kk2000,负压气泵是HLVP3,串口屏用的淘晶驰7寸电容串口屏。串口屏开发环境是USART HMI。编程环境是Arduino IDE1.8.19。
1.点击串口屏按钮1,步进电机旋转,不同按钮对应不同旋转速度。
2.点击串口屏按钮2,负压气泵工作,不同按钮对应不同吸气力度。
串口屏页面大概是下图样子。
loop函数
void loop() {
if (Serial.available() >0) //如果串口屏接收到字符
{
receive_data();//接收数据函数
test_date();//检验函数
do_command();//执行函数
qingchu();//初始化数据
delay(50);
}
}
接收数据函数
void receive_data()
{
int j=0;
while(Serial.available()>0)
{
zifu+=char(Serial.read());
Serial.println(zifu);
delay(100);
mark=1;
}
if (mark==1)
{
for(int i=0;i<zifu.length();i++)
{
if(zifu[i]==',')
{
j++;
}
else
{
comdata[j]=comdata[j]*10+(zifu[i]-'0');
}
}
zifu=String("");
mark=0;
}
}
检验函数
void test_date()
{
//步进电机输出
if(comdata[0]==55)
{
if(comdata[1]==02) //步进电机的速度20,输出52
{
bujin=2;
}
if(comdata[1]==03)//步进电机的速度30,输出53
{
bujin=3;
}
if(comdata[1]==50)//如果55,50,步进电机停止,stop输出2
{
stop_mark=2;
}
}
//负压气泵输出
if(comdata[0]==54)
{
if(comdata[1]==01) //如果低速,输出2
{
go_mark=2;
}
if(comdata[1]==02)//中速
{
go_mark=3;
}
if(comdata[1]==10)//停止
{
go_mark=6;
}
}
}
执行函数
void do_command()
{
// 负压气泵执行,PWM
if(go_mark==2)
{
analogWrite(HLVP3PIN,43);//低速500ml/min
}
if(go_mark==3)
{
analogWrite(HLVP3PIN,128);//中速1500ml/min
}
if(go_mark==6)
{
analogWrite(HLVP3PIN,0);//停止
}
delay(100);
//步进电机执行,脉冲
if(bujin==2)
{
digitalWrite(DIRPIN1, LOW);//方向3
digitalWrite(STEPPIN1, HIGH);//脉冲2
tone(STEPPIN1,50);//可以通过更改脉冲频率改变速度
}
if(bujin==3)
{
digitalWrite(DIRPIN1, LOW);//方向
digitalWrite(STEPPIN1, HIGH);//脉冲
tone(STEPPIN1,100);//可以通过更改脉冲频率改变速度
}
if(bujin==4)
{
digitalWrite(DIRPIN1, LOW);//方向
digitalWrite(STEPPIN1, HIGH);//脉冲
tone(STEPPIN1,200);//可以通过更改脉冲频率改变速度
}
if(stop_mark==2)
{
digitalWrite(STEPPIN1, LOW);
noTone(STEPPIN1);
}
}
清除函数
void qingchu() //清除数据
{
for(int i=0;i<=2;i++)
{
comdata[i]=0;
}
go_mark=0;
mark=0;
Serial.flush();
}
问题:屏幕单独控制步进电机或者负压气泵没有问题,一旦同时控制,负压气泵可以正常运行,步进电机第一次开始停止可以,后面再让他开始就没反应。