关于抓娃娃机程序算法上的缺陷问题。
int pinFPWM = 3; //定义A电机正转PWM接口,接驱动板的A组FPWM脚int pinBPWM = 4; //定义A电机反转PWM接口,接驱动板的A组BPWM脚
int pinLPWM = 5; //定义B电机正转PWM接口,接驱动板的B组LPWM脚
int pinRPWM = 6; //定义B电机反转PWM接口,接驱动板的B组RPWM脚
int pinDPWM = 7; //定义C电机正转PWM接口,接驱动板的C组UPWM脚
int pinUPWM = 8; //定义C电机反转PWM接口,接驱动板的C组DPWM脚
void setup() {
pinMode(22, INPUT); //将22号数字口设置为输入状态,设置为前进
pinMode(24, INPUT); //将24号数字口设置为输入状态,设置为后退
pinMode(26, INPUT); //将26号数字口设置为输入状态,设置为左
pinMode(28, INPUT); //将28号数字口设置为输入状态,设置为右
pinMode(30, INPUT); //将30号数字口设置为输入状态,设置为上
pinMode(32, INPUT); //将32号数字口设置为输入状态,设置为下
pinMode(34, INPUT); //将34号数字口设置为输入状态,抓娃娃关按钮
pinMode(pinFPWM, OUTPUT); //定义该接口为输出接口
pinMode(pinBPWM, OUTPUT); //定义该接口为输出接口
pinMode(pinLPWM, OUTPUT); //定义该接口为输出接口
pinMode(pinRPWM, OUTPUT); //定义该接口为输出接口
pinMode(pinUPWM, OUTPUT); //定义该接口为输出接口
pinMode(pinDPWM, OUTPUT); //定义该接口为输出接口
pinMode(40, OUTPUT); //爪子
// put your setup code here, to run once:
}
void loop()
{
if (digitalRead(22) == 0)
{
analogWrite(pinFPWM, 255);
analogWrite(pinBPWM, 0);
}
else if (digitalRead(24) == 0)
{
analogWrite(pinFPWM, 0);
analogWrite(pinBPWM, 255);
}
else if (digitalRead(26) == 0)
{
analogWrite(pinLPWM, 255);
analogWrite(pinRPWM, 0);
}
else if (digitalRead(28) == 0)
{
analogWrite(pinLPWM, 0);
analogWrite(pinRPWM, 255);
}
else
{
analogWrite(pinLPWM, 0);
analogWrite(pinRPWM, 0);
analogWrite(pinFPWM, 0);
analogWrite(pinBPWM, 0);
}
if (digitalRead(34) == 0 )
{
analogWrite(pinDPWM, 255);
analogWrite(pinUPWM, 0);
delay(4700);
analogWrite(pinDPWM, 0);
analogWrite(pinUPWM, 255);
analogWrite(40, HIGH);
analogWrite(pinLPWM, 255);
analogWrite(pinRPWM, 0);
analogWrite(pinFPWM,0;
analogWrite(pinBPWM, 255);
delay(6200);
analogWrite(pinDPWM, 0);
analogWrite(pinUPWM, 0);
analogWrite(pinLPWM, 0);
analogWrite(pinRPWM, 0);
analogWrite(pinFPWM,0);
analogWrite(pinBPWM,0);
analogWrite(40, LOW);
}
// put your main code here, to run repeatedly:
}
867407421
这里
delay(4700);
analogWrite(pinDPWM, 0);
analogWrite(pinUPWM, 255);
analogWrite(40, HIGH);
analogWrite(pinLPWM, 255);
analogWrite(pinRPWM, 0);
analogWrite(pinFPWM,0;
analogWrite(pinBPWM, 255);
delay(6200);
analogWrite(pinDPWM, 0);
analogWrite(pinUPWM, 0);
analogWrite(pinLPWM, 0);
analogWrite(pinRPWM, 0);
analogWrite(pinFPWM,0);
analogWrite(pinBPWM,0);
analogWrite(40, LOW);
抓娃娃开关按下爪子下降了4700毫秒后爪子不往上回收,也不能抓娃娃,天车也不能回到起始位置,就停在原处。
请教各位大神有没有什么好的改进方法?
:lol明显感觉代码量有点不够你描述的动作量 请问上面的电机是什么规格的呢? 对你额的机械结构有兴趣 到时我们合作开个店 本帖最后由 darkorigin 于 2017-11-26 11:43 编辑
做个定时器。。。时间中断。。。
时间到了触发中断 然后实施抓取动作
这种代码一般是这么写:
首先几个模块
抓取和复位动作
爪子按指令执行动作
时间中断
检测到投币动作后,开启计时,爪子按摇杆和抓取按钮进行抓取复位
若计时器倒数到0还未抓取则执行抓取动作然后复位
还有就是要有另外一组中断,就是抓取机构的位置超限,一般是用4个超限开关,抓取机构顶住超限开关则触发中断,不再执行此方向动作
另外 ,你这图片方向不对,歪着脖子看好累啊~~~~ darkorigin 发表于 2017-11-26 11:40
做个定时器。。。时间中断。。。
时间到了触发中断 然后实施抓取动作
这种代码一般是这么写:
你好,兄弟。我们是广州生产娃娃机的厂家。刚才看了你对娃娃机程序的讨论,感觉你非常专业。所以想认识一下。 cr7_tomy 发表于 2019-10-21 13:41
你好,兄弟。我们是广州生产娃娃机的厂家。刚才看了你对娃娃机程序的讨论,感觉你非常专业。所以想认识一 ...
感觉娃娃机市面上好多好多啊,应该算是一个成熟的产品了吧?看来还是有可优化的地方:lol 哈哈,17年我搞了几千台 兄弟呀,你这个程序写的我不太好评价,我提几个建议吧!
1、电机的控制不能全部交给用户,要有末端保护机制,避免跑到头卡死。
2、电机的控制不能仅仅有正反,要有一个位置记录参数。
3、变换方向的时候,避免0-255之间直接切换,需要过渡缓冲。
4、millis()和delay()功能,和PWM输出共享相同的内部定时器。
5、analogWrite(40, HIGH)不能这样用吧?
页:
[1]