تا حالا فقط ورودیهای دیجیتال (روشن/خاموش) خواندیم. اما خیلی از حسگرها مقدارهای «بینابینی» دارند؛ مثلاً یک پتانسیومتر که میچرخد یا یک حسگر نور (LDR) که شدت روشنایی را اندازه میگیرد. برای این کارها از تابع analogRead استفاده میکنیم.
تابع analogRead یک عدد بین ۰ تا ۱۰۲۳ برمیگرداند. عدد ۰ یعنی ولتاژ صفر و عدد ۱۰۲۳ یعنی بیشترین ولتاژ (۵ ولت). پایههای آنالوگ آردوینو با حرف A شروع میشوند، مثل A0.
int value = analogRead(A0);
میخواهیم با چرخاندن پتانسیومتر، روشنایی یک LED را کم و زیاد کنیم. اما analogWrite فقط مقدار ۰ تا ۲۵۵ را قبول میکند، در حالی که حسگر ما ۰ تا ۱۰۲۳ میدهد. تابع map این بازه را برای ما تبدیل میکند.
int sensorPin = A0;
int ledPin = 9;
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
}
void loop() {
int value = analogRead(sensorPin);
int brightness = map(value, 0, 1023, 0, 255);
analogWrite(ledPin, brightness);
Serial.println(value);
delay(50);
}
ابتدا با analogRead مقدار حسگر را میخوانیم. سپس map(value, 0, 1023, 0, 255) این عدد را از بازه ۰ تا ۱۰۲۳ به بازه ۰ تا ۲۵۵ تبدیل میکند. حالا با analogWrite(ledPin, brightness) روشنایی LED را تنظیم میکنیم؛ هرچه پتانسیومتر را بیشتر بچرخانی، LED پرنورتر میشود.
analogWrite حتماً از پایههایی استفاده کن که علامت ~ دارند (مثل ۳، ۵، ۶، ۹، ۱۰، ۱۱)؛ فقط این پایهها قابلیت کنترل روشنایی دارند.این کد را همین حالا در حالت کدنویسی شبیهساز روبومیکر بنویس و اجرا کن.
🔌 همین حالا توی شبیهساز آنلاین روبومیکر امتحان کن — رایگان و بدون نصب