极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5338|回复: 10

关于抓娃娃机程序算法上的缺陷问题。

[复制链接]
发表于 2017-11-18 23:24:49 | 显示全部楼层 |阅读模式
[kenrobot_code]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:
}[/kenrobot_code]



这里
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毫秒后爪子不往上回收,也不能抓娃娃,天车也不能回到起始位置,就停在原处。
请教各位大神有没有什么好的改进方法?
QQ图片20171118231351.jpg
QQ图片20171118231355.jpg
回复

使用道具 举报

发表于 2017-11-20 09:49:08 | 显示全部楼层
明显感觉代码量有点不够你描述的动作量
回复 支持 反对

使用道具 举报

发表于 2017-11-21 10:12:33 | 显示全部楼层
请问上面的电机是什么规格的呢?
回复 支持 反对

使用道具 举报

发表于 2017-11-24 15:41:58 | 显示全部楼层
对你额的机械结构有兴趣
回复 支持 反对

使用道具 举报

发表于 2017-11-25 15:08:47 | 显示全部楼层
到时我们合作开个店
回复 支持 反对

使用道具 举报

发表于 2017-11-26 11:40:51 | 显示全部楼层
本帖最后由 darkorigin 于 2017-11-26 11:43 编辑

做个定时器。。。时间中断。。。
时间到了触发中断 然后实施抓取动作
这种代码一般是这么写:
首先几个模块
抓取和复位动作
爪子按指令执行动作
时间中断
检测到投币动作后,开启计时,爪子按摇杆和抓取按钮进行抓取复位
若计时器倒数到0还未抓取则执行抓取动作然后复位

还有就是要有另外一组中断,就是抓取机构的位置超限,一般是用4个超限开关,抓取机构顶住超限开关则触发中断,不再执行此方向动作


另外 ,你这图片方向不对,歪着脖子看好累啊~~~~
回复 支持 反对

使用道具 举报

发表于 2019-10-21 13:41:40 | 显示全部楼层
darkorigin 发表于 2017-11-26 11:40
做个定时器。。。时间中断。。。
时间到了触发中断 然后实施抓取动作
这种代码一般是这么写:

你好,兄弟。我们是广州生产娃娃机的厂家。刚才看了你对娃娃机程序的讨论,感觉你非常专业。所以想认识一下。
回复 支持 反对

使用道具 举报

发表于 2019-10-23 14:00:49 | 显示全部楼层
cr7_tomy 发表于 2019-10-21 13:41
你好,兄弟。我们是广州生产娃娃机的厂家。刚才看了你对娃娃机程序的讨论,感觉你非常专业。所以想认识一 ...

感觉娃娃机市面上好多好多啊,应该算是一个成熟的产品了吧?看来还是有可优化的地方  
回复 支持 反对

使用道具 举报

发表于 5 天前 | 显示全部楼层
哈哈,17年我搞了几千台
回复 支持 反对

使用道具 举报

发表于 8 小时前 | 显示全部楼层
兄弟呀,你这个程序写的我不太好评价,我提几个建议吧!
1、电机的控制不能全部交给用户,要有末端保护机制,避免跑到头卡死。
2、电机的控制不能仅仅有正反,要有一个位置记录参数。
3、变换方向的时候,避免0-255之间直接切换,需要过渡缓冲。
4、millis()和delay()功能,和PWM输出共享相同的内部定时器。
5、analogWrite(40, HIGH)不能这样用吧?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2019-11-20 18:25 , Processed in 0.050809 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表