#include"LedControl.h" LedControl lc=LedControl(11,9,10,1); byte d[8]{ B10000001, B01000010, B00100100, B00011000, B00011000, B00011000, B00011000, B00011000, }; byte a[8]{ B10000001, B11000001, B10100001, B10010001, B10001001, B10000101, B10000011, B10000001, }; String rkey="wq01"; String key; int led=8; int l=0; void setup() { // put your setup code here, to run once: digitalWrite(led,LOW); SerialUSB.begin(9600); pinMode(led,OUTPUT); lc.shutdown(0,false); lc.setIntensity(0,3); lc.clearDisplay(0); while(SerialUSB.read()>=0) {} } void loop() { // put your main code here, to run repeatedly: int i,j,k,c; if(SerialUSB.available()>0) { key=SerialUSB.readString(); if(key.compareTo(rkey)==0) { SerialUSB.println("This is right"); digitalWrite(led,HIGH); delay(2500); for (j=0;j<8;j++) lc.setRow(0,j,d[j]); } else { SerialUSB.println("This is false"); digitalWrite(led,HIGH); delay(500); digitalWrite(led,LOW); delay(500); l++; } if(l==3) { for (k=0;k<8;k++) lc.setRow(0,k,a[k]); do{ digitalWrite(led,HIGH); delay(500); digitalWrite(led,LOW); delay(500); }while(1); } } delay(1000); digitalWrite(led,LOW); lc.clearDisplay(0); } 输入正确的密码也会判断为错误
时间: 2024-01-14 18:04:26 浏览: 22
代码中读取串口数据的方式是使用 `SerialUSB.readString()`,这会读取整个串口缓冲区中的数据并返回一个字符串。但是,读取字符串时也会读取到换行符 `\n` 或者回车符 `\r`,这可能会导致密码判断出现问题。
建议在读取密码时,使用 `SerialUSB.read()` 逐个读取串口数据,并判断每个字符是否与密码字符串中的对应位置相等。同时,在比较密码字符串时,可以使用 `strcmp()` 函数来进行比较,该函数可以忽略字符串中的空格、换行符等字符,只比较实际的字符串内容。
另外,可以增加一些调试信息来帮助排查问题,比如在读取密码时,可以使用 `SerialUSB.write()` 函数将读取到的字符输出到串口,以便查看实际读取到的数据。
相关问题
int A = 12; int B = 11; int C= 10; int D = 9; int E = 8; int time=10000; int switch1=6; int switch2=5; LedControl lc=LedControl(12,11,13,1); byte N0[8]={0x00,0x3C,0x24,0x24,0x24,0x24,0x3C,0x00}, N1[8]
这段代码定义了一些变量和数组,并初始化了一个LedControl对象。具体解释如下:
- int A = 12; int B = 11; int C=10; int D = 9; int E = 8;:定义了5个整型变量A、B、C、D、E,分别初始化为12、11、10、9、8。
- int time=10000; int switch1=6; int switch2=5;:定义了2个整型变量time、switch1、switch2,分别初始化为10000、6、5。
- LedControl lc=LedControl(12,11,13,1);:定义了一个LedControl对象lc,并初始化为(12,11,13,1)。这里的(12,11,13,1)是LedControl类的构造函数的参数,分别为DIN、CLK、CS和控制的模块数量。
- byte N0[8]={0x00,0x3C,0x24,0x24,0x24,0x24,0x3C,0x00}, N1[8]:定义了两个长度为8的字节数组N0、N1,并初始化为{0x00,0x3C,0x24,0x24,0x24,0x24,0x3C,0x00}和一个未初始化的数组N1。这里的0x00、0x3C、0x24是16进制数,表示二进制数00000000、00111100、00100100。
8x8led点阵屏心形动态显示代码
以下是一个使用Arduino控制8x8 LED点阵屏心形动态显示的代码示例:
```
#include <LedControl.h>
LedControl lc = LedControl(12, 11, 10, 1);
byte heart = {
B00000000,
B01100110,
B11111111,
B11111111,
B01111110,
B00111100,
B00011000,
B00000000
};
void setup() {
lc.shutdown(0, false);
lc.setIntensity(0, 8);
lc.clearDisplay(0);
}
void loop() {
for (int i = 0; i < 8; i++) {
lc.setRow(0, i, heart[i]);
delay(50);
}
for (int i = 7; i >= 0; i--) {
lc.setRow(0, i, heart[i]);
delay(50);
}
}
```
该代码使用LedControl库控制LED点阵屏,将一个心形图案分解为8行,每行一个字节,使用循环将每行逐个显示出来。然后再反向循环将其逐个消失,从而达到动态显示的效果。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)