เรียนรู้และฝึกทดลองไปกับบอร์ดไมโครคอนโทรเลอร์ STM32 Nucleo
จากค่าย STMicroelectronics
(ตอนที่ 3 ทดลองใช้งานขา ADC บนบอร์ด Nucleo)
![](https://blog.thaieasyelec.com/wp-content/uploads/2020/07/15_01_1__2.png)
ในบทความนี้เป็นการทดลองใช้งานขา ADC (Analog to Digital Converter) บนบอร์ด Nucleo รับสัญญาณอนาล็อกได้ตั้งแต่ 0 ถึง 3.3 โวลต์ ความละเอียด 12 บิต จำนวน 10 ช่อง โดยในการทดลองนี้อ่านค่าสัญญาณอนาล็อก จากตัวต้านทานปรับค่าได้ผ่านขา A0 ถ้าแรงดันของสัญญาณอยู่ในช่วงที่กำหนดไว้ ให้โปรแกรมแสดงผลผ่านหลอด LED ทั้ง 3 ดวง (ค่า R ที่ใช้ต่อร่วม 330 Ohm) ดังภาพ
![](https://blog.thaieasyelec.com/wp-content/uploads/2020/07/15_02_7-1024x426.png)
ภาพเปรียบสัญญาณอนาล็อกและดิจิตอลจะเห็นได้ว่า สัญญาณดิจิตอลมีเพียง 2 ระดับ คือ 1 (High) หรือ 0 (Low) แตกต่างจากสัญญาณอนาล็อกที่ระดับสัญญาณมีขนาดไม่คงที่
![](https://blog.thaieasyelec.com/wp-content/uploads/2020/07/15_03_7.png)
เมื่อต่อวงจรบนบอร์ดทดลองเข้ากับ Nucleo ได้ดังภาพ
จากนั้นเข้าไปที่หน้าเว็บ Compiler ของ mbed สร้างไฟล์โปรแกรม main.cpp และ อิมพอร์ตไลบรารี่พื้นฐานของ mbed เข้ามา จากนั้นเขียนโค้ดโปรแกรมในไฟล์ main.cpp
![](https://blog.thaieasyelec.com/wp-content/uploads/2020/07/15_04_8.png)
โค้ดโปรแกรมดังนี้
#include "mbed.h" DigitalOut led_red (D2); DigitalOut led_green (D3); DigitalOut led_blue (D4); AnalogIn analog_ch_0(A0); float value_ain_0 = 0.0f ; int main() { while(1) { value_ain_0 = analog_ch_0.read(); value_ain_0 = value_ain_0 *3.3f; if ((value_ain_0 >= 0.0f) && (value_ain_0 < 1.0f)) { led_red = 1; led_green = 1; led_blue= 1; } else if ((value_ain_0 >= 1.0f) && (value_ain_0 < 2.0f)) { led_red = 0; led_green = 1; led_blue= 1; } else if ((value_ain_0 >= 2.0f) && (value_ain_0 < 3.0f)) { led_red = 0; led_green = 0; led_blue= 1; } else if (value_ain_0 >= 2.0f) { led_red = 0; led_green = 0; led_blue= 0; } wait_ms(100); // 100 ms } //End while() } //End main()
จากโค้ดโปรแกรมจะเห็นได้ว่า
#include "mbed.h" DigitalOut led_red (D2); DigitalOut led_green (D3); DigitalOut led_blue (D4); AnalogIn analog_ch_0(A0); float value_ain_0 = 0.0f;
กำหนดขาสัญญาณ D2 D3 D4 เป็น Output ใช้ชื่อ led_red led_green led_blue และกำหนดขา ADC ที่ขา A0 ใช้ชื่อ analog_ch_0 กำหนดตัวแปรชนิด float ชื่อ value_ain_0 สำหรับรับค่าที่อ่านได้จากขา ADC
while(1) { value_ain_0 = analog_ch_0.read(); value_ain_0 = value_ain_0 *3.3f; if ((value_ain_0 >= 0.0f) && (value_ain_0 < 1.0f)) { led_red = 1; led_green = 1; led_blue= 1; } else if ((value_ain_0 >= 1.0f) && (value_ain_0 < 2.0f)) { led_red = 0; led_green = 1; led_blue= 1; } else if ((value_ain_0 >= 2.0f) && (value_ain_0 < 3.0f)) { led_red = 0; led_green = 0; led_blue= 1; } else if (value_ain_0 >= 2.0f) { led_red = 0; led_green = 0; led_blue= 0; } wait_ms(100); // 100 ms } //End while()
ให้โปรแกรมวนอ่านค่าสัญญาณอนาล็อกจากขา A0 ผ่านการใช้คำสั่ง .read(); เก็บค่าไว้ในตัวแปร value_ain_0 โดยค่าที่ได้อยู่ระหว่าง 0.0 ถึง 1.0 คูณด้วย 3.3 เพื่อแปลงเป็นค่าแรงดัน ถ้าตัวแปร value_ain_0
– อยู่ในช่วงมากกว่า 0.0 V ถึงน้อยกว่า 1.0 V ให้ LED ทั้ง 3 ดวงดับ
– อยู่ในช่วงมากกว่าหรือเท่ากับ 1.0 V ถึงน้อยกว่า 2.0 V ให้ LED สีแดงสว่างเพียงดวงเดียว
– อยู่ในช่วงมากกว่าหรือเท่ากับ 2.0 V ถึงน้อยกว่า 3.0 V ให้ LED สีแดงและเขียวสว่าง
– อยู่ในช่วงมากกว่าหรือเท่ากับ 3.0 V ให้ทั้ง 3 ดวงสว่าง
![](https://blog.thaieasyelec.com/wp-content/uploads/2020/07/15_05_6-1024x575.png)
สามารถดูข้อมูล และตัวอย่างการใช้งานเพิ่มเติมได้จาก http://developer.mbed.org/handbook/AnalogIn
![](https://blog.thaieasyelec.com/wp-content/uploads/2020/07/15_06_6.png)
จากนั้นทดลองใช้งานโปรแกรมโดยกดปุ่ม Compile All เพื่อสั่งให้คอมไพล์โปรแกรมและดาวน์โหลดโปรแกรมจากเว็บลงมา