我在网上找到了这段用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手册。
设置串行数据传输的数据速率,单位为每秒位数(baud)。
所以在你的情况下,它是9600 波特.
将数据打印为人可读的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。