122 pinMode(led2, OUTPUT); } void loop() { digitalWrite(led1, led_status); digitalWrite(led2, led_status = !(led_status)); delay(1000); } คำอธิบาย: มีการกำหนดตัวแปรนอกฟงกชัน 3 ตัวแปรคือ led1 และ led2 เปนตัวแปรแบบจำนวน เต็มสำหรบั เก็บตำแหนงอา งองิ ของ ตำแหนงขา 3 และ 4 ของบอรด Arduino และ led_status เปน ตัวแปรแบบ bool ถูกใชสำหรับเก็บสถานะ ของสัญญาณตำแหนงขาที่ 3 และ 4 ซึ่งมีสถานะที่ แตกตางกนั เสมอ ฟงกชัน Setup(): กำหนดใหตำแหนงขาที่ 3 และ 4 ทำหนา ทเี่ ปน เอาตพ ตุ ฟงกชัน loop(): กำหนดใหตำแหนงขาที่ 3 และ 4 มีสถานะที่แตกตางกันเสมอ เนื่องจาก สถานะของ led2 จะเกิดจากการเปลี่ยนสถานะของ led1 และในทุก ๆ 1 วินาที จะมีการเปลี่ยน สถานะของทั้งสองตำแหนงเสมอ เนื่องจากในรอบการทำงานรอบตอไป led1 จะใชสถานะเดียวกับ led2 ตัวอยา งที่ 4.3 โปรแกรมหลอดแอลอดี ี 8 ดวงตดิ ทลี ะ 1 ดวงเรยี งจากขวาไปซา ย การทำงาน: หลอดแอลอีดี 7 ดวงจะติดทลี ะ 1 ดวงเรียงจากขวาไปซายในทุก ๆ 1 วินาทีเม่อื ตดิ ครบ 8 ดวงแลว จะเร่ิมตดิ ทดี่ วงแรกใหมอ ีกคร้ัง วิธีทำ 1. สว นวงจรทดลอง รูปที่ 4.7 วงจรทดลองหลอดแอลอดี ี 8 ดวงติดทลี ะ 1 ดวงเรียงจากขวาไปซาย ทีม่ า: ผเู ขยี น
123 คำอธิบาย: ตอ หลอดแอลอดี เี ขากบั ตำแหนง ขาท่ี 0 - 7 ของบอรด Arduino 2. สวนโปรแกรม int led[8]; int led_on = 0; void setup() { for(int i =0;i < sizeof(led)/sizeof(int); i++){ led[i] = i; pinMode(led[i], OUTPUT); } } void loop() { for(int i =0;i < sizeof(led)/sizeof(int); i++){ if(i == led_on){ digitalWrite(led[i], HIGH); } else{ digitalWrite(led[i], LOW); } } delay(1000); led_on++; if(led_on == 8){ led_on = 0; } } คำอธิบาย: มกี ารกำหนดตวั แปรนอกฟงกชัน 2 ตวั แปรคือ led เปนตวั แปรแบบอารเ รยสำหรบั อางองิ ตำแหนงขาวงจรทดลองท้ัง 8 ตำแหนง และ led_on ใชสำหรบั กำหนดตำแหนง สำหรับสถานะที่มี แรงดันของตำแหนงขาของวงจรทดลอง ฟงกชัน Setup(): กำหนดใหตำแหนงอารเรยใหตรงกับขาของบอรด Arduino ทั้ง 8 ขาคือ ตำแหนงท่ี 0 – 7 ของอารเ รยจ ะตอ งตรงกับตำแหนงขาท่ี 0 – 7 ตามลำดบั โดยทำหนา ทเี่ ปนเอาตพุต ทั้งหมด ฟงกชัน loop(): เปนการแสดงสถานะของการติดของหลอดแอลอีดีทีละ 1 หลอดเรียงจาก ขวาไปซาย โดยตำแหนงของขาที่ตรงกับคา led_on จะมีการสงสถานะ “HIGH” ไปยังหลอดแอลอีดี
124 แตในตำแหนงอื่น ๆ ทั้งหมดจะไมมีการสงคาสถานะ โดยคา led_on จะมีการเพิ่มขึ้นรอบละ 1 คา และเมือ่ มคี า เปน 8 จะตองกลบั มามคี าเปน 0 เพอื่ ใหหลอดแอลอีดีเรม่ิ แสดงผลใหมทตี่ ำแหนงแรก จากตัวอยางที่ 4.3 สามารถเปลี่ยนการทำงานเปนหลอดแอลอีดี 8 ดวงติดทีละ 1 ดวงเรียง จากซายไปขวาไดโดยไมจำเปนตองมีการเปล่ียนสวนของวงจรทดลอง (วิลาศิณี วิสิทธิก์ าศ และคณะ, 2551) โดยมกี ารเปลยี่ นแปลงคำสงั่ ในสว นของโปรแกรมเพียงเลก็ นอ ยดังน้ี int led[8]; int led_on = 7; void setup() { for(int i =0;i < sizeof(led)/sizeof(int); i++){ led[i] = i; pinMode(led[i], OUTPUT); } } void loop() { for(int i =0;i < sizeof(led)/sizeof(int); i++){ if(i == led_on){ digitalWrite(led[i], HIGH); } else{ digitalWrite(led[i], LOW); } } delay(1000); led_on--; if(led_on == -1){ led_on = 7; } } คำอธิบาย: จากโปรแกรม สังเกตวามีลักษณะคลายกับโปรแกรมหลอดแอลอีดี 8 ดวงติดทีละ 1 ดวง เรยี งจากขวาไปซาย แตกตา งกันเพยี งสวนตัวหนาและขีดเสน ใต ดงั น้ี 1.การกำหนดคาให led_on จะตอ งเริ่มจากคามากทส่ี ดุ (led_on = 7 2.led_on จะตอ งเปนการลดคา 3.กรณที ี่ led_on มีคา เปน -1 จะตองเปลย่ี นคา ใหเ ปน 7 ซ่ึงเปน คา เรมิ่ ตน เพ่อื ใหมกี ารเริม่ ทำงานใหม
125 3. การใชคำส่ังควบคมุ แบบไบต จากหัวขอที่ 1 ใชฟงกชัน digitalWrite() เพื่อเปนคำสั่งควบคุมการทำงานของหลอดแอลอีดี โดย 1 ฟงกชันสามารถควบคุมการทำงานไดเพียง 1 หลอด หรอื เปนการควบคมุ คร้ังละ 1 บิต อยางไร ก็ตามสามารถใชบอรด Arduino สำหรับควบคุมการทำงานคร้ังละ 8 บิต หรอื 1 ไบตได โดยตำแหนง ขาที่ 0 – 7 ของวงจรทดลองคือ PORTD ซึ่งสามารถควบคุมพอรตดังกลาวไดทั้งพอรตพรอมกัน (Adith, 2015) โดยตองกำหนดคำสั่งตางๆ ทส่ี ำคญั เปน ดังนี้ 3.1 การกำหนดโหมดการใชง านของแตละตำแหนง หากตองการใหตำแหนง ขาใดทำหนาที่เปนโหมดเอาตพ ุต ตองกำหนดใหตำแหนงขาดังกลา ว มีคาเปน “1” ในทางกลับกันหากตองการใหขาใดทำหนาที่เปนอินพุตตองกำหนดใหตำแหนงขา ดังกลาวมีคาเปน “0” และเมื่อทราบสถานะของทั้ง 8 ตำแหนงแลวใหแปลงเปนเลขฐานสิบหกและ กำหนดคาให DDRD ตัวอยางเชนสมมติตองการใชงานทั้ง 8 ขา เปนเอาตพุต จะตองกำหนดสถานะ เปน ดังน้ี ตารางที่ 4.1 ตวั อยางการกำหนดโหมดการใชง านให PORTD จำนวน 8 ขา ตำแหนง 7 6 5 4 3 2 1 0 ขา สถานะ 1 1 1 1 1 1 1 1 จากตารางขางตนไดวา 111111112 = FF16 ดงั นน้ั การใชงานตองเขยี นคำสัง่ ตอ ไปนี้ DDRD = 0xFF; 3.2 การกำหนดสถานะของการใชง านเอาตพุตแบบไบต สมมติกำหนด PORTD ทั้ง 8 บิตทำหนาที่เปนเอาตพุต และขั้วแอโนดของหลอดแอลอีดีถูก เช่ือมกบั ขาของ Arduino การกำหนดสถานการณติด – ดับของหลอดแอลอดี ี เปนดงั น้ี หากตองการใหตำแหนงใดมีสถานะ “ติด” ใหกำหนด “1” ที่ตำแหนงขาดังกลาว ในทาง กลบั กันหากตองการใหต ำแหนง ใดมสี ถานะ “ดบั ” ใหก ำหนด “0” ทตี่ ำแหนง ขาดังกลาว ตัวอยางเชน หากตองการใหหลอดแอลอีดีในตำแหนงที่ 1, 4, 5 ,7 มีสถานะติด จะตองกำหนดสถานะใหแตละ ตำแหนง เปน ดังนี้
126 ตารางท่ี 4.2 ตัวอยา งการกำหนดสถานะให PORTD กรณถี กู ใชงานเปนเอาตพตุ ตำแหนง 7 6 5 4 3 2 1 0 ขา สถานะ 1 0 1 1 0 0 1 0 จากตารางท่ี 4.2 ไดวา 101100102 = B216 โดยการใชงานตองเขยี นคำสง่ั ตอไปนี้ PORTD = 0xB2; ตวั อยางที่ 4.4 โปรแกรมหลอดแอลอีดี 8 ดวงตดิ ทลี ะ 1 ดวงเรยี งจากขวาไปซา ย การทำงาน: หลอดแอลอีดี 7 ดวงจะติดทลี ะ 1 ดวงเรยี งจากขวาไปซายในทุก ๆ 1 วินาทีเม่ือตดิ ครบ 8 ดวงแลว จะเริ่มติดที่ดวงแรกใหมอ ีกครงั้ วิธีทำ 1. สว นวงจรทดลอง เชือ่ มตออปุ กรณภ ายนอก เขา กบั บอรด Arduino ดังตวั อยางที่ 4.3 2. สว นโปรแกรม int x = 0x01; void setup() { DDRD = 0xFF; } void loop() { PORTD = x; delay(300); if(x == 0x80){ x = 0x01; } else{ x = x<<1; } } คำอธิบาย: มกี ารกำหนดตัวแปรนอกฟง กชัน 1 ตวั แปรคือ x เปน ตัวแปรสำหรับเกบ็ สถานะของขาทั้ง 8 ขาของ PORTD โดยมีคา เริม่ ตน เปน 0x01 ซึ่งเปนคา ของเลขฐานสิบหก
127 ฟงกชัน Setup(): กำหนดตำแหนงขาทั้งหมดที่อยู PORTD ซึ่งมีทั้งหมด 8 ขาเปนเอาตพุต ทั้งหมด ฟงกชัน loop(): เปนการแสดงสถานะของการติดของหลอดแอลอีดีทีละ 1 หลอดเรียงจาก ขวาไปซาย โดยมีเงื่อนไขในการตรวจสอบคา x ซึ่งหากมีคาเปน 0x80 แสดงวาเปนการแสดงผล รูปแบบสุดทาย (หลอดไฟดวงที่ 8 ไดรับสถานะ “HIGH” เพียงหลอดเดียว) จะกำหนดใหกลับไป เรมิ่ ตน ใหม แตห ากคา x ยงั ไมเ ปน คา ดังกลา วจะใหม กี ารเล่อื นคา x ไปทางซายครง้ั ละ 1 บติ จากตัวอยางที่ 4.4 สามารถเปลี่ยนการทำงานเปนหลอดแอลอีดี 8 ดวงติดทีละ 1 ดวงเรียง จากซา ยไปขวาไดโดยไมจ ำเปนตองมีการเปลี่ยนสว นของบอรด Arduino โดยมีการเปลี่ยนแปลงคำสั่ง ในสวนของโปรแกรมเพียงเลก็ นอยดงั นี้ int x = 0x80; void setup() { DDRD = 0xFF; } void loop() { PORTD = x; delay(300); if(x == 0x01){ x = 0x80; } else{ x = x>>1; } } คำอธิบาย: จากโปรแกรมขางตน สังเกตวามีลักษณะคลายกับโปรแกรมหลอดแอลอีดี 8 ดวงติดทีละ 1 ดวงเรยี งจากขวาไปซาย แตกตางกนั เพียงสวนตัวหนาและขดี เสน ใต ดงั น้ี 1. การกำหนดคา เร่มิ ตน x จะตองเปน 0x80 ซ่ึงเปนรูปแบบที่อยูขวาสุด 2. เงือ่ นไขสดุ ทายคอื x จะตองมีคาเปน 0x01 ซ่ึงเปน รปู แบบทีอ่ ยซู ายสุด 3. การกลับไปเร่มิ รูปแบบเริ่มตนตองเปนคา x = 0x80 4. ตอ งเปลยี่ นจากเล่ือนไปตำแหนงทางซายเปนการเลอ่ื นไปตำแหนงขวา
128 4. การสรางคำสัง่ วนรอบในจำนวนท่จี ำกัด เนื่องจากฟงกชัน loop() ใน Arduino เปนฟงกชันสำหรับวนรอบการจำนวนไมจำกัด ซึ่งใน บางกรณีผูใชงานอาจตองการวนรอบการจำงานของโปรแกรมในรูปแบบจำนวนจำกัด จึงสามารถ ปรับแกคำสั่งภายในฟงกชัน loop() โดยการเพิ่มคำสั่งวนรอบไวในฟงกชันดังกลาวได ดังตัวอยาง ตอไปนี้ ตัวอยา งที่ 4.5 โปรแกรมไฟกระพริบ 1 ดวง (3 คร้ัง การทำงาน: หลอดแอลอดี ีจะมีสถานะของการตดิ -ดบั สลับกันในทุก 1 วินาทจี ำนวน 3 ครง้ั วธิ ีทำ 1. สวนวงจรทดลอง: เชื่อมตออปุ กรณภ ายนอกเขากบั บอรด Arduino ดังตวั อยางที่ 4.1 2. สว นโปรแกรม int led1 = 3; int count = 0; void setup() { pinMode(led1, OUTPUT); } void loop() { digitalWrite(led1, HIGH); delay(300); digitalWrite(led1, LOW); delay(300); count++; if(count == 3){ while(1); } } คำอธิบาย: ภายนอกฟง กชันมตี วั แปร count ไวสำหรับนับจำนวนรอบการทำงาน ฟงกชัน loop(): แตละรอบการทำงานสัญญาณไฟที่หลอดแอลอีดีจะมีสถานะติด-ดับพรอม กับเพิ่มคาตัวแปร count ขึ้นทีละ 1 คาและเมื่อคา count = 3 จะทำใหเงื่อนไขเปนจริงซึ่งจะพบ คำส่งั while(1 เปรยี บเสมือนการทำงานที่บรรทดั น้ตี ลอดการใชงาน
129 5. การเขยี นโปรแกรมควบคุมหลอดแอลอีดีทต่ี อขาแคโทดกับวงจรทดลอง หัวขอ 1 – 4 ที่ซึ่งไดถูกอธิบายไวกอนหนานี้ทั้งหมดนั้นคือการทดลองที่เกิดจากการตอขา แอโนดของหลอดแอลอีดีเขากับขาตางๆ ของบอรด Arduino สวนขาแคโทดถูกตอลงกราวด ดังน้ัน หากตองการใหหลอดแอลอีดีมีสถานะ “ติด” จะตองสงสถานะ “HIGH” ออกจากบอรด Arduino ที่ ตำแหนงขาที่เช่ือมตอกับขาแอโนดของหลอดแอลอีดีที่ตองการควบคุม ในทางกลับกันในหัวขอนี้จะ เปลย่ี นรปู แบบการเช่ือมตอ ระหวางหลอดแอลอีดี และบอรด Arduino โดยจะใชขาแคโทดเชือ่ มกับขา ของบอรด Arduino โดยขาแอโนดจะถูกตอ เขากับแรงดัน 5 โวลต ดงั นัน้ หากตอ งการใหหลอดแอลอีดี มีสถานะ “ติด” จะตองสงสถานะ “LOW” ออกจากบอรดที่ตำแหนงขาที่เชื่อมตอกับขาแคโทดของ หลอดแอลอดี ีท่ีตองการควบคมุ ตัวอยางที่ 4.6 โปรแกรมไฟกระพริบ 1 ดวง โดยการเชื่อมตอขาแคโทดของหลอดแอลอีดีกับขาของ บอรด Arduino การทำงาน: หลอดแอลอดี จี ะมสี ถานะของการติด-ดบั สลบั กนั ในทุก 1 วินาที วิธีทำ 1. สว นวงจรทดลอง รปู ท่ี 4.8 วงจรทดลองไฟกระพริบ 1 ดวงโดยการเชื่อมตอขาแคโทด ของหลอดแอลอกี ับบอรด Arduino ที่มา: ผูเขียน คำอธิบาย: ตอ หลอดแอลอีดีเขา กบั ตำแหนงขาท่ี 3 ของบอรด Arduino โดยจากภาพหากกำหนดใหมี สถานะ “HIGH” ออกจากขา 3 เพื่อทำใหหลอดแอลอีดีมีสถานะดับ แตหากกำหนดใหมีสถานะ “LOW” ออกจากตำแหนง ขา 3 ดงั กลา วสงผลใหห ลอดแอลอีดีมสี ถานะตดิ
130 2. สวนโปรแกรม void setup() { pinMode(3, OUTPUT); } void loop() { digitalWrite(3, HIGH); delay(1000 ; digitalWrite(3, LOW); delay(1000 ; } คำอธิบาย: ฟง กช ัน Setup(): กำหนดใหตำแหนง ขาท่ี 3 ของบอรด Arduino ทำหนา ที่เปน เอาตพ ุต ฟงกชัน loop(): กำหนดใหตำแหนงขาที่ 3 ของบอรด Arduino มีสถานะ “HIGH”และ สถานะ “LOW” สลับกันในทกุ ๆ 1 วนิ าที 6. บทสรุป แอลอีดี (Light Emitting Diode: LED) คือไดโอดเปลงแสงท่ีมีใหเลือกใชงานหลากหลายสี โดยใชไฟเล้ียงประมาณ 5 โวลต ดังนั้นผูใ ชง านตอ งตอไฟเลี้ยงท่ขี ้วั แอโนด และตอ กราวดท่ีขัว้ แคโทด การนำแอลอีดีมาตอใชงานกับไมโครคอนโทรลเลอรสามารถตอได 2 วิธี ดังนี้ วิธีที่ 1 ตอขา แอโนดเขากบั ตำแหนง ขาสำหรับรับสง สัญญาณแบบดิจิทัลของไมโครคอนโทรลเลอรจ ำนวน 1 ขา โดย ตอขาแคโทดลงกราวด หากตองการใหแอลอีดีมีสถานะ \"ติด\" ใหสงสถานะ \"HIGH\" (แรงดัน 5 โวลต ออกที่ตำแหนงขาอางอิง ในทางกลับกันหากใหแอลอีดีมีสถานะ \"ดับ\" ใหสงสถานะ \"LOW\" (ตอลง กราวด ออกที่ตำแหนงขาอางอิง วิธีที่ 2 ตอขาแคโทดเขากับตำแหนงขาสำหรับรับสงสัญญาณแบบ ดิจิทัลของไมโครคอนโทรลเลอรจำนวน 1 ขา โดยตอขาแอโนดเขากับแรงดันขนาด 5 โวลต หาก ตอ งการใหแ อลอีดมี สี ถานะ \"ตดิ \" ใหสงสถานะ \"LOW\" ออกท่ตี ำแหนง ขาอางอิง ในทางกลบั กันหากให แอลอดี มี สี ถานะ \"ดบั \" ใหส ง สถานะ \"HIGH\" ออกทต่ี ำแหนงขาอางอิง การเขียนโปรแกรมดวย Arduino IDE สำหรับควบคุมหลอดแอลอีดีจำเปนตองใชฟงกชัน pinMode() ซึ่งเปนฟงกชันสำหรับกำหนดตำแหนงขาอางอิงของบอรด Arduino ใหเปนโหมดอินพุต หรือเอาตพ ุต เนื่องจากแอลอดี เี ปน อปุ กรณท่ีรับสัญญาณจากบอรด Arduino ดังนั้นจงึ ตองกำหนดเปน โหมดเอาตพุต และใชฟงกชัน digitalWrite() สำหรับควบคุมสถานะของการติด และดับของหลอด แอลอดี ี
131 ฟงกชัน delay() คือฟงกชันที่ใชสำหรับการหนวงเวลาโดยมีการรับคาพารามิเตอรในหนวย มิลลวิ ินาที ฟงกชัน delayMicroseconds() คือฟงกชันที่ใชสำหรับการหนวงเวลาโดยมีการรับ คาพารามเิ ตอรใ นหนว ยไมโครวนิ าที การใชฟงกชัน digitalWrite() จะสามารถควบคุมการทำงานไดเพียง 1 บิต หรือควบคุมได เพียง 1 ขาของบอรด Arduino ดังนั้นหากตองการควบคุมจำนวนหลายขาสามารถทำไดโดยใชการ ควบคุมแบบไบตซึ่งสามารถควบคุมไดครั้งละ 8 บิต แตอยางไรก็ตามการควบคุมคุมลักษณะน้ี จำเปนตองตอการใชงานไวที่พอรตเดียวกันทั้งหมด ซึ่งสำหรับบอรด Arduino Uno R3 สังเกตไดวา พอรต D มีชองทางสำหรับรับและสงสัญาณจำนวน 8 ชองพอดี จึงเปนพอรตที่เหมาะสำหรับการใช คำสง่ั ควบคมุ แบบไบต
132 แบบฝก หดั ทา ยบท บทท่ี 4 1. แอลอีดีมีท้ังหมด 2 ขาซ่งึ แตล ะขามชี ่ืออะไรบาง 2. การควบคมุ ใชหลอดแอลอีดีมีสถานะติดจะตองทำอยางไร 3. ฟง กช ัน pinMode() เปนฟงกชนั ทมี่ ีไวเพือ่ อะไร 4. หากตอหลอดแอลอดี ที ่ีขา 3 ของบอรด Arduino จะตองกำหนดฟงกชนั pinMode อยา งไร 5. ฟง กชนั digitalWrite() เปนฟงกช ันที่มไี วเ พื่ออะไร 6. หากตอขั้วแอโนดหลอดแอลอดี ที ่ีขา 3 ของบอรด Arduino ขั้วแคโทดลงกราวดแ ละตองการให หลอดมีสถานะเปนติดจะตองกำหนดฟง กชัน digitalWrite() เปน อยางไร 7. ฟงกช ัน delay() แตกตา งจากฟงกช นั delayMicroseconds() อยา งไร 8. กำหนดใหหลอดแอลอีดจี ำนวน 8 ดวงถกู ตอ ที่ PORTD เรยี งจากตำแหนง ขวาไปซาย (ตำแหนง ขวา สุดถกู เช่อื มตอ กับตำแหนง 0 และตำแหนง ซายสดุ ถูกเชอื่ มตอ กับตำแหนง ท่ี 7) จงคำนวณหารหสั แบบ ไบตท่สี ง่ั ใหหลอดแอลอดี ตี ิดเฉพาะตำแหนงที่ 0, 2 และ 4
133 เอกสารอางองิ กอบเกียรติ สระอุบล. (2561). พัฒนา IoT บนแฟรตฟอรม Arduino และ Raspberry Pi. กรงุ เทพฯ: หสม สำนักพมิ พ อนิ เตอรมเี ดีย. เดชฤทธิ์ มณีธรรม. (2559). คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino. กรุงเทพฯ: ซีเอ็ด ยเู คช่นั . ประภาส พุมพวง. (2561). การเขียนและการประยุกตใชงานโปรแกรม Arduino. กรุงเทพฯ: ซีเอ็ด ยูเคชั่น. วลิ าศิณี วิสิทธก์ิ าศ วรพจน กรแกว วฒั นกุล และ ชัยวัฒน ลิ้มพรจติ รวไิ ล. (2551). ทดลองและใชงาน. ไมโครคอนโทรลเลอร ATmega128 ดวยโปรแกรมภาษา C กับซอฟตแวร Wiring. กรงุ เทพฯ : อนิ โนเวตฟี เอ็กพอรเิ มนต. สนธยา นงนุช. (2560). การใชงาน ESP32 เบ้ืองตน. ชลบุรี: รา นไอโอเอก็ ซฮ อบ. Adith, J. B. (2015). Arduino by Example. Birmingham: Packt Publishing Ltd. Don, W. (2015). Arduino Electronics Blueprints. Birmingham: Packt Publishing Ltd. Tero, K. and Kimmo, K. (2011). Make: Arduino Bots and Gadgets. Canada: O’Reilly Media, Inc.
แผนบริหารการสอนประจำบทท่ี 5 การรบั ขอ มลู จากวงจรรบั ขอ มูล หัวขอเนอื้ หา 1. สวิตซ 2. การสรา งวงจรสวิตซ 2.1 วงจรสวติ ซที่มีการทำงานทีส่ ถานะ “HIGH” 2.2 วงจรสวติ ซท่ีมีการทำงานทส่ี ถานะ “LOW” 3. การเขียนโปรแกรมเพ่ือรอรบั คาจากสวิตซ 4. การเกิดเบาซข องสญั ญาณ 5. บทสรุป แบบฝก หดั ทายบท เอกสารอางอิง วตั ถุประสงคเ ชงิ พฤติกรรม เม่อื ผูเ รียน เรียนจบบทน้แี ลว ผูเรยี นควรมีความสามารถ ดังน้ี 1. อธบิ ายเกี่ยวกับโครงสรา งและการทำงานสวติ ซได 2. อธบิ ายเกี่ยวกับวงจรสวติ ซไ ด 3. เขยี นโปรแกรมเพอื่ รอรบั คา จากสวติ ซได 4. เขียนโปรแกรมเพือ่ แกปญ หาการเกิดเบาซของสญั ญาณได 5. มีความต้ังใจในการเรยี นและการฝก ปฏิบัตกิ ารเขียนโปรแกรม วิธีการสอนและกิจกรรมการเรียนการสอนประจําบท 1. บรรยายเนือ้ หาในแตล ะหวั ขอ พรอ มยกตัวอยา งประกอบ โดยใชเ อกสารคำสอน และสอ่ื power point 2. ทดลองปฏิบัติจริง โดยการเขียนโปรแกรม Arduino เพื่อรอรับคาจากวงจรสวิตซเพื่อใช เปน เง่ือนไขสำหรับควบคมุ หลอดแอลอดี ผี า นโปรแกรม Proteus 3. ผูสอนสรปุ เน้อื หา 4. ทำแบบฝก หดั เพื่อทบทวนบทเรียน
136 5. เปด โอกาสใหผ เู รยี นถามขอสงสัย 6. ผูสอนทำการซักถาม สื่อการเรียนการสอน 1. เอกสารคำสอนวิชาการประยุกตใชง านไมโครคอนโทรลเลอร 2. ส่ือ power point การวดั ผลและการประเมิน 1. การเขา เรียนตรงตอเวลา และการแตง กาย 2. ความรว มมอื และความรับผดิ ชอบตอการเรยี น 3. การถาม-ตอบ 4. การสง งานที่ไดร ับมอบหมายภายในเวลาทกี่ ำหนด 5. การทำแบบฝกหัดท่ีมีความถูกตองไมน อยกวา 80%
บทที่ 5 การรับขอมลู จากวงจรรบั ขอ มลู วงจรรับขอมูล (เดชฤทธิ์ มณีธรรม, 2559) คือวงจรที่ใชสำหรับตัดตอวงจรไฟฟาเพื่อนำมา ประยุกตใชงานรวมกับบอรด Arduino วงจรดังกลาวนี้จะเปรียบเสมือนทำหนาที่เปนอินพุตที่สง สัญญาณไปยังบอรด โดยอุปกรณที่สามารถนำมาใชงานเปนอินพุตเพื่อสงสัญญาณไปยังบอรด Arduino เชน สวติ ซแบบกดตดิ ปลอยดบั หรอื สวติ ซแบบเลือ่ น (Don, 2015) เปนตน 1. สวิตซ สวิตซคอื อปุ กรณทนี่ ำหนาท่ีเปน ตัวสงสัญญาณไปยังบอรด Arduino ซงึ่ เปรียบเสมือนการทำ หนาที่เปนอินพุตใหกับบอรด โดยมีขาสำหรับการใชงานจริง 2 ขา ขาหนึ่งจะตองรับสถานะ “HIGH” สวนอีกขาหนึ่งรับสถานะ “LOW” (Tero & Kimmo, 2011) โดยสัญญาณที่สงไปยังบอรด Arduino ข้ึนอยสู ถานะปจ จบุ นั ของสวิตซซ่ึงมี 2 สถานะคือ กด หรือ ปลอ ย รปู ที่ 5.1 สวิตซ ท่มี า: ผเู ขียน รูปที่ 5.1 แสดงตัวอยางสวติ ซ ซึ่งจากรูปคือสวิตซแ บบกดติด ปลอยดับ ความหมายคือหากมี การกดสวิตซเพื่อทำใหเกิดการลัดวงจร จะสงสถานะ “HIGH” ไปยังบอรด Arduino แตหากปลอย สวิตซเพื่อใหเปนการเปดวงจรจะสงสถานะ “LOW” ไปยังบอรด ในทางกลับกันหากการกดสวิตซ สำหรบั เปดวงจรจะเปนการสงสถานะ “LOW” ไปยงั บอรด Arduino และหากปลอยสวิตซเพ่ือใหเกิด การลัดวงจร คอื การสง สถานะ “HIGH” ไปยงั บอรด รูปที่ 5.2 แสดงสวิตซแบบกดติด ปลอยดับในโปรแกรม Proteus ซึ่งมีใหเลือกใชงานจำนวน 1 ตวั โดยการเลือกอปุ กรณดงั กลาวนม้ี าใชงานดว ยคำคน “button” อยางไรก็ตามสามาถเลือกใชงานสวิตซประเภทอื่น ในโปรแกรม Proteus ไดโดยใชคำคน “switch” ซง่ึ จะพบอปุ กรณประเภทดงั กลา วใหเ ลอื กใชง านเปน จำนวนมาก
138 รูปที่ 5.2 สวิตซแบบกดติด ปลอ ยดบั ในโปรแกรม Proteus ท่ีมา: ผเู ขียน รูปที่ 5.3 สวิตซแบบกดเพอ่ื เปด และปด ในโปรแกรม Proteus ทีม่ า: ผเู ขยี น 2. การสรางวงจรสวิตซ การนำสวติ ซมาสรางเปนวงจรเพื่อเปนอินพุตแกบอรด Arduino สามารถดำเนินการได 2 วิธี คือวงจรสวิตซที่มีการทำงานที่สถานะ “HIGH” และวงจรสวิตซที่มีการทำงานที่สถานะ “LOW” (วิ ลาศิณี วิสิทธ์กิ าศ และคณะ, 2551) 2.1 วงจรสวิตซท่ีมกี ารทำงานที่สถานะ “HIGH” วงจรสวิตซที่มีการทำงานที่สถานะ “HIGH” คือวงจรที่จะสงสถานะ “LOW” ไปยังบอรด Arduino ในกรณีที่ผูใชไมไดเริ่มกดสัมผัสที่ปุม ในทางกลับกันหากผูใชทำการกดสัมผัสที่สวิตซ วงจร จะสง สถานะ “HIGH” ไปยงั บอรด Arduino รูปท่ี 5.4 วงจรสวติ ซท ่ีมีการทำงานทส่ี ถานะ “HIGH” ท่มี า: ผูเขยี น
139 จากรูป 5.4 คือวงจรสวิตซที่มีการทำงานที่สถานะ “HIGH” ซึ่งอธิบายการทำงานไดเปนดงั นี้ กรณีที่ยังไมมีการกดสวิตซจะเปนการเปดวงจรจึงไมมีแรงดันที่ขา sw ซึ่งคือตำแหนงขาที่จะถูก เชื่อมตอกับบอรด Arduino ในทางกลับกันหากมีการกดสวิตซจะสงผลใหเกิดการลัดวงจรซึ่งจะมี แรงดนั ขนาด 5 โวลตถูกสง ผานตำแหนงขา sw 2.2 วงจรสวติ ซท ่ีมกี ารทำงานที่สถานะ “LOW” วงจรสวิตซที่มีการทำงานที่สถานะ “LOW”คือวงจรที่จะสงสถานะ “HIGH” ไปยังบอรด Arduino ในกรณีที่ผใู ชไมไ ดเ ร่มิ กดสมั ผัสทีส่ วิตซ ในทางกลบั กันหากผใู ชทำการกดสมั ผัสท่สี วติ ซ วงจร จะสง สถานะ “LOW” ไปยังบอรด รูปที่ 5.5 วงจรสวติ ซท ี่มีการทำงานทส่ี ถานะ “LOW” ท่มี า: ผูเ ขียน จากรูป 5.5 คือวงจรสวติ ซท ี่มีการทำงานที่สถานะ “LOW” ซึ่งอธิบายการทำงานไดเ ปนดงั นี้ กรณีที่ยังไมมีการกดสวิตซจะเกิดแรงดันที่ตำแหนงขา sw ในทางกลับกันหากมีการกดปุมสงผลการ เกิดการลัดวงจรซ่ึงเช่ือมตอกับขากราวด ดังนนั้ กระแสไฟทง้ั หมดจะไหลลงสกู ราวดสงผลใหไ มมีกระแส ไหลผา นตำแหนง ขา sw 3. การเขยี นโปรแกรมเพอื่ รอรบั คาจากสวติ ซ หัวขอนี้จะกลาวถึงตัวอยางโปรแกรมที่รอรับคาจากสวิตซ เพื่อนำผลลัพธมาเปนเงื่อนไข สำหรบั การควบคมุ อปุ กรณแสดงผลจากภายนอกซ่งึ คือแอลอีดี ในโปรแกรม Arduino IDE มฟี งกชนั ชื่อ digitalRead() ซ่ึงเปนฟงกชันสำหรับเรียกใชงานเพื่อ รับคา สัญญาณดจิ ิทัลจากอุปกรณภ ายนอก (ประภาส พมุ พวง, 2561) และ (สนธยา นงนุช, 2560) ซึ่ง มีรปู แบบเปน ดังน้ี
140 รปู แบบ digitalRead(pin) พารามิเตอร pin คือ ตำแหนงขาของบอรด Arduino ที่ถูกเชื่อมตอกับอุปกรณภายนอกที่ทำหนาที่ใน โหมดอินพุตเพื่อสงสัญญาณสูวงจรทดลอง โดยผลลัพธหลังจากเรียกใชฟงกชันมี 2 สถานะคือ “HIGH” หรอื “LOW” ตัวอยางท่ี 5.1 ควบคุมหลอดแอลอดี ีดวยสวิตซ การทำงาน: หลอดแอลอีดจี ะมสี ถานะของการตดิ -ดับข้ึนอยกู ับการสบั สวิตซ วธิ ีทำ 1. สว นวงจรทดลอง รูปที่ 5.6 วงจรทดลองควบคุมหลอดแอลอดี ดี วยสวติ ซ ทม่ี า: ผเู ขียน
141 คำอธิบาย: ตอหลอดแอลอีดีเขากับตำแหนงขาที่ 3 และตอสวิตซเขากับตำแหนงขาที่ 13 ของวงจร ทดลอง โดยหากสับสวิตซทีต่ ำแหนงขา 13 ของบอรด Arduino จะรับสัญญาณ “LOW” แตหากเปด สวติ ซจะรับสญั ญาณ HIGH 2. สวนโปรแกรม int sw = 13; int led = 3; void setup() { pinMode(sw, INPUT); pinMode(led, OUTPUT); } void loop() { if(digitalRead(sw) == LOW){ digitalWrite(led, HIGH); } else{ digitalWrite(led, LOW); } } คำอธิบาย: ภายนอกฟงกชันมีการกำหนดตัวแปร sw ไวสำหรับควบคุมการกดสวิตซที่ขา 13 และ led ไวส ำหรับควบคมุ การ ตดิ -ดับของหลอดแอลอดี ีท่ีขา 3 ฟงกชัน Setup(): กำหนดใหตำแหนงขาที่ 13 ของบอรด Arduino ทำหนาที่เปนอินพุต และขาท่ี 3 ทำหนาท่เี ปน เอาตพุต ฟง กชนั loop(): เมื่อมกี ารกดสวิตซจะทำใหขาท่ี 13 ไดรับสถานะ “LOW” ซึ่งทำใหเง่ือนไข เปน จริงโดยจะส่ังใหหลอดแอลอดี ีมีสถานะติด ในทางกลับกนั หลอดแอลอีดจี ะมสี ถานะดบั ในกรณีที่ขา ท่ี 13 ไดร ับสถานะ “HIGH” ตวั อยางที่ 5.2 ควบคุมหลอดแอลอีดี 2 ดวงดวยปุม 2 ปุม การทำงาน: รปู แบบสำหรับสญั ญาณท่ีออกมาจากหลอดแอลอีดที ง้ั 2 ดวงถูกแบง ออกเปน 2 รปู แบบ ซงึ่ ขน้ึ อยูกบั วามีการกดสมั ผัสท่สี วิตซหรือไม วธิ ีทำ
142 1. สวนวงจรทดลอง รูปท่ี 5.7 วงจรทดลองควบคุมหลอดแอลอีดี 2 ดวงดว ยปุม 2 ปมุ ทีม่ า: ผูเขียน คำอธิบาย: ตอหลอดแอลอีดีเขากับตำแหนงขาที่ 3, 4 และสวิตซเขากับตำแหนงขาที่ 12, 13 ของ บอรด Arduino โดยหากกดสวิตซที่ตำแหนงใดสงผลใหบอรด Arduino จะรับสัญญาณสถานะ “LOW” ทต่ี ำแหนงน้ันแตหากไมมกี ารกดสวติ ซจะรับสญั ญาณที่มสี ถานะ “HIGH” 2. สว นโปรแกรม int sw1 = 13; int sw2 = 12; int led1 = 3; int led2 = 4; void setup() { pinMode(sw1, INPUT); pinMode(sw2, INPUT); pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); } void loop() { if(digitalRead(sw1) == LOW){ digitalWrite(led1, HIGH); digitalWrite(led2, LOW); }
143 if(digitalRead(sw2) == LOW){ digitalWrite(led2, HIGH); digitalWrite(led1, LOW); } คำอธิบาย: กำหนดตัวแปร sw1, sw2 ไวสำหรับควบคุมการกดสวิตซที่ขา 13 และ 12 ตามลำดับ และ led1, led2 ไวส ำหรบั ควบคุมการ ติด-ดบั ของหลอดแอลอดี ีทข่ี า 3 และ 4 ตามลำดบั ฟงกช นั Setup(): กำหนดใหต ำแหนง ขาที่ 12, 13 ของบอรด Arduino ทำหนาทเ่ี ปนอินพุต และขาท่ี 3, 4 ทำหนาท่ีเปนเอาตพ ุต ฟงกชัน loop(): เมื่อมีการกดสวิตซจะทำใหขาที่ 13 ไดรับสัญญาณสถานะ “LOW” ซึ่งทำ ใหเ ง่อื นไขเปน จริงโดยจะสงั่ ใหหลอดแอลอีดีมสี ถานะติดในตำแหนงขาท่ี 3 และสถานะดับในตำแหนง ขาที่ 4 ในทางกลับกันหลอดแอลอีดีมีสถานะดับในตำแหนงขาที่ 3 แตมีสถานะติดในตำแหนงขาที่ 4 สำหรบั กรณีทขี่ าที่ 12 ไดรับสัญญาณสถานะ “LOW” 4. การเกดิ เบาซข องสญั ญาณ หากนำสวิตซไปประยุกตใชงานในรูปแบบการตรวจจับจำนวนครั้งของการกดสวิตซ จะเกิด ปญหาตรงที่การกดสัมผัสที่สวิตซของผูใชงานเพียง 1 ครั้ง แตผลลัพธแสดงโปรแกรมตรวจจับไดวามี การสมั ผัสทปี่ ุม มากกวา 1 ครงั้ สาเหตเุ น่อื งมาจากการกดปุม 1 ครัง้ จะทำใหเ กดิ การสน่ั ของหนาสัมผัส ซึ่งสงผลใหเกิดการตัดตอของหนาสัมผัสจำนวนหลายครั้ง (Adith, 2015) เรียกปญหานี้วาการเกิด เบาซของสญั ญาณ (Bounce) แรงดัน 5 0 x1 x2 เวลา รปู ท่ี 5.8 ตวั อยางการเกิดเบาซข องสญั ญาณ ทม่ี า: ผูเขียน
144 รูปที่ 5.8 แสดงตัวอยางการเกิดเบาซของสัญญาณ ซึ่งอธิบายไดดังนี้การกดสวิตซอยูในเวลา x1 แตเนื่องจากเกิดการสั่นของหนาสัมผัสหลังจากการกดสวิตซไปจนกระทั่งถึงชวงเวลา x2 สงผลให โปรแกรมตรวจสอบการกดสวติ ซไ ดม ากกวา 1 ครัง้ ถึงแมวา มีการกดสวิตซเกดิ ขึน้ เพยี งแคค รัง้ เดยี ว การแกเบาซของสัญญาณเรียกวาการดีเบาซ (Debounce) ผานกระบวนการเขียนโปรแกรม ซึ่งสามารถทำไดหลายวธิ ี สำหรับในเอกสารคำสอนนแ้ี สดงตวั อยางการดเี บาซ 3 วิธี ดังนี้ ตวั อยา งที่ 5.3 โปรแกรมหลอดแอลอีดี 8 ดวงติดทีละ 1 ดวงเรียงจากขวาไปซายผา นการกดสวิตซ (3 วิธี) การทำงาน: หลอดแอลอดี ี 7 ดวงจะตดิ ทีละ 1 ดวงเรยี งจากขวาไปซายในทุก ๆ ครง้ั ที่มีการกดสวิตซ 1 ครั้ง วิธที ำ 1. สว นวงจรทดลอง รูปที่ 5.9 วงจรทดลองหลอดแอลอดี ี 8 ดวงติดทลี ะ 1 ดวง เรียงจากขวาไปซายผา นการกดปุม ทมี่ า: ผูเขียน คำอธิบาย: ตอหลอดแอลอีดีเขากับตำแหนงขาที่ 0 - 7 และสวิตซท่ีตำแหนงขา 12 ของบอรด Arduino
145 2. สว นโปรแกรม (วิธีที่ 1: แกปญ หาดวยวธิ ีการหนวงเวลา int x = 0x01; int sw = 12; void setup() { DDRD = 0xFF; pinMode(sw, INPUT); } void loop() { PORTD = x; if(digitalRead(sw) == LOW){ if(x == 0x80){ x = 0x01; } else{ x = x<<1; } delay(100); } } คำอธิบาย: ภายนอกฟงกชันมีการกำหนดตัวแปร sw ไวสำหรับควบคุมการกดสวิตซที่ขา 12 และตัว แปร x ไวสำหรับควบคุมการ ตดิ -ดบั ของหลอดแอลอีดที ี่ขา 0 - 7 ตามลำดบั ฟงกชัน Setup(): กำหนดใหตำแหนงขาที่ 0 – 7 (พอรต D) ของบอรด Arduino ทำหนาท่ี เปน เอาตพุต และขาที่ 12 ทำหนา ที่เปนอนิ พุตจากอุปกรณภ ายนอก ฟงกชัน loop(): เมื่อมีการกดปุมจะทำใหขาที่ 12 ไดรับสัญญาณสถานะ “LOW” ซึ่งทำให เงือ่ นไขเปนจริงโดยจะสงั่ ใหห ลอดแอลอีดมี สี ัญญาณไฟในลักษณะของการชิฟจากขวาไปซายครั้งละ 1 ตำแหนง โดยมกี ารหนวงเวลาทกุ 100 มิลลิวินาทีเพื่อปอ งกันการเกิดเบาซข องสญั ญาณ ขอเสียของการดีเบาซดวยการหนวงเวลาคือ ตองกำหนดชวงเวลาการหนวงที่เหมาะสม เพราะหากกำหนดมากเกินไปจะติดอยูที่ฟงกชันนี้ซึ่งทำใหผูใชไมสามารถสั่งงานผานการกดสวิตซได หรือหากกำหนดนอยเกินไปจะทำใหก ารสัมผัสเพียง 1 ครั้งแตเกิดการทำงานของสญั ญาณไฟมากกวา 1 คำสง่ั
146 2. สวนโปรแกรม (วธิ ีท่ี 2: แกป ญหาดวยการรอหยดุ การสมั ผัสสวิตซแบบท่ี 1 int x = 0x01; int sw = 12; void setup() { DDRD = 0xFF; pinMode(sw, INPUT); } void loop() { PORTD = x; if(digitalRead(sw) == LOW){ if(x == 0x80){ x = 0x01; } else{ x = x<<1; } while(digitalRead(sw) == LOW); } } คำอธิบาย: ลักษณะการทำงานของวิธีท่ี 2 จะแตกตางจากวธิ ีที่ 1 ตรงที่วิธีที่ 2 จะดีเบาซโดยใชค ำส่งั วนรอบที่มีเงื่อนไขวาหากยังมีการกดสวิตซอยูจะติดอยูที่ลูปดังกลาว จนกวาจะหยุดสัมผัสปุมจึงจะ ออกจากการวนรอบและรอรับคำสง่ั การกดปุมในครงั้ ตอไป 2. สว นโปรแกรม (วธิ ีท่ี 3: แกปญ หาดวยการรอหยดุ การสัมผัสสวติ ซแ บบที่ 2 int x = 0x01; int sw = 12; int pulse = 0; void setup() { DDRD = 0xFF; pinMode(sw, INPUT); } void loop() {
147 PORTD = x; if(digitalRead(sw) == LOW){ pulse = 1; } if(pulse == 1 && digitalRead(sw) == HIGH){ if(x == 0x80){ x= 0x01; } else{ x = x<<1; } pulse = 0; } } คำอธิบาย: ลักษณะการทำงานของวิธีที่ 3 คือเมื่อมีการกดปุมจะทำให pulse มีคาเปน 1 และจะรอ ผูใชงานหยุดการสัมผัสปุมจึงจะทำใหเงื่อนไขที่ 2 จริงคือ pulse มีคาเปน 1 และมีการหยุดสัมผัสปุม จึงจะมกี ารเปลี่ยนตำแหนงการตดิ ของสัญญาณไฟ 5. บทสรุป สวิตซค ืออุปกรณทีน่ ำหนาที่เปนตัวสงสญั ญาณไปยังบอรด Arduino ซึ่งเปรียบเสมือนการทำ หนา ทีเ่ ปนอนิ พุตใหกับวงจรทดลอง โดยมีขาสำหรับการใชงานจริง 2 ขา โดยขาหน่ึงจะตองรับสถานะ “HIGH” และอีกขาหนึ่งรับสถานะ “LOW” ซึ่งมีใหเลือกใชงาน 2 ชนิดคือแบบกดติดปลอยดับ และ แบบกดเพอื่ เปดและกดเพ่อื ปด การนำสวิตซมาตอใชงานสามารถทำได 2 วิธีคือ วงจรสวิตซที่มีการทำงานที่สถานะ \"HIGH\" คือวงจรทจี่ ะสง สถานะ “LOW” ไปยงั วงจรทดลองในกรณที ีผ่ ใู ชไ มไ ดเริ่มกดสัมผัสทปี่ ุม ในทางกลับกัน หากผูใ ชทำการกดสมั ผสั ท่ีสวติ ซ วงจรจะสงสถานะ “HIGH” ไปยังบอรด Arduino และวงจรสวิตซทีม่ ี การทำงานที่สถานะ “LOW” คือวงจรที่จะสงสถานะ “HIGH” ไปยังบอรด Arduino ในกรณีที่ผูใช ไมไดเ ริม่ กดสมั ผสั ท่ีปมุ ในทางกลับกันหากผใู ชทำการกดสัมผัสทสี่ วติ ซ วงจรจะสงสถานะ “LOW” ไป ยังบอรด เนื่องจากสวิตซเปนอุปกรณที่ใชสำหรับสงสัญญาณสูบอรด Arduino ดังนั้นการเรียกใช ฟงกชัน pinMode() จึงตองกำหนดโหมดเปนแบบอินพุต และใชฟงกชัน digitalRead() เพื่ออานคา จากสวิตซส ตู ำแหนง ขาอา งองิ ของบอรด Arduino การเกิดเบาซของสัญญาณเกิดจากการที่โปรแกรมสามารถตรวจจับการสัมผัสสวิตซได มากกวา 1 ครงั้ ถึงแมวาผูใ ชงานประสงคเ พยี งใหเ กิดการสัมผัสเพียงครั้งเดียว สาเหตเุ นื่องมาจากเวลา
148 ของการวนรอบการทำงานเรว็ กวาเวลาของการยกน้ิวออกจากการสมั ผัสสวิตซ ซ่ึงสามารถแกไขปญหา ไดโดยใชก ารหนวงเวลา หรอื ใชการรอหยดุ การสมั ผสั สวติ ซ โดยเรยี กการแกปญหาลักษณะนี้วาการดี เบาซ
149 แบบฝก หัดทา ยบท บทท่ี 5 1. จากรูปทีก่ ำหนดให จงหาสถานะของ a เมื่อมีการกดที่สวิตซ 2. ฟง กช นั digitalRead() มีประโยชนอยา งไร 3. กำหนดใหวงจรสวิตซถูกเช่ือมตอท่ตี ำแหนง ขา 4 ของบอรด Arduino จงแสดงวิธีใชค ำส่งั สำหรับ กำหนดโหมดการทำงานที่ตำแหนงดังกลาว 4. ปญหาเบาตข องสญั ญาณเกดิ จากอะไร 5. การแกป ญหาเบาตข องสัญญาณเรยี กวา อะไร 6. การดเี บาตสญั ญาณสามารถทำอยางไรไดบ า ง 7. ขอ เสียของการดีเบาตด วยวิธกี ารหนวงเวลาคืออะไร 8. กำหนดใหวงจรสวิตซที่มีการทำงานที่สถานะ “LOW” ถูกเชื่อมตอกับบอรดทดลองที่ตำแหนงขา 12 จงเขียนโปรแกรมเพื่อแสดงสถานะการกดปุมผาน Serial Monitor โดยใหแสดงขอความ “Button is pressed” ทุกคร้งั ท่ปี ุมถกู สัมผสั
150 เอกสารอา งอิง เดชฤทธิ์ มณีธรรม. (2559). คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino. กรุงเทพฯ: ซีเอ็ด ยเู คชัน่ . ประภาส พุมพวง. (2561). การเขียนและการประยุกตใชงานโปรแกรม Arduino. กรุงเทพฯ: ซีเอ็ด ยเู คช่ัน. วิลาศณิ ี วสิ ิทธ์ิกาศ วรพจน กรแกววฒั นกลุ และ ชัยวฒั น ล้มิ พรจิตรวิไล. (2551). ทดลองและใชง าน. ไมโครคอนโทรลเลอร ATmega128 ดวยโปรแกรมภาษา C กับซอฟตแวร Wiring. กรงุ เทพฯ : อินโนเวตีฟ เอก็ พอริเมนต. สนธยา นงนชุ . (2560). การใชง าน ESP32 เบื้องตน. ชลบุรี: รา นไอโอเอ็กซฮอ บ. Adith, J. B. (2015). Arduino by Example. Birmingham: Packt Publishing Ltd. Don, W. (2015). Arduino Electronics Blueprints. Birmingham: Packt Publishing Ltd. Tero, K. and Kimmo, K. (2011). Make: Arduino Bots and Gadgets. Canada: O’Reilly Media, Inc.
แผนบริหารการสอนประจำบทที่ 6 การควบคมุ แอลอดี ี 7 สว น หัวขอเน้อื หา 1. แอลอีดี 7 สวน 1.1 การควบคมุ แอลอีดี 7 สว นแบบคอมมอนแคโทดสำหรับแสดงผลตัวเลข 0 – 9 1.2 การควบคมุ แอลอดี ี 7 สวนแบบคอมมอนแอโทดสำหรบั แสดงผลตวั เลข 0 – 9 2. การใชง านแอลอดี ี 7 สวนมากกวา 1 หลักแบบแสดงผลสลับกนั 3 การใชงานสวติ ซส ำหรับควบคุมการทำงานแอลอีดี 7 สว น 4 บทสรปุ แบบฝก หดั ทายบท เอกสารอางองิ วตั ถุประสงคเ ชิงพฤติกรรม เมื่อผูเ รยี น เรียนจบบทนีแ้ ลว ผเู รยี นควรมีความสามารถ ดังนี้ 1. อธิบายเก่ียวกับโครงสรางของแอลอดี ี 7 สว นได 2. เขียนโปรแกรมการควบคุมแอลอีดี 7 สวนจำนวน 1 หลัก 3. เขยี นโปรแกรมการควบคุมแอลอดี ี 7 สว นจำนวนทีม่ ีมากกวา 1 หลกั ดวยวธิ ีการแสดงผล สลบั กัน 4. เขยี นโปรแกรมรบั ขอ มลู จากสวติ ซเ พือ่ ควบคมุ แอลอีดี 7 สวน 5. มีความตงั้ ใจในการเรียนและการฝก ปฏิบัตกิ ารเขยี นโปรแกรม วิธกี ารสอนและกิจกรรมการเรียนการสอนประจำบท 1. บรรยายเน้ือหาในแตล ะหวั ขอ พรอมยกตัวอยางประกอบ โดยใชเอกสารคำสอน และสือ่ power point 2. ทดลองปฏบิ ัติจริง โดยการเขียนโปรแกรม Arduino เพอื่ ควบคุมแอลอดี ี 7 สว นผาน โปรแกรม Proteus เพ่ือใหแสดงผลเปน รปู แบบตา งๆ ท่ตี องการ 3. ผสู อนสรปุ เนื้อหา 4. ทำแบบฝก หัดเพื่อทบทวนบทเรียน
152 5. เปด โอกาสใหผ เู รยี นถามขอสงสัย 6. ผูสอนทำการซักถาม สื่อการเรียนการสอน 1. เอกสารคำสอนวิชาการประยุกตใชง านไมโครคอนโทรลเลอร 2. ส่ือ power point การวดั ผลและการประเมิน 1. การเขา เรียนตรงตอเวลา และการแตง กาย 2. ความรว มมอื และความรับผดิ ชอบตอการเรยี น 3. การถาม-ตอบ 4. การสง งานที่ไดร ับมอบหมายภายในเวลาทกี่ ำหนด 5. การทำแบบฝกหัดท่ีมีความถูกตองไมน อยกวา 80%
บทที่ 6 การควบคุมแอลอดี ี 7 สวน ในบทนจ้ี ะกลา วถึงการนำหลอดแอลอีดที ั้งหมด 7 ดวงมาวางเรยี งกันเรียกวา แอลอดี ี 7 สวน (7 Segment (เดชฤทธิ์ มณีธรรม, 2559) เพื่อใหสามารถแสดงผลออกมาใหอ ยูในรูปแบบของตัวเลข หรือตัวอักษรบางประเภทได โดยวิธีการกำหนดรูปแบบการแสดงผลสามารถทำไดโดยการกำหนดให ตำแหนงของหลอดแอลอีดที ีต่ รงกับรปู แบบท่ีตอ งการมสี ถานะติด ในทางกลบั กนั หลอดแอลอีดีท่ีไมอยู ในตำแหนงที่ตรงกับรปู แบบทีต่ อ งการจะถูกกำหนดใหเ ปนสถานะดบั 1. แอลอีดี 7 สว น แอลอีดี 7 สว นคือการนำหลอดแอลอดี มี าวางเรียงกนั เพ่ือใหสามารถแสดงผลใหอยใู นรูปแบบ ตางๆ ได ดงั รปู ที่ 6.1 รปู ที่ 6.1 แอลอดี ี 7 สวน ทมี่ า: ผเู ขียน รปู ที่ 6.1 แสดงหลอดแอลอดี ี 7 สวนโดยเรียงตอกนั เปนรูปรางคลายเลข “8” โดยจากการนำ แอลอดี มี าเรยี งตอ กนั ดังโครงสรางขางตนสามารถกำหนดการแสดงผลไดหลากหลายรปู แบบ อยางไรก็ ตามจากรูปนอกเหนือจากการนำแอลอีดีมาเรียงตอกัน 7 สวนแลวยังมีแอลอีดีอีก 1 ดวงซึ่งทำหนาที่ สำหรับแสดงผลเปนไดทงั้ ทศนยิ ม หรอื สญั ลกั ษณข องอณุ หภมู ิ รูปที่ 6.2 แสดงตัวอยางการนำแอลอีดี 7 สวนมาแสดงผลแบบตัวเลข นอกเหนือจากนั้นยัง สามารถนำมาแสดงผลใหอ ยูใ นรูปแบบอื่นๆ ไดเปนจำนวนมาก (วิลาศณิ ี วิสทิ ธิก์ าศ และคณะ, 2551) รูปที่ 6.3 แสดงโครงสรางของแอลอีดี 7 สวนประกอบดวยตำแหนง a, b, c, d, e, f และ g โดยหากตองการใหต ำแหนงแสดงผล จะตองกำหนดใหต ำแหนง ดังกลา วมีสถานะตดิ
154 รปู ที่ 6.2 ตวั อยา งการนำแอลอีดี 7 สว นมาแสดงผลเปนตวั เลขในรูปแบบตางๆ ท่ีมา: ทมี งานสมารท เลิรน นิ่ง, 2554 รปู ท่ี 6.3 โครงสรางแอลอีดี 7 สว น ทีม่ า: ทีมงานสมารท เลริ น น่ิง, 2554 รูปท่ี 6.4 แอลอีดี 7 สวนในโปรแกรม Proteus ท่ีมา: ผูเขยี น
155 รปู ที่ 6.4 แสดงตวั อยา งแอลอีดี 7 สว นในโปรแกรม Proteus ซึ่งมีใหเ ลอื กใชงานหลากหลาย ประเภท โดยสามารถเลือกใชอุปกรณดังกลา วไดโ ดยใชค ำคน “7seg-” ซึง่ จะพบอุปกรณการแสดงผล ประเภทแอลอีดี 7 สว นใหเลือกใชง านเปนจำนวนมาก รูปที่ 6.5 รายการแอลอีดี 7 สวนในโปรแกรม Proteus ท่ีมา: ผเู ขียน อยา งไรก็ตามในบทนจี้ ะเนน เก่ยี วกบั การนำแอลอีดี 7 สวนมาแสดงเปน ตัวเลข 0 – 9 สำหรับ สรางวงจรนบั ดังรปู ที่ 6.6 เลข 0 เลข 1 เลข 2 เลข 3 เลข 4 เลข 5 เลข 6 เลข 7 เลข 8 เลข 9 รปู ท่ี 6.6 การนำแอลอดี ี 7 สวนในโปรแกรม Proteus มาแสดงผลในรูปแบบตัวเลข 0 – 9 ทมี่ า: ผูเขียน แอลอีดี 7 สว นถูกแบง เปน 2 ประเภท (Tero & Kimmo, 2011) และ (สนธยา นงนุช, 2560) คือคอมมอนแคโทด (Common Cathode) คือขารวมของแอลอีดีจะถูกตอลงกราวด และหาก ตองการใหตำแหนงใดมีสถานะติด จะตองสงสถานะ “HIGH” ไปยังตำแหนงดังกลาว และคอมมอน
156 แอโนด (Common Anode) คือขารวมของแอลอีดีจะถูกตอกับแรงดันขนาด 5 โวลต และหาก ตองการใหตำแหนง ใดมีสถานะตดิ จะตองสงสถานะ “LOW” ไปยังตำแหนงดังกลา ว เนื่องจากจำนวนขาของแอลอีดี 7 สวนมีทั้งหมด 7 – 8 ขา ดังนั้นการเขียนโปรแกรมควบคมุ อปุ กรณด งั กลาวแบบไบตจ ะมคี วามสะดวกและรวดเร็วกวา โดยในบทท่ี 4 ไดก ลาวถึงคำส่ังแบบไบตที่ ใชสำหรับการควบคุมสถานะเอาตพุต ซึ่งอยูที่ตำแหนงขา 0 – 7 ของบอรด Arduino แลว ดังนั้นใน บทนีจ้ ะอธบิ ายวิธีการเขียนโปรแกรมควบคุมหลอดแอลอีดี 7 สวนโดยใชคำสั่งแบบไบต กำหนดใหตำแหนงขาที่เชื่อมตอกนั ระหวางบอรด Arduino และแอลอีดี 7 สว นเปนดังตารางท่ี 6.1 ตารางท่ี 6.1 ตวั อยางตำแหนงขาทีเ่ ชอื่ มตอ กนั ระหวา งบอรด Arduino และแอลอีดี 7 สว น ตำแหนงขา แอลอีดี 7 สวน บอรด Arduino a0 b1 c2 d3 e4 f5 g6 การควบคุมแอลอีดี 7 สวนเพื่อใหแสดงผลเปนตัวเลขจะอางอิงรูปแบบตัวเลขตามรูปที่ 6.6 และตำแหนง ของการเช่ือมตอกับบอรด Arduino ดังตารางท่ี 6.1 1.1 การควบคมุ แอลอีดี 7 สว นแบบคอมมอนแคโทดสำหรบั แสดงผลตัวเลข 0 – 9 แอลอีดี 7 สว นทต่ี อกนั แบบคอมมอนแคโทด คอื ตำแหนง ขารว มของหลอดแอลอีดีท้ังหมดจะ อยูติดกับขาแคโทดของหลอดแอลอีดี หรือตำแหนงปลายลูกศรสำหรับกรณีที่ใชโปรแกรม Proteus ดังนั้นหากกำหนดใหหลอดแอลอีดีทุกหลอดมีโอกาสที่จะเกิดสถานะ “ติด” จำเปนตองใหตำแหนง ของขารว มถกู เชอ่ื มตอกบั กราวด
157 โดยหากกำหนดสถานะ “HIGH” หรือ “1” ใหตำแหนงขาใดๆ ของหลอดแอลอีดี ตำแหนง ขาดังกลาวจะมีสถานะ “ติด” ในทางกลับกันหากกำหนดสถานะ “LOW” หรือ “0” ใหตำแหนงขา ใดๆ หลอดแอลอดี ีทต่ี ำแหนงขาดงั กลา วจะมสี ถานะ “ดบั ” ตารางที่ 6.2 แสดงการกำหนดสถานะใหแตล ะตำแหนงของแอลอีดี 7 สวนเพอื่ ใหแสดงผล เปน ตัวเลข 0 – 9 ตารางที่ 6.2 การกำหนดสถานะใหแ อลอดี ี 7 สวนแบบคอมมอนแคโทดแสดงผลเปน ตัวเลข 0 - 9 ตัวเลข g f e d c b a 0 01 1 1 111 1 00 0 0 110 2 10 1 1 011 3 10 0 1 111 4 11 0 0 110 5 11 0 1 101 6 11 1 1 101 7 00 0 0 111 8 11 1 1 111 9 11 0 1 111 จากตารางที่ 6.2 มีการใชงานทั้งหมด 7 ขา อยางไรก็ตามการใชงานคำสั่งแบบไบตมีความ จำเปน ตองกำหนดครั้งละ 8 บิต เนื่องจากตำแหนงขา 7 ของบอรด Arduino ไมไดถูกนำมาใชงาน ดังนั้นจึงสามารถกำหนดสถานะไดทั้ง “0” หรือ “1” โดยหากกำหนดใหต ำแหนงขาดังกลาวมีสถานะ เปน “0” เสมอสามารถกำหนดคาใหคำส่งั แบบไบตเพ่อื การแสดงผลเปน ตัวเลขรูปแบบตา งๆ ได ดังน้ี เลข 0: สถานะท่ีตำแหนงขา 7 - 0 มีคา เปน 00111111 = 3F16 ดังน้ัน จึงกำหนดการแสดงผลดวยคำสั่ง PORTD = 0x3F; เลข 1: สถานะที่ตำแหนง ขา 7 - 0 มีคาเปน 00000110 = 0616 ดงั นัน้ จงึ กำหนดการแสดงผลดวยคำส่ัง PORTD = 0x06; เลข 2: สถานะท่ีตำแหนงขา 7 - 0 มีคาเปน 01011011 = 5B16 ดงั นัน้ จึงกำหนดการแสดงผลดว ยคำสง่ั PORTD = 0x5B;
158 เลข 3: สถานะทีต่ ำแหนงขา 7 - 0 มคี าเปน 01001111= 4F16 ดงั นั้น จึงกำหนดการแสดงผลดว ยคำสงั่ PORTD = 0x4F; เลข 4: สถานะท่ีตำแหนงขา 7 - 0 มีคาเปน 01100110 = 6616 ดังนั้น จงึ กำหนดการแสดงผลดว ยคำสัง่ PORTD = 0x66; เลข 5: สถานะทีต่ ำแหนงขา 7 - 0 มคี า เปน 01101101 = 6D16 ดงั นั้น จงึ กำหนดการแสดงผลดวยคำส่ัง PORTD = 0x6D; เลข 6: สถานะท่ีตำแหนง ขา 7 - 0 มคี า เปน 01111101 = 7D16 ดงั นั้น จึงกำหนดการแสดงผลดว ยคำสง่ั PORTD = 0x7D; เลข 7: สถานะที่ตำแหนง ขา 7 - 0 มคี า เปน 00000111 = 0716 ดงั นัน้ จงึ กำหนดการแสดงผลดว ยคำส่งั PORTD = 0x07; เลข 8: สถานะทต่ี ำแหนง ขา 7 - 0 มคี าเปน 01111111 = 7F16 ดงั นน้ั จึงกำหนดการแสดงผลดวยคำสั่ง PORTD = 0x7F; เลข 9: สถานะทตี่ ำแหนง ขา 7 - 0 มคี า เปน 01101111 = 6F16 ดงั น้ัน จงึ กำหนดการแสดงผลดวยคำสง่ั PORTD = 0x6F; 1.2 การควบคมุ แอลอีดี 7 สว นแบบคอมมอนแอโทดสำหรบั แสดงผลตัวเลข 0 – 9 กรณีที่นำแอลอีดี 7 สวนมาเรียงตอ กันแบบคอมมอนแอโทด ไดวาตำแหนงขารวมของหลอด แอลอีดีทั้งหมดจะอยูติดกับขาแอโทดของหลอดแอลอีดี หรือตำแหนงหัวลูกศรสำหรับกรณีที่ใช โปรแกรม Proteus ดังนั้นหากกำหนดใหหลอดแอลอีดีทุกหลอดมีโอกาสที่จะเกิดสถานะ “ติด” จำเปนตอ งใหตำแหนง ของขารวมถูกเช่อื มตากับแรงดนั 5 โวลต โดยหากกำหนดสถานะ “HIGH” หรือ “1” ใหตำแหนงขาใดๆ ของหลอดแอลอีดี ตำแหนง ขาดังกลาวจะมีสถานะ “ดับ” ในทางกลับกันหากกำหนดสถานะ “LOW” หรือ “0” ใหตำแหนงขา ใดๆ หลอดแอลอีดที ี่ตำแหนงขาดงั กลา วจะมสี ถานะ “ติด” เนื่องจากการกำหนดสถานะใหตำแหนงตางๆ ของแอลอีดี 7 สวนแบบคอมมอนแอโนดเปน สวนกลับของแอลอีดี 7 สวนแบบคอมมอนแคโทด ดังนั้นการกำหนดคาใหคำสั่งแบบไบตเพื่อการ แสดงผลเปนตัวเลขรูปแบบตางๆ ได สามารถดำเนินการไดโดยการกลับบิตในแตละตำแหนงขาของ แอลอีดี 7 สว นแบบคอมมอนแคโทด ซึง่ ไดผลลพั ธเปน ดังนี้ เลข 0: สถานะท่ตี ำแหนง ขา 7 - 0 มีคาเปน 11000000 = C016 ดังนน้ั จึงกำหนดการแสดงผลดวยคำสงั่ PORTD = 0xC0; เลข 1: สถานะทตี่ ำแหนงขา 7 - 0 มคี า เปน 11111001 = F916 ดังน้ัน จงึ กำหนดการแสดงผลดวยคำสั่ง PORTD = 0xF9;
159 เลข 2: สถานะท่ีตำแหนงขา 7 - 0 มคี าเปน 10100100 = A416 ดังนั้น จึงกำหนดการแสดงผลดวยคำส่งั PORTD = 0xA4; เลข 3: สถานะท่ตี ำแหนงขา 7 - 0 มคี าเปน 10110000 = B016 ดงั นัน้ จงึ กำหนดการแสดงผลดว ยคำส่ัง PORTD = 0xB0; เลข 4: สถานะทีต่ ำแหนงขา 7 - 0 มีคาเปน 10011001 = 9916 ดังนน้ั จงึ กำหนดการแสดงผลดว ยคำสง่ั PORTD = 0x99; เลข 5: สถานะท่ตี ำแหนงขา 7 - 0 มคี า เปน 10010010 = 9216 ดงั น้นั จงึ กำหนดการแสดงผลดวยคำส่ัง PORTD = 0x92; เลข 6: สถานะทต่ี ำแหนง ขา 7 - 0 มีคา เปน 10000010 = 8216 ดังนั้น จึงกำหนดการแสดงผลดว ยคำสั่ง PORTD = 0x82; เลข 7: สถานะทต่ี ำแหนงขา 7 - 0 มคี า เปน 11111000 = F816 ดงั นั้น จงึ กำหนดการแสดงผลดว ยคำส่ัง PORTD = 0xF8; เลข 8: สถานะทีต่ ำแหนง ขา 7 - 0 มคี า เปน 10000000 = 8016 ดังนน้ั จงึ กำหนดการแสดงผลดว ยคำสง่ั PORTD = 0x80; เลข 9: สถานะท่ตี ำแหนง ขา 7 - 0 มคี าเปน 10010000 = 9016 ดงั นน้ั จึงกำหนดการแสดงผลดวยคำสัง่ PORTD = 0x90; ตวั อยางท่ี 6.1 โปรแกรมควบคุมแอลอดี ี 7 สว นแบบคอมมอนแคโทดเพื่อแสดงผลเปนตวั เลข 0 การทำงาน: หลอดแอลอีดี 7 สวนจะแสดงผลออกเปน เลข 0 วธิ ีทำ 1. สว นวงจรทดลอง รูปที่ 6.7 วงจรทดลองหลอดแอลอดี ี 7 สว นแบบคอมมอนแคโทด แสดงผลเปนตัวเลข 0 ท่มี า: ผูเขยี น
160 หมายเหตุ: ตำแหนงขา a ของแอลอีดี 7 สวนในโปรแกรม Proteus จะอยูเสนบนสุด และเรียงลง มาถึงเสน ลางสุดคอื ตำแหนงขา f คำอธิบาย: ตอหลอดแอลอีดี 7 สวนเขากับพอรต D ของวงจรทดลองโดยตำแหนง a, b, c,…,g ของ หลอดแอลอดี ี 7 สว นถกู ตอเขากบั ขาที่ 0 – 6 ตามลำดับ 2. สว นโปรแกรม void setup() { DDRD = 0xFF; PORTD = 0x3F; } void loop() { } คำอธิบาย: ฟงกชัน Setup(): กำหนดใหพอรต D ทั้งหมดทำหนาที่เปนเอาตพุต (DDRD = 0xFF และ กำหนดให PORTD = 0x3F เพ่ือใหแ อลอดี ี 7 สวนแบบคอมมอนแคโทดแสดงผลลพั ธเปน เลข 0 ฟง กช นั loop(): - 3. ผลการทดลอง รปู ที่ 6.8 ผลการทดลองหลอดแอลอีดี 7 สวนแบบคอมมอนแคโทด แสดงผลเปนตัวเลข 0 ทีม่ า: ผเู ขยี น
161 หมายเหตุ: ผอู า นสามารถทดลองเปล่ยี นคำสง่ั ของพอรต D เพอื่ เปล่ยี นรูปแบบการแสดงผลเปน ตัวเลข อื่น ๆ ตวั อยางที่ 6.2 โปรแกรมควบคมุ แอลอีดี 7 สว นแบบคอมมอนแอโนดเพ่ือแสดงผลเปน ตัวเลข 1 การทำงาน: หลอดแอลอีดี 7 สวนจะแสดงผลออกเปน เลข 1 วธิ ที ำ 1. สว นวงจรทดลอง รปู ท่ี 6.9 วงจรทดลองหลอดแอลอดี ี 7 สว นแบบคอมมอนแอโนด แสดงผลเปน ตัวเลข 1 ทม่ี า: ผูเขยี น คำอธิบาย: ตอหลอดแอลอีดี 7 สวนเขากับพอรต D ของบอรด Arduino โดยตำแหนง a, b, c,…,g ของหลอดแอลอีดี 7 สว นถูกตอเขากับขาที่ 0 – 6 ตามลำดบั 2. สว นโปรแกรม void setup() { DDRD = 0xFF; PORTD = 0xF9; } void loop() { }
162 คำอธิบาย: ฟงกชัน Setup(): กำหนดใหพอรต D ทั้งหมดทำหนาที่เปนเอาตพุต (DDRD = 0xFF และ กำหนดให PORTD = 0xF9 ความหมายคือ เพื่อใหแอลอีดี 7 สวนแบบคอมมอนแอโนดแสดงผลลพั ธ เปน เลข 1 ฟงกช นั loop(): - 3. ผลการทดลอง รปู ท่ี 6.10 ผลการทดลองหลอดแอลอดี ี 7 สวนแบบคอมมอนแอโนด แสดงผลเปนตวั เลข 1 ทีม่ า: ผเู ขยี น ตัวอยา งท่ี 6.3 โปรแกรมนับเลข 0 – 9 แสดงผลท่หี ลอดแอลอีดี 7 สวนแบบคอมมอนแคโทด การทำงาน: หลอดแอลอีดี 7 สวนจะแสดงผลออกเปน เลข 0 – 9 ตามลำดบั วธิ ีทำ 1. สว นวงจรทดลอง: เชื่อมตออุปกรณภ ายนอก เขา กบั บอรด Arduino ดงั ตัวอยา งที่ 6.1 2. สว นโปรแกรม int count = 0; int num[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; void setup() { DDRD = 0xFF; } void loop() { PORTD = num[count];
163 delay(300); count++; if(count == 10){ count = 0; } } คำอธิบาย: มีการกำหนดตัวแปรนอกฟงกชัน 2 ตัวแปรคือ num เปนตัวแปรแบบอารเรยที่เก็บคา ทั้งหมด 10 คาคือรูปแบบการแสดงผลของหลอดแอลอีดี 7 สวนแบบคอมมอนแคโทดเปนเลข 0 – 9 ตามลำดับ ตัวแปรอีก 1 ตัวคือ count เปนตัวแปรสำหรับนับคาจาก 0 – 10 เพื่อใชเก็บคาตำแหนง ของตวั แปร num ฟง กชัน Setup(): กำหนดใหพ อรต D ทงั้ หมดทำหนาทเ่ี ปน เอาตพ ตุ (DDRD = 0xFF ฟงกชัน loop(): กำหนดคา count ใหมีการเพิ่มคาขึ้นทุก ๆ 300 มิลลิวินาทีเพื่อใชเปนอิน เด็กซให num ดงั น้ันแอลอีดี 7 สว นจึงมกี ารแสดงผลเปนเลข 0 – 9 หมายเหตุ: กรณีใชแอลอีดี 7 สวนแบบคอมมอนแอโนดสำหรับวงจรนับ 0 – 9 ในสวน โปรแกรม ใหปรับแกคา ตัวแปร num ในบรรทัดท่ี 2 เปนดงั น้ี (ประภาส พุมพวง, 2561) int num[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90}; 2. การใชง านแอลอีดี 7 สวนมากกวา 1 หลกั แบบแสดงผลสลบั กนั จากตัวอยางที่ 6.1, 6.2 และ 6.3 ที่แสดงในหัวขอที่ 6.1 กลาวถึงการใชงานแอลอีดี 7 สวน เพียง 1 หลัก ซึ่งใชงานขาของบอรด Arduino 7 – 8 ขา ดังนั้นหากเปนการใชงานแอลอีดี 7 สวน จำนวน 2 หลัก หากการใชง านเปน แบบแยกสว นจะตองใชง านขาที่บอรด Arduino สูงถงึ 14 - 16 ขา เนื่องจากบอรด Arduino Uno R3 ซึ่งใชเปนตัวอยางในเอกสารคำสอนนี้มีจำนวนขาใหใช งานนอยมาก การตอใชง านแอลอีดี 7 สวนจำนวน 2 หลกั ข้นึ ไปจึงเปนวิธที ี่ไมเ หมาะสม อยางไรก็ตาม สามารถลดจำนวนการใชงานขาของบอรดเพื่อควบคุมการใชงานแอลอีดี 7 สวนที่มากกวา 1 หลักได โดยการตอใชงานขาของหลอดแอลอีดีแตละสวนรวมกัน และการควบคุมการนำงานจะใชวิธีสั่งให แอลอีดี 7 สวนแสดงผลครั้งละ 1 หลักซึ่งควบคุมโดยการปลอยสัญญาณไปที่ขาคอมมอนของแอลอีดี 7 สวนแตละหลักที่ตอแยกกัน (Don, 2015)
164 รูปที่ 6.11 การตอใชงานแอลอดี ี 7 สวนแบบคอมมอนแคโทดเพ่ือใชงาน 2 หลัก แบบแสดงผลสลับกนั ท่มี า: ผเู ขียน รูปที่ 6.11 คือการนำแอลอีดี 7 สวนแบบคอมมอนแคโทดมาตอใชงาน 2 หลักโดยใชวิธีการ แสดงผลแบบ สลบั กนั โดยจากรปู สังเกตไดวาตำแหนงขาท่ีตรงกันของแอลอดี ี 7 สว นทง้ั 2 หลักจะถูก เชอ่ื มตอ กัน เชนตำแหนง ขา a ของแอลอดี ี 7 สว นทงั้ 2 หลกั ถกู ตอ เช่ือมกนั เปนตน โดยขาคอมมอน ซึ่งจะเปนขาที่ถูกใชสำหรับควบคุมการสลับตำแหนงการแสดงผลจะถูกแยกสวนกัน ดังนั้นการตอใช งานตามรูปท่ี 6.11 มกี ารใชง านขาท่ีบอรด Arduino เหลือเพยี ง 9 ขาเทา นนั้ สำหรับวิธีการควบคมุ คือ มกี ารควบคมุ แอลอีดเี พยี งครง้ั ละ 1 หลกั เทาน้ันโดยหากตองการให หลักใดมีการแสดงผลจะเชื่อมตอขาคอมมอนของตำแหนงขาดังกลาวลงกราวด ในทางกลับกันจะ เชื่อมตอขาคอมมอนของแอลอีดี 7 สวนอีกตัวที่แรงดันขนาด 5 โวลต หรือไมมีการเชื่อมตอใดๆ ที่ ตำแหนงดงั กลา วเพ่ือไมมีการแสดงผลเกดิ ขึน้ รปู ท่ี 6.12 ควบคมุ การแสดงผลแอลอีดี 7 สวนตัวบน ที่มา: ผูเ ขียน
165 รปู ท่ี 6.13 ควบคมุ การแสดงผลแอลอดี ี 7 สวนตัวลา ง ที่มา: ผเู ขยี น รูปที่ 6.12 และ 6.13 แสดงตัวอยางการควบคุมใหแอลอีดี 7 สวนมีสถานะ “ติด” เฉพาะ ตำแหนงขา a ของแตล ะหลัก โดยรูปที่ 6.12 แสดงสถานการณท ำงานเฉพาะตัวบนโดยการเชื่อมตอขา คอมมอนของแอลอีดี 7 สวนตัวบนลงกราวด และปลอยลอยขาคอมมอนของตัวลาง ในทางกลับกัน โดยรูปที่ 6.13 แสดงสถานการณทำงานเฉพาะตัวลางโดยการเชื่อมตอขาคอมมอนของแอลอีดี 7 สว นตัวลา งลงกราวด และปลอยลอยขาคอมมอนของตวั บน หลักการควบคุมใหแอลอีดี 7 สวนทั้ง 2 หลักแสดงผลออกมาเปนรูปแบบที่แตกตางกัน สามารถทำ ไดโดยการเชื่อมตอขาคอมมอนของแอลอีดี 7 สวนกับบอรด Arduino แบบขาตอขา (ขา คอมมอนของแอลอีดี 7 สวนทั้งสองหลักไมไดถูกตอเชื่อมกัน และใชหลักการควบคุมครั้งละ 1 หลัก โดยหลักที่กำลังพิจารณาอยูจะถูกกำหนดใหตำแหนงขาของบอรด Arduino ที่เชื่อมกับขาคอมมอน ของหลักดังกลาวมีสถานะเปน “LOW” และกำหนดรูปแบบการแสดงผลที่ตำแหนงขา a – f โดย กำหนดสถานะ “HIGH” สูขาบอรดที่ถูกเชื่อมตอกับแอลอีดีอีกสวนที่ไมถูกใชงาน และกำหนด ชวงเวลาการแสดงผล เมื่อครบกำหนดชวงเวลาการแสดงผลจะเปล่ียนโหมดการแสดงผลไปยังแอลอีดี อีกหลักที่ยังไมไดถูกพิจารณาโดยการกำหนดสถานะ “LOW” ที่ตำแหนงขาคอมมอนพรอมกำหนด รูปแบบการแสดงผลใหม และเปลี่ยนสถานะที่ขาคอมมอนของแอลอีดี 7 สวนที่พึ่งถูกแสดงผลเปน “HIGH” เพื่อปดการแสดงผลที่หลักดังกลาว และกำหนดชวงเวลาการแสดงผลเพื่อที่จะกลับไป แสดงผลที่ตำแหนง แรก จากหลักการขางตนสังเกตวาหากกำหนดชวงเวลาการแสดงผลของแตละหลักนานเกินไป พบวาเกิดการแสดงผลสลับกันระหวางแอลอีดีทั้ง 2 หลัก แตหากกำหนดชวงของการหนวงเวลาท่ี เหมาะสมคือเกิดการหนวงเวลาระหวางเปลี่ยนการแสดงผลไปหลักตอไป แตชวงเวลาดังกลาวเร็วเกนิ กวาที่สายตามนุษยจะสามารถแยกแยะการสลับตำแหนงได จึงเสมือนวามนุษยเห็นการแสดงผลทั้ง 2 หลักพรอมกัน (Adith, 2015)
166 โดยนอกเหนอื จากการนำแอลอีดี 7 สวน 2 ตัวมาตอใชง านใหอยูในรูปแบบสลบั การแสดงเอง แลว ในโปรแกรม Proteus มีแอลอีดี 7 สวนที่ตอใหทำงานแบบสลับกันอยูเชนกัน โดยสามารถ เลือกใชง านอปุ กรณด ังกลา วดว ยคำคน “7seg-mpx” ซง่ึ จะพบรายการอุปกรณจ ำนวนมาก รูปที่ 6.14 แอลอดี ี 7 สวนแบบคอมมอนแคโทดในโปรแกรม Proteus แบบแสดงผลสลับกนั ทม่ี า: ผเู ขยี น รูปที่ 6.14 แสดงตัวอยางแอลอีดี 7 สวนแบบคอมมอนแคโทดท่ีแสดงผลสลับกัน โดยจากรูป เปน แอลอีดี แบบ 2 หลักและ 4 หลกั รปู ที่ 6.15 รายการแอลอีดี 7 สว นแบบแสดงผลสลับกัน ทัง้ หมดในโปรแกรม Proteus ที่มา: ผูเขียน ตัวอยางที่ 6.4 โปรแกรมหลอดแอลอีดี 7 สว น 2 หลกั แบบสลับการแสดงผลโดยแสดงผลเปนตวั เลข 15 การทำงาน: หลอดแอลอีดี 7 สว นจะแสดงผลออกเปนเลข 15 วธิ ที ำ 1. สวนวงจรทดลอง
167 รปู ท่ี 6.16 วงจรทดลองหลอดแอลอีดี 7 สวนแบบคอมมอนแคโทด แบบ 2 หลกั แสดงผลสลับกนั โดยแสดงผลเปนตวั เลข 15 ท่ีมา: ผเู ขียน คำอธิบาย: ตอหลอดแอลอีดี 7 สวนเขากับพอรต D ของบอรด Arduino โดยตำแหนง a, b, c,…,g ของหลอดแอลอีดี 7 สวนทั้งสองหลอดถูกตอเขากับขาที่ 0 – 7 ตามลำดับ และตอขาคอมมอนของ หลักสิบ (ตวั ซาย) และขาคอมมอนของหลักหนว ย (ตวั ขวา เชือ่ มกับขา 9 และ 8 ของบอรด ตามลำดับ 2. สว นโปรแกรม int dg1 = 9; int dg2 = 8; int num[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; void setup() { DDRD = 0xFF; pinMode(dg1, OUTPUT); pinMode(dg2, OUTPUT); } void loop() { digitalWrite(dg1, LOW); digitalWrite(dg2,HIGH); PORTD = num[1]; delay(15); digitalWrite(dg1, HIGH); digitalWrite(dg2,LOW); PORTD = num[5]; delay(15); }
168 คำอธิบาย: ฟงกชัน Setup(): กำหนดใหพอรต D ทั้งหมดรวมถึงขา 8 และ 9 ทำหนาที่เปนเอาตพุต ฟงกชัน loop(): โปรแกรมแบงเปน 2 สวนโดยแตละสวนถูกแบงดวยฟงกชัน delay() สวน ที่ 1 จะกำหนดใหพอรต D แสดงเลข 1 ที่ขา 9 และสวนท่ี 2 จะกำหนดใหพอรต D แสดงเลข 5 ที่ขา 8 ซึ่งท้ัง 2 สวนนมี้ รี ะยะเวลาแสดงผลส้นั ทำใหสายตามนษุ ยไ มสามารถแบงแยกไดทัง้ จึงเห็นเสมือนวา ทง้ั สองตำแหนง มีการแสดงผลเปน เลข 15 พรอ มกนั รูปท่ี 6.17 ผลการทดลองหลอดแอลอดี ี 7 สว นแบบคอมมอนแคโทด 2 หลกั แสดงผลเปน ตัวเลข 15 ท่มี า: ผเู ขยี น หมายเหตุ: ผูอา นสามารถทดลองเปล่ยี นคำสงั่ ของพอรต D เพื่อเปลยี่ นรูปแบบการแสดงผลเปนตัวเลข อน่ื ๆ 3. การใชงานสวิตซสำหรับควบคุมการทำงานแอลอดี ี 7 สวน หัวขอนี้กลาวถึงการนำสวิตซมาใชเปนอินพุตสำหรับบอรด Arduino เพื่อกำหนดเงื่อนไข สำหรับควบคมุ แอลอดี ี 7 สวน ตวั อยางท่ี 6.5 โปรแกรมหลอดแอลอดี ี 7 ผา นการกดสวิตซ การทำงาน: หลอดแอลอีดี 7 สว นจะแสดงผลออกเปนเลข 0 – 9 โดยจะมกี ารเปลย่ี นแปลงคาผาน การกดสวติ ซ วธิ ที ำ
169 1. สวนวงจรทดลอง รูปท่ี 6.18 วงจรทดลองหลอดแอลอีดี 7 ผา นการกดสวติ ซ ท่ีมา: ผเู ขยี น คำอธิบาย: เชือ่ มตอหลอดแอลอีดี 7 สว นเขากับพอรต D ของบอรด Arduino โดยตำแหนง a, b, c,…,g ของหลอดแอลอีดี 7 สวนถูกตอ เขากับขาที่ 0 – 7 ตามลำดบั และเชื่อมตอสวิตซเ ขาท่ขี า 13 ของบอรด Arduino 2. สวนโปรแกรม int sw = 13; int count = 0; int pulse = 0; int num[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; void setup() { DDRD = 0xFF; pinMode(sw, INPUT); } void loop() { PORTD = num[count]; if(digitalRead(sw) == LOW){ pulse = 1; } if(pulse == 1 && digitalRead(sw) == HIGH){ count++; if(count == 10){ count = 0; }
170 pulse = 0; } } คำอธิบาย: ฟงกชัน setup(): กำหนดใหพอรต D ทั้งหมด ทำหนาที่เปนเอาตพุต และขา 13 ทำหนาที่ เปน อนิ พตุ เพอ่ื รับขอ มูลจากภายนอก (สวิตซ ฟง กชนั loop(): โปรแกรมนจ้ี ะแสดงการนับเลขทม่ี ีการแสดงผลผา นแอลอีดี 7 สวนผา นการ กดสวติ ซ โดยใชเ ทคนคิ การแกป ญหาการเกิดเบาซข องสัญญาณเขา ชวยดว ย 4. บทสรปุ แอลอีดี 7 สวนคือการนำหลอดแอลอีดีมาวางเรียงกันใหอยูในลักษณะที่คลายคลึงกับเลข 8 เพื่อใหสามารถแสดงผลออกมาเปนลักษณะของตัวเลข หรือตัวอักษรบางตัว โดยถูกแบงเปน 2 ประเภทคือคอมมอนแคโทด (Common Cathode) คือขารวมของแอลอีดีจะถูกตอลงกราวด และ หากตองการใหตำแหนงใดมีสถานะติด จะตองสงสถานะ “HIGH” ไปยังตำแหนงดังกลาว และคอม มอนแอโนด (Common Anode) คือขารวมของแอลอีดีจะถูกตอกับแรงดันขนาด 5 โวลต และหาก ตอ งการใหต ำแหนงใดมีสถานะติด จะตองสงสถานะ “LOW” ไปยังตำแหนงดงั กลาว เนอ่ื งจากขอ จำกดั จำนวนขาสำหรับการรับสง สัญญาณระหวา งบอรด Arduino Uno R3 และ อุปกรณภายนอก ดังนั้นการนำแอลอีดี 7 สวนจำนวน 2 ตัวมาเชื่อมตอกับบอรดโดยตรงเพื่อมาใช สำหรับการแสดงผลแบบ 2 หลักจึงไมส ามารถดำเนินการได อยางไรก็ตามสามารถลดจำนวนการใชงานขาของบอรด เพ่ือควบคมุ การใชงานแอลอดี ี 7 สว น ที่มากกวา 1 หลักไดโดยการตอใชงานขาของหลอดแอลอีดีแตละสวนรวมกัน และการควบคุมการนำ งานจะใชวิธีส่ังใหแอลอีดี 7 สวนแสดงผลคร้ังละ 1 หลกั ซงึ่ ควบคุมโดยการปลอยสัญญาณไปท่ีขาคอม มอนของแอลอดี ี 7 สวนแตล ะหลักท่ตี อแยกกัน
171 แบบฝกหัดทายบท บทที่ 6 1. ประโยชนข องแอลอดี ี 7 สวนคืออะไร 2. แอลอดี ี 7 สวนมีกี่ประเภท อะไรบา ง 3. เพื่อใหหลอดแอลอีดีแตละสวนสามารถติดได จำเปนตองใหขาคอมมอนของแอลอีดี 7 สวนแบบ คอมมอนแคโทดมสี ถานะเปน อยา งไร 4. หากนำแอลอีดี 7 สวนจำนวน 3 ตัวมาตอใชงานแบบตอรวมกันจะตองใชงานขาสัญญาณที่บอรด Arduino ทั้งหมดก่ีขา (พจิ ารณาสายขอ มลู เพยี ง 7 เสน ไมน ับจดุ ทศนิยม หรือจดุ องศา) 5. จงหาสถานะของสายสัญญาณแตละตำแหนงเพื่อใหแอลอีดี 7 สวนแบบคอมมอนแคโทดแสดง ผลลัพธเ ปนดงั รูป 6. กำหนดใหส ว น a แทนตำแหนงนัยสำคญั ตำ่ ท่ีสดุ และเรยี งไปจนถงึ สว น g ซง่ึ แทนตำแหนง นัยสำคัญ สงู ทสี่ ดุ จงคำนวณหาผลลพั ธจ ากขอ 5 ในรูปแบบเลขฐานสบิ หก 7. จากรูปขอ 5 หากเปลี่ยนเปนแอลอีดีแบบคอมมอนแอโนด จงคำนวณหาผลลัพธในรูปแบบ เลขฐานสบิ หก 8. จากตวั อยา งท่ี 6.5 จงปรบั โปรแกรมเปน การนับลงคร้งั ละ 1 จงั หวะผานการสัมผสั ปุม
172 เอกสารอา งองิ เดชฤทธิ์ มณีธรรม. (2559). คัมภีรการใชงาน ไมโครคอนโทรลเลอร Arduino. กรุงเทพฯ: ซีเอ็ด ยเู คช่นั . ทีมงานสมารทเลิรนนิ่ง. (2554). Advanced PIC Microcontroller in C : การประยุกตใชงาน PIC ขน้ั สูงดว ยภาษา C. กรงุ เทพฯ: สมารท เลิรนนิง่ . ประภาส พุมพวง. (2561). การเขียนและการประยุกตใชงานโปรแกรม Arduino. กรุงเทพฯ: ซีเอ็ด ยเู คชนั่ . วิลาศณิ ี วสิ ิทธก์ิ าศ วรพจน กรแกววฒั นกุล และ ชัยวฒั น ลิ้มพรจติ รวไิ ล.(2551). ทดลองและใชงาน. ไมโครคอนโทรลเลอร ATmega128 ดวยโปรแกรมภาษา C กับซอฟตแวร Wiring. กรงุ เทพฯ : อนิ โนเวตีฟ เอ็กพอริเมนต. สนธยา นงนชุ . (2560). การใชงาน ESP32 เบือ้ งตน. ชลบรุ ี: รานไอโอเอก็ ซฮอบ. Adith, J. B. (2015). Arduino by Example. Birmingham: Packt Publishing Ltd. Don, W. (2015). Arduino Electronics Blueprints. Birmingham: Packt Publishing Ltd. Tero, K. and Kimmo, K. (2011). Make: Arduino Bots and Gadgets. Canada: O’Reilly Media, Inc.
Search
Read the Text Version
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176
- 177
- 178
- 179
- 180
- 181
- 182
- 183
- 184
- 185
- 186
- 187
- 188
- 189
- 190
- 191
- 192
- 193
- 194
- 195
- 196
- 197
- 198
- 199
- 200
- 201
- 202
- 203
- 204
- 205
- 206
- 207
- 208
- 209
- 210
- 211
- 212
- 213
- 214
- 215
- 216
- 217
- 218
- 219
- 220
- 221
- 222
- 223
- 224
- 225
- 226
- 227
- 228
- 229
- 230
- 231
- 232
- 233
- 234
- 235
- 236
- 237
- 238
- 239
- 240
- 241
- 242
- 243
- 244
- 245
- 246
- 247
- 248
- 249
- 250
- 251
- 252
- 253
- 254
- 255
- 256
- 257
- 258
- 259
- 260
- 261
- 262
- 263
- 264
- 265
- 266
- 267
- 268
- 269
- 270
- 271
- 272
- 273
- 274
- 275
- 276
- 277
- 278
- 279
- 280
- 281
- 282
- 283
- 284
- 285
- 286
- 287
- 288
- 289
- 290
- 291
- 292
- 293
- 294
- 295
- 296
- 297
- 298
- 299
- 300
- 301
- 302
- 303
- 304
- 305
- 306
- 307
- 308
- 309
- 310
- 311
- 312
- 313
- 314
- 315
- 316
- 317
- 318
- 319
- 320
- 321
- 322
- 323
- 324
- 325
- 326
- 327
- 328
- 329
- 330
- 331
- 332
- 333
- 334
- 335
- 336
- 337
- 338
- 339
- 340
- 341
- 342
- 343
- 344
- 345
- 346
- 347
- 348
- 349
- 350
- 351
- 352
- 353
- 354
- 355
- 356
- 357
- 358
- 359
- 360
- 361
- 362
- 363
- 364
- 365
- 366
- 367
- 368
- 369
- 370
- 371
- 372
- 373
- 374
- 375
- 376
- 377
- 378
- 379
- 380
- 381
- 382
- 383
- 384
- 385
- 386
- 387
- 388
- 389
- 390
- 391
- 392
- 393
- 394
- 395
- 396
- 397
- 398
- 399
- 400
- 401
- 402
- 403
- 404
- 405
- 406
- 407
- 408
- 409
- 410
- 411
- 412
- 413
- 414
- 415
- 416
- 417
- 418
- 419
- 420
- 421
- 422
- 423
- 424
- 425
- 426
- 427
- 428
- 429
- 430
- 431
- 432
- 433
- 434
- 435
- 436
- 437
- 438
- 439
- 440
- 441
- 442
- 443
- 444
- 445
- 446
- 447
- 448
- 449
- 450
- 451
- 452
- 453
- 454
- 455
- 456
- 457
- 458
- 459
- 460
- 461
- 462
- 463
- 464
- 465
- 466
- 467
- 468
- 469
- 470
- 471
- 472
- 473
- 474
- 475
- 476
- 477
- 478
- 479
- 480
- 481
- 482
- 483
- 484
- 485
- 486
- 487
- 488
- 489
- 490
- 491
- 492
- 493
- 494
- 495
- 496
- 497
- 498
- 499
- 500
- 501
- 502
- 503
- 504
- 505
- 506
- 507
- 508
- 509
- 510
- 511
- 512
- 1 - 50
- 51 - 100
- 101 - 150
- 151 - 200
- 201 - 250
- 251 - 300
- 301 - 350
- 351 - 400
- 401 - 450
- 451 - 500
- 501 - 512
Pages: