2017-08-26 99 views
1

我正在一个项目中,我需要9个7段显示器。我为此使用了9个移位寄存器。无法更新与NodeMCU的移位寄存器

我用Arduino Nano测试了移位寄存器,并且一切正常。然后,我复制/编辑了代码,用于NodeMCU(ESP8266 wifi板),出于某种原因,写入移位寄存器的功能似乎被破坏。

这是现在的代码:

void writeBytes(uint8_t bytesToWrite[]){ 
    Serial.println("test!!!"); 
    //Run through the 9 bytes in bytes to write. 
    for(int q = 0; q < 9; q++) { 
    //Loop through the 8 bits. 
    for(int i =0; i < 8; i++) { 
     //Check if the msb = 1 
     if(0x80 & bytesToWrite[q]) { 
     digitalWrite(dataPin, HIGH); 
     delay(delayTime); 
     digitalWrite(clockPin, HIGH); 
     delay(delayTime); 
     digitalWrite(clockPin, LOW); 
     delay(delayTime); 
     digitalWrite(dataPin, LOW); 
     delay(delayTime); 
     } else { 
     digitalWrite(clockPin, HIGH); 
     delay(delayTime); 
     digitalWrite(clockPin, LOW); 
     delay(delayTime); 
     } 
     //Shift all the bits one up. 
     bytesToWrite[q] = bytesToWrite[q] << 1; 
    } 
    } 
    //Turn on the out pin, so it will output. 
    digitalWrite(outPin, HIGH); 
    delay(delayTime);; 
    digitalWrite(outPin, LOW); 
    delay(delayTime); 
} 

如果我用正确的引脚和检查,如果如果这些引脚实际上变成我已经确认。我也检查了函数是否会被执行,并且会传递正确的变量,并且它会被执行。

这个功能同样适用于Arduino Nano。但它不适用于NodeMCU。 NodeMCU具有更高的时钟频率。所以我试图加入延迟。但它没有奏效。

+0

当您运行代码时,您在节点mcu上收到的输出是什么? – Billa

+0

只是:测试!!!!!该程序编译并运行良好。 – oedze

+0

接受和upvote答案,如果你认为它应该有一个在将来有类似的疑问 – Billa

回答

0

NodeMCU上的引脚号与数据表中的引脚号不匹配。 正确的引脚编号可以在这里找到: https://github.com/esp8266/Arduino/issues/584

+0

请编辑你的答案,这听起来像一个正确的答案。如果它解决了最初的问题,也将其标记为答案。 –

0

错误可能是因为:

  1. 要么有一个错误,当你复制的代码。
  2. 或者您没有正确粘贴。
  3. 某些编辑也可能导致相同的效果。
  4. 这可能是因为与硬件,接触不良等故障

(你应该避免使用延迟如果可能的,因为开发商使用它们会给开销说,我觉得你应该好好照顾它)。

+0

谢谢你的反应。 1和2:我比较了每一行,它们是相同的。但是,如果是这样的话,我应该能够将代码复制回来。它应该在arduino上工作。 3:我没有做任何修改。 4:不,情况并非如此,硬件在将它连接到arduino nano时正常工作。 – oedze

+0

可能是接口问题,通常在gsm模块中可以看到,特别是当我们使用低成本硬件时。 – Billa