1

我正在做一个需要 9 个 7 段显示器的项目。我为此使用了 9 个移位寄存器。

我用 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 具有更高的时钟频率。所以我尝试添加延迟。但它没有用。

4

2 回答 2

0

错误可能是因为:

  1. 复制代码时有错误。
  2. 或者你没有正确粘贴。
  3. 某些编辑也可能导致相同的效果。
  4. 这可能是因为硬件问题,接触松动等。

(如果可能,您应该避免使用延迟,因为开发人员说使用它们会产生开销,我认为您应该注意它)。

于 2017-08-26T18:14:06.913 回答
0

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

于 2017-12-11T13:43:28.767 回答