极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12003|回复: 12

请高手帮忙看看这段代码问题在哪里

[复制链接]
发表于 2012-11-18 11:20:07 | 显示全部楼层 |阅读模式
  1.   for(int i=0; i < steps; i++){
  2.     int n =digitalRead(8);
  3.     if (n==LOW)
  4.     break;
  5.     n =digitalRead(9);
  6.     if (n==LOW)
  7.     break;
  8.     n =digitalRead(9);
  9.     if (n==LOW)
  10.     break;
  11.     digitalWrite(STEP_PIN, HIGH);
  12.     delayMicroseconds(usDelay);
  13.     digitalWrite(STEP_PIN, LOW);
  14.     delayMicroseconds(usDelay);
复制代码
我需要检测数字端口8,9,10 只要其中一个为LOW 就跳出循环 不执行STEP_PIN的HIGH LOW动作 但是实际情况是STEP_PIN还是会动作 只是他动作的不规律 有时会动作 有时不会
回复

使用道具 举报

发表于 2012-11-18 12:20:52 | 显示全部楼层
第8行的端口号错了,在每个读取端口值之后加上20的延迟试试
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-11-18 16:42:34 | 显示全部楼层
而且加了检测这三个检测代码以后 steps的数值明明有几万 但是他只循环了没几次 去掉检测代码就相安无事了
回复 支持 反对

使用道具 举报

发表于 2012-11-19 21:12:02 | 显示全部楼层
我说 break会不会只是退出if啊
回复 支持 反对

使用道具 举报

发表于 2012-11-19 22:24:28 | 显示全部楼层
if (digitalRead(8) == Low  || digitalRead(9) == LOW || digitalRead(10) == LOW) {
}

一句判断的事情,非要搞那么复杂。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-11-21 22:14:26 | 显示全部楼层
zcbzjx 发表于 2012-11-19 22:24
if (digitalRead(8) == Low  || digitalRead(9) == LOW || digitalRead(10) == LOW) {
}

这段代码受教了,但是加了检测以后会丢步咋回事
回复 支持 反对

使用道具 举报

发表于 2012-11-21 23:43:56 | 显示全部楼层
大家提问题最好说下试验环境啊。比如什么设备,ide版本,有没有用什么库,光这个咋个看啊。

我估计是8 9 10 没加上拉电阻的事。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-11-22 11:07:09 | 显示全部楼层
不好意思 我补充一下IDE是1.0.1的 检测的8,9,10口是TB上买的感应式接近开关 没有加上下拉电阻 没有用库
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-11-22 11:08:12 | 显示全部楼层
改成中断不知道行不行 重来没用过中断代码
回复 支持 反对

使用道具 举报

发表于 2012-11-22 16:08:28 | 显示全部楼层
就是没加上拉电阻的问题,这个必须要上拉电阻的。。
回复 支持 反对

使用道具 举报

发表于 2012-11-22 16:28:41 | 显示全部楼层
端口模式设置没有?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-11-25 13:54:59 | 显示全部楼层
端口模式是设置了 INPUT
回复 支持 反对

使用道具 举报

发表于 2012-11-25 14:42:07 | 显示全部楼层
咋个还没解决,上拉就行了吧。。
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-5 09:37 , Processed in 0.042858 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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