理解用操纵杆控制8x8点阵的代码背后的逻辑[关闭] 。

问题描述 投票:0回答:1

我在网上找到了这段用Arduino控制max7219 8x8矩阵的代码,我很难理解这段代码的一些内容。下面是整个代码。

#include <LedControl.h>

int UD = 0;
int LR = 0; //Setting up controller//
LedControl lc=LedControl(8,10,9,1); //10 is to CLOCK, 9 = CS, 8=DIN//

void setup() {
 Serial.begin(9600);
 lc.shutdown(0,false); // turn off power saving, enables display
 lc.setIntensity(0,1); // sets brightness (0~15 possible values)
 lc.clearDisplay(0); // clear screen
}

void loop() {
 UD = analogRead(A0);
 LR = analogRead(A1);
 char x_translate = map(LR, 1021, 0, 7, 0); //map(value, fromLow, fromHigh, toLow, toHigh)
 char y_translate = map(UD, 1021, 0, 0, 7);

 Serial.print("UD = ");
 Serial.print(UD, DEC);
 Serial.print(", LR = ");
 Serial.print(LR, DEC);
 Serial.print(", x = ");
 Serial.print(x_translate, DEC);
 Serial.print(", y = ");
 Serial.println(y_translate, DEC);
 // not in shutdown mode
 lc.clearDisplay(0);
 lc.setLed(0,x_translate,y_translate,true);
 delay(150); //adjust delay to get your joystick correct//
}

我的第一个问题是... Serial.begin(9600) 的意思。

我最大的问题是关于将操纵杆的模拟输入转化为点亮矩阵上的LED。

char x_translate = map(LR, 1021, 0, 7, 0); //map(value, fromLow, fromHigh, toLow, toHigh)
char y_translate = map(UD, 1021, 0, 0, 7);

1021是从哪里来的,为什么是fromLow值,而它似乎是任何范围的最大值?还有,7是从哪里来的,为什么它们会出现在现在的位置?

最后,所有的那些 "小数点 "到底是怎么回事?Serial.print() 语句?什么是Serial,什么是DEC?

正如你所知道的,我对C++很陌生,所以任何帮助都会很感激,谢谢。

arduino led joystick arduino-c++
1个回答
0
投票

来自Arduino手册。

串行开始(波特)

设置串行数据传输的数据速率,单位为每秒位数(baud)。

所以在你的情况下,它是9600 波特.

串行.print()

将数据打印为人可读的ASCII文本到串口。第二个可选参数指定使用的基数(格式);允许的值是BIN(二进制,或基数2),OCT(八进制,或基数8),DEC(十进制,或基数10),HEX(十六进制,或基数16)。对于浮点数,这个参数指定了使用的小数位数。例如

Serial.print(78, BIN)给出 "1001110"

Serial.print(78, OCT)给出 "116"

Serial.print(78, DEC)给出 "78"

Serial.print(78, HEX)给出 "4E"

Serial.print(1.23456, 0)给出 "1"

Serial.print(1.23456, 2)给出 "1.23"

Serial.print(1.23456, 4)给出 "1.2345"

map(value, fromLow, fromHigh, toLow, toHigh)

将一个数字从一个范围重新映射到另一个范围。也就是说,一个从低到高的数值会被映射到低,一个从高到高的数值会被映射到高,中间的数值会被映射到中间的数值,等等。

数值fromLow:值的当前范围的下限。

从高:当前值的下限。表示当前范围的上界。

toLow: 值的目标范围的下限。

至高值的目标范围的上界。

编写该代码的人选择了1021这个值,因为他想把范围[1021-0]映射到[7-0],很可能是因为最大的操纵杆伸长量产生了模拟值1021。

© www.soinside.com 2019 - 2024. All rights reserved.