dbo 发表于 2012-11-18 11:20:07

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

for(int i=0; i < steps; i++){
    int n =digitalRead(8);
    if (n==LOW)
    break;
    n =digitalRead(9);
    if (n==LOW)
    break;
    n =digitalRead(9);
    if (n==LOW)
    break;
    digitalWrite(STEP_PIN, HIGH);
    delayMicroseconds(usDelay);
    digitalWrite(STEP_PIN, LOW);
    delayMicroseconds(usDelay);我需要检测数字端口8,9,10 只要其中一个为LOW 就跳出循环 不执行STEP_PIN的HIGH LOW动作 但是实际情况是STEP_PIN还是会动作 只是他动作的不规律 有时会动作 有时不会

davidce 发表于 2012-11-18 12:20:52

第8行的端口号错了,在每个读取端口值之后加上20的延迟试试

dbo 发表于 2012-11-18 16:42:34

而且加了检测这三个检测代码以后 steps的数值明明有几万 但是他只循环了没几次 去掉检测代码就相安无事了

cool2005tzh 发表于 2012-11-19 21:12:02

我说 break会不会只是退出if啊

zcbzjx 发表于 2012-11-19 22:24:28

if (digitalRead(8) == Low|| digitalRead(9) == LOW || digitalRead(10) == LOW) {
}

一句判断的事情,非要搞那么复杂。。

dbo 发表于 2012-11-21 22:14:26

zcbzjx 发表于 2012-11-19 22:24 static/image/common/back.gif
if (digitalRead(8) == Low|| digitalRead(9) == LOW || digitalRead(10) == LOW) {
}



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

zcbzjx 发表于 2012-11-21 23:43:56

大家提问题最好说下试验环境啊。比如什么设备,ide版本,有没有用什么库,光这个咋个看啊。

我估计是8 9 10 没加上拉电阻的事。

dbo 发表于 2012-11-22 11:07:09

不好意思 我补充一下IDE是1.0.1的 检测的8,9,10口是TB上买的感应式接近开关 没有加上下拉电阻 没有用库

dbo 发表于 2012-11-22 11:08:12

改成中断不知道行不行 重来没用过中断代码 :dizzy:

zcbzjx 发表于 2012-11-22 16:08:28

就是没加上拉电阻的问题,这个必须要上拉电阻的。。

johnsonzzd 发表于 2012-11-22 16:28:41

端口模式设置没有?

dbo 发表于 2012-11-25 13:54:59

端口模式是设置了 INPUT

zcbzjx 发表于 2012-11-25 14:42:07

咋个还没解决,上拉就行了吧。。
页: [1]
查看完整版本: 请高手帮忙看看这段代码问题在哪里