这已经让我的大脑煮了几个小时。我只是不知道自己做错了什么。输入" if(seperate == ..)"时,代码似乎是错误的。环。所以我想从串口读取,将值应用到第一个寄存器,然后读取并应用到第二个寄存器,然后读取并应用到第三个寄存器,最后“#34; reset"柜台(并重新开始)。
#define data_r 2 //data input red register
#define data_g 3 //data input green register
#define data_b 4 //data input blue register
#define clock_r 6 //clock input red register
#define clock_g 7 //clock input green register
#define clock_b 8 //clock input blue register
#define clock 9 //clock pin for all three registers
#define reset 5
int seperate;
int val;
void setup() {
// put your setup code here, to run once:
pinMode(clock, OUTPUT);
pinMode(clock_r, OUTPUT);
pinMode(clock_g, OUTPUT);
pinMode(clock_b, OUTPUT);
pinMode(data_r , OUTPUT);
pinMode(data_g , OUTPUT);
pinMode(data_b , OUTPUT);
pinMode(reset, OUTPUT);
digitalWrite(reset, LOW);
delay(50);
digitalWrite(reset, HIGH);
Serial.begin(9600);
while (!Serial);
Serial.setTimeout(10);
}
void loop() {
// put your main code here, to run repeatedly:
if (Serial.available()) {
int seperate_mod = seperate % 3;
Serial.print("seperate_mod = ");
Serial.println(seperate_mod);
if (seperate_mod == 0) {
val = Serial.parseInt();
shiftOut(data_r, clock_r, MSBFIRST, val);
} else if (seperate_mod == 1) {
val = Serial.parseInt();
shiftOut(data_g, clock_g, MSBFIRST, val);
} else if (seperate_mod == 2) {
val = Serial.parseInt();
shiftOut(data_b, clock_b, MSBFIRST, val);
}
seperate += 1;
}
}
但更奇怪的是,这个代码确实有用,它只使用一个寄存器:
#define data 2
#define clock 6
#define reset 5
void setup()
{
pinMode(clock, OUTPUT); // make the clock pin an output
pinMode(data , OUTPUT); // make the data pin an output
pinMode(reset, OUTPUT);
randomSeed(analogRead(0));
digitalWrite(reset, LOW);
delay(1500);
digitalWrite(reset, HIGH);
Serial.begin(9600);
Serial.setTimeout(10);
while(!Serial);
}
void loop() {
if (Serial.available()) {
int val = Serial.parseInt();
if (val > 255) {
Serial.println("ERR: Value out of range");
} else {
shiftOut(data, clock, LSBFIRST, val);
}
}
}
有人能告诉我,我做错了吗?
到zmo:
5
5
5
5
5
>ENTERED A NUMBER<
0 ; seperate_mod = 0
1
4 ; END of conditional
5
5
5
5
5
5
5
5
5
5
5
5
5
5
>ENTERED A NUMBER<
0 ; seperate_mod = 1
2
4 ; END of conditional
5
5
5
5
5
5
>ENTERED A NUMBER<
0 ; seperate_mod = 2
3
4 ; END of conditional
5
5
5
5
5
5
5
答案 0 :(得分:0)
有人能告诉我,我做错了吗?
乍一看,您的代码看起来很不错,因此在代码的上下文中可能会出现其他不正确的内容。
当你写的东西没有按照你期望的方式工作时,怀疑自己是一个明智的事情 - 假设PEBCAK通常是第一个最好的答案。但是,通过代码运行,在此过程中显示价值将向您证明您是在做对还是错,如果它错在哪里。
然后,我觉得你的代码实际上并没有运行,因为Serial
初始化在setup()
中永远阻止,或者因为Serial.available()
永远不是真的由于其他一些原因。
您可以尝试添加其他调试打印语句:
void loop() {
// put your main code here, to run repeatedly:
if (Serial.available()) {
int seperate_mod = seperate % 3;
Serial.print("0 ; seperate_mod = ");
Serial.println(seperate_mod);
if (seperate_mod == 0) {
Serial.println("1");
val = Serial.parseInt();
shiftOut(data_r, clock_r, MSBFIRST, val);
} else if (seperate_mod == 1) {
Serial.println("2");
val = Serial.parseInt();
shiftOut(data_g, clock_g, MSBFIRST, val);
} else if (seperate_mod == 2) {
Serial.println("3");
val = Serial.parseInt();
shiftOut(data_b, clock_b, MSBFIRST, val);
}
seperate += 1;
Serial.println("4 ; END of conditional");
}
Serial.println("5");
}
并使用生成的输出更新您的问题?