บทเรียน 14/31-5: ตัวอย่างการเขียนโค้ด Arduino map() 2
บทช่วยสอนนี้สาธิตวิธีการใช้ฟังก์ชัน map() ของ Arduino เพื่อควบคุมความสว่างของ LED โดยใช้ค่าเปอร์เซ็นต์ (0–100%) แทนช่วง 0–255 ดิบที่จำเป็นสำหรับ analogWrite() นี่เป็นเทคนิคพื้นฐานที่ช่วยให้โค้ดของคุณง่ายขึ้นและเข้าใจได้ง่ายขึ้นมาก เนื่องจากคุณสามารถคิดเป็นเปอร์เซ็นต์แทนที่จะเป็นค่าไบต์ตามอำเภอใจ
ทักษะนี้จำเป็นสำหรับโปรเจกต์ใดๆ ที่คุณต้องปรับขนาดค่าจากเซนเซอร์หรือสัญญาณควบคุม ตัวอย่างเช่น คุณสามารถใช้มันเพื่อ:
- ควบคุมความสว่างของ LED หรือความเร็วของมอเตอร์ตามค่าที่อ่านได้จากโพเทนชิโอมิเตอร์
- แปลงเอาต์พุตของเซนเซอร์อุณหภูมิ (เช่น 0–1023) เป็นช่วงเซลเซียสหรือฟาเรนไฮต์
- แมปอินพุตแอนะล็อกจากจอยสติ๊กเพื่อควบคุมตำแหน่งของเซอร์โวมอเตอร์
- สร้างอินเทอร์เฟซผู้ใช้ที่เรียบง่ายซึ่งใช้ค่าเปอร์เซ็นต์เพื่อตั้งระดับพลังงานของอุปกรณ์
เมื่อจบบทเรียนนี้ คุณจะสามารถเขียนโค้ดที่สะอาดขึ้น บำรุงรักษาง่ายขึ้น และอ่านหรือปรับแก้ได้ง่ายขึ้น
ฮาร์ดแวร์/อุปกรณ์
โปรเจกต์นี้ใช้อุปกรณ์จำนวนน้อยที่สุด ทำให้เหมาะสำหรับผู้เริ่มต้น คุณจะต้องมี:
- บอร์ด Arduino (เช่น Uno)
- LED หนึ่งดวง
- ตัวต้านทาน 220 โอห์ม
- สายจัมเปอร์
- เบรดบอร์ด (ไม่จำเป็นแต่แนะนำ)
คู่มือการเดินสายไฟ
การเดินสายไฟสำหรับโปรเจกต์นี้ง่ายมาก ดังที่สาธิตในวิดีโอ (ในวิดีโอที่ 20:47) LED เชื่อมต่อกับพิน 3 ของ Arduino ผ่านตัวต้านทานจำกัดกระแส 220 โอห์ม
เชื่อมต่อขั้วแอโนด (ขาที่ยาวกว่า) ของ LED เข้ากับพิน 3 ผ่านตัวต้านทาน เชื่อมต่อขั้วแคโทด (ขาที่สั้นกว่า) ของ LED เข้ากับพินกราวด์ (GND) บน Arduino
คำอธิบายโค้ด
ตัวอย่างนี้เน้นที่ฟังก์ชันที่ผู้ใช้กำหนดซึ่งช่วยให้การควบคุมความสว่างของ LED ง่ายขึ้น โค้ดถูกสร้างขึ้นรอบฟังก์ชันที่กำหนดเองชื่อ pwmValue() ซึ่งเป็นกุญแจสำคัญที่ทำให้โค้ดเข้าใจง่าย
มาดูส่วนที่ปรับแต่งได้ของโค้ดกัน:
int LEDpin = 3; //กำหนดพินสำหรับ LED
บรรทัดนี้กำหนดพิน Arduino ที่เชื่อมต่อกับ LED คุณสามารถเปลี่ยนหมายเลข 3 เป็นพินอื่นที่รองรับ PWM บนบอร์ด Arduino ของคุณได้
แกนหลักของโปรเจกต์คือฟังก์ชันที่กำหนดเอง pwmValue() ฟังก์ชันนี้รับค่าเปอร์เซ็นต์เป็นอินพุตและแปลงเป็นช่วง 0–255 ที่ใช้โดย analogWrite() นี่คือจุดที่ฟังก์ชัน map() ทำงานมหัศจรรย์
int pwmValue(int percent)
{
if(percent >=0 && percent <=100)
{
return map(percent, 0,100, 0,255);
}else
{
return 0;
}
}
หากต้องการใช้ฟังก์ชันนี้ คุณเพียงแค่เรียกใช้ด้วยค่าเปอร์เซ็นต์ความสว่างที่ต้องการ ฟังก์ชันจะส่งคืนค่าที่ถูกต้องสำหรับ analogWrite() ตัวอย่างเช่น pwmValue(60) จะส่งคืน 153 ซึ่งตรงกับ 60% ของ 255 ฟังก์ชันยังมีการตรวจสอบความปลอดภัยเพื่อให้แน่ใจว่าเปอร์เซ็นต์อินพุตอยู่ระหว่าง 0 ถึง 100 โดยส่งคืน 0 หากอยู่นอกช่วงนี้
ในฟังก์ชัน setup() คุณจะเห็นวิธีการใช้งาน:
int b=5;//ความสว่าง 60%
Serial.println( pwmValue(b) );//พิมพ์บนซีเรียลมอนิเตอร์
analogWrite(LEDpin, pwmValue(b));// เปิด LED ด้วยความสว่าง 60%
ที่นี่ ตัวแปร b ถูกตั้งค่าเป็นเปอร์เซ็นต์ความสว่างที่คุณต้องการ จากนั้นฟังก์ชัน pwmValue(b) ถูกใช้ทั้งเพื่อพิมพ์ค่าที่แมปแล้วไปยังซีเรียลมอนิเตอร์และเพื่อตั้งความสว่างของ LED หากต้องการเปลี่ยนความสว่างของ LED คุณเพียงแค่แก้ไขค่าของ b ฟังก์ชัน map() จะจัดการการคำนวณที่จำเป็นทั้งหมดให้คุณ
โปรเจกต์สด/การสาธิต
ในวิดีโอ ผู้นำเสนอสาธิตโปรเจกต์โดยการเปลี่ยนค่าของตัวแปร b และอัปโหลดโค้ดไปยัง Arduino เมื่อตั้ง b เป็น 60 โค้ดจะแมปเป็น 153 และ LED จะสว่างที่ 60% การเปลี่ยน b เป็น 90 จะแมปเป็น 229 ทำให้ LED สว่างขึ้นอย่างเห็นได้ชัด การตั้งเป็น 100 จะแมปเป็น 255 ซึ่งเป็นความสว่างสูงสุด การสาธิตแสดงให้เห็นอย่างชัดเจนว่าฟังก์ชัน map() ช่วยให้คุณควบคุม LED โดยใช้ค่าเปอร์เซ็นต์ที่เข้าใจง่าย ในขณะที่ซีเรียลมอนิเตอร์ยืนยันค่า 0–255 ที่แน่นอนที่ส่งไปยังพิน (ในวิดีโอที่ 21:29)
โปรเจกต์ที่เกี่ยวข้องจากวิดีโอนี้
- บทเรียน 14/31-1: Arduino Millis (ไม่ใช้ delay) และฟังก์ชัน map | SunFounder Robojax
- บทเรียน 14/31-2: การเขียนโค้ด Arduino millis() ตัวอย่างที่ 2 พร้อมอีเวนต์
- บทเรียน 14/31-3: การเขียนโค้ด Arduino millis() ตัวอย่างที่ 3 พร้อมปุ่มกด
- บทเรียน 14/31-4: การเขียนโค้ด Arduino map() ตัวอย่างที่ 1
บทต่างๆ
- [00:00] แนะนำฟังก์ชัน Millis และ map
- [01:19] Millis คืออะไรและทำไมต้องใช้
- [05:46] การใช้ Millis กับอีเวนต์เพื่อดำเนินการ
- [08:35] ตัวอย่าง Millis ที่ 2 พร้อมปุ่มกด
- [12:14] ตัวอย่าง Millis ที่ 3 การตรวจสอบการกดปุ่มสองครั้ง
- [17:20] แนะนำฟังก์ชัน map()
- [19:47] ตัวอย่างโค้ดการแมปเปอร์เซ็นต์เป็นความสว่าง LED
- [20:47] การสาธิตสดของฟังก์ชัน map()
- [22:41] การสร้างฟังก์ชันที่กำหนดเองเพื่อจัดการการแมป
/*
Lesson 14/31-5: Arduino coding map( ) example-2
Get this code and watch video Download and resource page https://robojax.com/RJT597
YouTube video https://www.youtube.com/watch?v=lqgzQohNiIM
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
int LEDpin = 3; //defind pin for LED
void setup() {
Serial.begin(9600);//initialzie serial monitor with 9600 baud
pinMode(LEDpin, OUTPUT);//set pin as output
int b=5;//60% brightness
Serial.println( pwmValue(b) );//print it on serial monitor
analogWrite(LEDpin, pwmValue(b));// turn the LED on with 60% brightness
}
void loop() {
}
/*
* pwmValue(int percent)
* @param precent is value between 0 to 100
* @return it returns the mapped value from 0 to 255
* written by Ahmad Shamshiri on Dec 9, 2022
*
*/
int pwmValue(int percent)
{
if(percent >=0 && percent <=100)
{
return map(percent, 0,100, 0,255);
}else
{
return 0;
}
} //pwmValue end
สิ่งที่คุณอาจต้องการ
-
อเมซอนSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
อเมซอน
-
อเมซอน
-
อเมซอน
-
อเมซอน
-
อื่น ๆ
แหล่งข้อมูลและเอกสารอ้างอิง
-
ภายนอกPurchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
ไฟล์📁
คู่มือผู้ใช้
-
คู่มือการประกอบรถอัจฉริยะ SunFounder 3-in-1 Arduino Smart Carเอกสารนี้แสดงการประกอบ SunFounder 3-in-1 Arduino Smart Car ทีละขั้นตอน
SunFounder_car_assembly_manual.pdf1.20 MB