# ตัวอย่าง การเขียนโปรแกรม Micropython ควบคุมการทำงาน ESP32
# LAB07_TM1637 C - tm1637 & Switch
# ครูวิบูลย์ กัมปนาวราวรรณ พฤหัสบดี 11 กรกฏาคม 2567
import tm1637 # นำเข้าโมดูล tm1637 ซึ่งใช้สำหรับควบคุมจอแสดงผล 7-segment TM1637
from machine import Pin
# นำเข้า Pin class จาก machine module ซึ่งใช้สำหรับการควบคุม GPIO pins บน ESP32
import utime # นำเข้า utime module สำหรับการหน่วงเวลา
print("LAB07_TM1637 C - Viboon Kumpanavarawan")
# พิมพ์ข้อความ "LAB07_TM1637 - Viboon Kumpanavarawan" บนหน้าจอ
tm = tm1637.TM1637(clk=Pin(22), dio=Pin(19))
# สร้างอินสแตนซ์ของ TM1637 และตั้งค่า pin 22 เป็น clk และ pin 19 เป็น dio
tm.brightness(7) # ตั้งค่าความสว่างของจอแสดงผล TM1637 เป็นระดับ 7 (สูงสุด)
count = 0 # กำหนดตัวแปร count เริ่มต้นที่ค่า 0
# กำหนด pin 27, 26 และ 25 เป็น input pins พร้อมด้วย pull-down resistor
button_increase = Pin(27, Pin.IN, Pin.PULL_DOWN)
button_decrease = Pin(26, Pin.IN, Pin.PULL_DOWN)
button_reset = Pin(25, Pin.IN, Pin.PULL_DOWN)
# กำหนด pin 18 เป็น output pin สำหรับควบคุม LED
led = Pin(18, Pin.OUT)
# ฟังก์ชั่นสำหรับการอัพเดตการแสดงผลของจอ 7-segment
def update_display(value):
num_str = '{:04d}'.format(value)
# แปลงค่า value เป็น string ที่มี 4 หลัก, เติม 0 ด้านหน้าให้ครบ 4 หลักถ้าจำเป็น
tm.numbers(int(num_str[0:2]), int(num_str[2:4]))
# แสดงเลขบนจอ 7-segment โดยแยกเป็น 2 หลักซ้ายและ 2 หลักขวา
update_display(count) # แสดงค่าเริ่มต้นของ count บนจอ 7-segment
# วนลูปเพื่อให้โปรแกรมทำงานต่อไป
while True:
if button_increase.value() == 1: # ถ้าปุ่ม increase ถูกกด (ส่งค่า logic 1)
led.value(1) # เปิด LED
count += 1 # เพิ่มค่า count ขึ้น 1
if count > 9999: # ถ้า count เกิน 9999
count = 9999 # กำหนดให้ count เท่ากับ 9999 (จำกัดค่าสูงสุดที่ 9999)
update_display(count) # อัพเดตการแสดงผลของจอ 7-segment
utime.sleep(0.3) # หน่วงเวลา 0.3 วินาทีเพื่อป้องกันการเด้งของปุ่ม
led.value(0) # ปิด LED
if button_decrease.value() == 1: # ถ้าปุ่ม decrease ถูกกด (ส่งค่า logic 1)
led.value(1) # เปิด LED
count -= 1 # ลดค่า count ลง 1
if count < 0: # ถ้า count ต่ำกว่า 0
count = 0 # กำหนดให้ count เท่ากับ 0 (จำกัดค่าต่ำสุดที่ 0)
update_display(count) # อัพเดตการแสดงผลของจอ 7-segment
utime.sleep(0.3) # หน่วงเวลา 0.3 วินาทีเพื่อป้องกันการเด้งของปุ่ม
led.value(0) # ปิด LED
if button_reset.value() == 1: # ถ้าปุ่ม reset ถูกกด (ส่งค่า logic 1)
led.value(1) # เปิด LED
count = 0 # รีเซ็ตค่า count ให้เป็น 0
update_display(count) # อัพเดตการแสดงผลของจอ 7-segment
utime.sleep(0.3) # หน่วงเวลา 0.3 วินาทีเพื่อป้องกันการเด้งของปุ่ม
led.value(0) # ปิด LED
utime.sleep(0.1) # หน่วงเวลา 0.1 วินาทีในลูปหลักเพื่อประหยัดพลังงาน