【发布时间】:2023-01-11 17:37:12
【问题描述】:
我在 Arduino 中使用移位寄存器来增加我的输出引脚。在这里我想单独编辑每个串行位并存储它。简而言之,我想在使用 Arduino I/O 引脚时控制寄存器的每个引脚。我尝试使用以下程序来完成它,但它不起作用。
#include<ShiftOutX.h>
#include<ShiftPinNo.h>
// Define Connections to 74HC595
// ST_CP pin 12
const int latchPin = 10;
// SH_CP pin 11
const int clockPin = 11;
// DS pin 14
const int dataPin = 12;
String S1 = "1";
String S2 = "0";
String S3 = "0";
String S4 = "0";
String S5 = "0";
String S6 = "0";
String S7 = "0";
String S8 = "0";
String S9 = "0";
String S10 = "1";
String S11 = "0";
String S12 = "0";
String S13 = "0";
String S14 = "0";
String S15 = "0";
String S16 = "0";
String S17 = "0";
String S18 = "0";
String S19 = "0";
String S20 = "1";
String S21 = "0";
String S22 = "0";
String S23 = "0";
String S24 = "0";
String S25 = "0";
String SB = "b";
String S = "0";
shiftOutX reg(latchPin, dataPin, clockPin, LSBFIRST, 3);
void setup ()
{
// Setup pins as Outputs
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
Serial.begin(9600);
}
void loop()
{
digitalWrite(latchPin, HIGH);
String one =S+SB+ S1+ S2+ S3+ S4+ S5+ S6+ S7+ S8+ S9+ S10+ S11+ S12+ S13+ S14+ S15+ S16+ S17+ S18+ S19+ S20+ S21+ S22+ S23+ S24+ S25;
Serial.println(one);
char buf[27];
one.toCharArray(buf,one.length());
Serial.println(buf);
shiftOut_24(dataPin, clockPin, LSBFIRST, buf);
digitalWrite(latchPin, LOW);
digitalWrite(latchPin, HIGH);
delay(1000);
}
“0b1000000001000000000100000 0b100000000100000000010000" 我把上面的内容放在串行屏幕上,但是寄存器的输出是不同的。请给我一些解决方案。
【问题讨论】:
-
你为什么要这样定义你的字符串而不是像
S="0b001100100"那样做?另外,1 和 0 不应该是 bitearrays 而不是 char 数组吗? -
对于标准 shiftOut arduino.cc/reference/en/language/functions/advanced-io/shiftout,您不需要字符串或包含文本的字符数组
标签: arduino byte bit shift-register