19. Wio Terminal EP.06, กราฟแสดงค่าความสว่างของแสง


Wio Terminal EP.06,  กราฟแสดงค่าความสว่างของแสง

โพสก่อนหน้านี้ ผมได้แนะนำวิธีการเขียนโค้ด เพื่อวัดค่าความสว่างของแสงไปแล้ว ครั้งนี้ ก็เลยขอถือโอกาส ประยุกต์สักเล็กน้อย โดยนำค่าที่ได้ มาคำนวณ แล้วแสดงเป็นร้อยละ พร้อมกราฟ โดยเมื่อกราฟเต็มหน้าจอ ก็จะรีเฟรช แล้วแสดงผลใหม่

 คำอธิบาย

    โค้ดที่เขียนนี้ จะพบว่ามีกาารเขียนฟังก์ชั่น ชื่อ stext และ draw_axis ขึ้นมา โดย
ฟังก์ชั่น  
stext(txt, px1, py1, c1, b1) stext จะไว้ใช้แสดงข้อความ ในรูปแบบ stext(ข้อความ, พิกัด x, พิกัด y, สีตัวอักขระ, สีพื้นตัวอักขระ)
ฟังก์ชั่น draw_axis(x1, y1, x2, y2, cl) เพื่อไว้ใช้สร้างเส้นแกนของกราฟ ในรูปแบบ draw_axis(พิกัด x1, y1, x2, y2, สีเส้น c1)

ขั้นตอนการทำงาน

    1. วนรอบอ่านค่าความสว่างของแสง จำนวน 10 ครั้ง
    2. นำค่าแสงที่ได้ มาหาค่าเฉลี่ย
    3. แปลงค่า ให้เหมาะสมในการแสดงผล
    4. แสดงค่าความสว่างที่รับได้ และ ค่าที่แปลงเป็นร้อยละ
    5. นำผลที่ได้ ไปสร้างกราฟ จำนวน300 จุด เมื่อเต็มหน้าจอแล้ว จะรีเฟรช เพื่อเริ่มแสดงใหม่


เขียนโค้ด ใช้ทดสอบ

from machine import LCD, Pin, Map
from machine import ADC
import time
lcd = LCD()

# ประกาศเพื่อทำการอ่านค่าจากเซนเซอร์แสง
light = ADC(Pin(Map.WIO_LIGHT, Pin.IN))

# ฟังก์ชั่นในการแสดงข้อความ
def stext(txt, px1, py1, c1, b1):
    lcd.setTextColor(c1, b1)
    lcd.drawString(txt + "   ", px1, py1)

# ฟังก์ชั่นในการสร้างแกนของกราฟ
def draw_axis(x1, y1, x2, y2, cl):
    lcd.drawLine(x1, y1, x1, y2, cl)
    lcd.drawLine(x1, y2, x2, y2, cl)
    lcd.drawString("t", 300, 210)
    lcd.drawString("%", 10, 10)

# ส่วนของโปรแกรมหลัก จากนี้จนจบ
lcd.fillScreen(lcd.color.BLACK)
lcd.setTextSize(2)

# สร้างแกน x-y ด้วยเส้นสีฟ้า
draw_axis(2, 2, 318, 238, lcd.color.CYAN)

# กำหนดค่า ตัวแปร
value = 0
px = 4
py = 0   

# Loop
while True:
    # วนรอบ อ่านค่าแสง
    for i in range(10):
        value = light.read() + value
    value = int(value/10)  # เฉลี่ย 10 ครั้ง

    # แปลงค่าที่ได้รับมา
    val = 280 - int(value*280/1200) 
    dump = int(value*100/1200)
    
    # แสดงผลค่า ที่รับมา และ ค่าที่แปลงเป็น ร้อยละ
    stext("Raw: " + str(val), 40, 30, lcd.color.RED, lcd.color.BLACK)
    stext("Percent: " + str(dump), 160, 30, lcd.color.CYAN, lcd.color.BLACK)

    # สร้างจุดกราฟบนหน้าจอ
    px = px + 2
    lcd.drawPixel(px, val, lcd.color.YELLOW)

    # หน่งเวลา 50 มิลลิวินาที (0.05 วินาที)
    time.sleep(0.05)  # หน่วงเวลา50 milliseconds

    # ตรวจสอบการแสดงผล ถ้าเต็มหน้าจอ ให้เริ่มใหม่
    if px > 300:
        px = 4
        lcd.fillScreen(lcd.color.BLACK)
        draw_axis(2, 2, 318, 238, lcd.color.CYAN)

  
ข้อสังเกตุ !! ผมสร้างแกน x-y ด้วยคำสั่ง draw_axis(2, 2, 318, 238, lcd.color.CYAN) เนื่องจาก หากใช้คำสั่ง draw_axis(0, 0, 319, 239, lcd.color.CYAN) จะพบว่าเส้นแกนมีการเอียง เนื่องจากจอแสดงผล กับเคส ไม่ตรงกัน 


 ผลที่ได้จากการทำงาน

   
รูปที่ 2 ผลจากการทำงานของคำสั่ง



โพสต์ยอดนิยมจากบล็อกนี้

14. Wio Terminal EP.01 , เริ่มตันกับ Wio Terminal ด้วย circuitPython

28. Wio Terminal GPS

24. Wio Terminal EP.11, อนาล็อกมิเตอร์ วัดความสว่างของแสง