Tôi chỉ đang xem xét một số mã ví dụ và đã bắt gặp một dòng, tôi không hiểu rõ tại sao nó cần được thực hiện. Tôi hiểu rằng bạn đang tham gia vào một giá trị tương tự. Giá trị này nằm trong khoảng từ 0 đến 1024? Tại sao điều này? Tại sao đầu ra cần phải được ánh xạ giữa 0 và 255? Điều gì ra lệnh cho các đối số được sử dụng ở đây? Các dòng trong câu hỏi:Phương thức Arduino map() - tại sao?
// map it to the range of the analog out:
outputValue = map(sensorValue, 0, 1024, 0, 255);
Nổi bật trong các mã:
created 29 Dec. 2008
Modified 4 Sep 2010
by Tom Igoe
This example code is in the public domain.
*/
// These constants won't change. They're used to give names
// to the pins used:
const int analogInPin = A0; // Analog input pin that the potentiometer is attached to
const int analogOutPin = 9; // Analog output pin that the LED is attached to
int sensorValue = 0; // value read from the pot
int outputValue = 0; // value output to the PWM (analog out)
void setup() {
// initialize serial communications at 9600 bps:
Serial.begin(9600);
}
void loop() {
// read the analog in value:
sensorValue = analogRead(analogInPin);
**// map it to the range of the analog out:
outputValue = map(sensorValue, 0, 1024, 0, 255);**
// change the analog out value:
analogWrite(analogOutPin, outputValue);
// print the results to the serial monitor:
Serial.print("sensor = ");
Serial.print(sensorValue);
Serial.print("\t output = ");
Serial.println(outputValue);
// wait 10 milliseconds before the next loop
// for the analog-to-digital converter to settle
// after the last reading:
delay(10);
}
Cảm ơn rất nhiều cho các câu trả lời.
Người ta có thể tranh luận rằng phân chia số nguyên của 4 sẽ thực hiện công việc, nhưng map() cũng hoạt động tốt. – Mchl
Trên tay nắm chặt có thể dịch chuyển số nguyên theo 2. –
Tại sao analogInput được phép là 0-1024 nếu đầu ra phải nằm trong khoảng 0-255? –