ข้อที่ 1 สร้างวงจรขยายเสียง (10 คะแนน)
ข้อนี้คงไม่ต้องเฉลยเพราะ เป็นการลงมือทำครับ
ข้อที่ 2 สร้างระบบ User Interface ผ่านเมนู (10 คะแนน)
2. สร้างระบบติดต่อกับผู้ใช้ผ่านการเลื่อนเมนู โดยใช้ตัวต้านทานปรับค่าได้ ZX-POTH เป็นตัวเลื่อน เมนู และใช้สวิตช์ เป็นตัวยืนยันการทำงานเพื่อกระตุ้นรีเลย์ให้ติดดับตามต้องการ (10 คะแนน)
หมายเหตุ การเชื่อมต่อวงจรไม่จำเป็นต้องยึดตำแหน่งขาพอร์ตตามที่ระบุในโจทย์
2.1 สร้างข้อความที่หน้าจอด้วยขนาดตัวอักษร 2X แสดงข้อความ Relay 1 ,Relay 2, Relay 3 และ Relay 4 ที่แถว 0,1,2,3 ดังรูป โดยใช้สีตัวอักษรสีดำพื้นหลังสีเหลือง และที่ตัวอักษรคอลัมน์ที่ 8 ของแต่ละบรรทัดแสดงข้อความ OFF สีดำบนพื้นหลังสีเขียว ( 2 คะแนน)
2.2 เมื่อเลื่อนปรับตัวต้านทานปรับค่าได้ พื้นหลังของข้อความ Relay 1 ถึง Relay 4 เปลี่ยนเป็นสีแดงตามค่าของตัวต้านทานปรับค่าได้ที่เลื่อนไป (ปรับซ้ายสุดอยู่ที่ Relay 1 ปรับขวาสุดอยู่ที่ Relay 4) (2 คะแนน)
2.3 เมื่อเลื่อนตัวต้านทานปรับค่าได้ไปยังตำแหน่ง Relay 1 แล้วกดสวิตช์ข้อความที่บรรทัด Relay 1 เปลี่ยนจาก OFF เป็น ON และพื้นหลังเปลี่ยนจากสีเขียวเป็นสีฟ้าถ้ากดสวิตช์อีกครั้งข้อความจะต้องเปลี่ยนกลับเป็น OFF และพื้นหลังเปลี่ยนเป็นสีเขียว เมื่อเลื่อนเมนูไปที่ตำแหน่ง Relay 2, Relay 3 และ Relay 4 ก็ให้ผลการทำงานแบบเดียวกัน (3 คะแนน)
2.4 เมื่อกดสวิตช์ในข้อ 2.3 แล้ว ผลลัพธ์ที่ได้ไปสั่งให้รีเลย์ที่บอร์ด Relay4i ติดดับตามตำแหน่งที่ต้องการได้ (3 คะแนน)
การทำงานของโปรแกรม
ส่วนที่ 1 สร้างข้อความตัวอักษรต่าง ๆ ก็จะอยู่ในฟังก์ชัน Show_menu() และฟังก์ชั่น Show_off
ส่วนที่ 2 เมื่อเลื่อนปรับค่าความต้านทาน เนื่องจากมีเมนูอยู่ 4 เมนู จึงต้องเขียนเงื่อนไข IF ขึ้น 4 ช่วงด้วยกัน ดังนั้
if(menu < 255)
else if (menu > 255&&menu < 512)
else if (menu > 512&&menu < 768)
else if (menu > 768)
เมื่ออยู่ในเงื่อนไขใดเงื่อนไขหนึ่ง ก็แสดงการทำงานของหน้าจอตามเมนูนั้น ๆ
ส่วนที่ 3 คือการกดสวิตช์แล้วให้รีเลย์ติดดับในตำแหน่งที่ต้องการ
ถ้าต้องการให้ติดหรือดับเพียงอย่างเดียว เราอาจจะสั่งขับด้วยลอจิก "0" หรือ "1" ไปยังขาพอร์ตตรง ๆ ได้ แต่ถ้ามีการสั่งให้ติดและดับสลับกัน ต้องมีตัวแปร R1-R4 ทำหน้าที่ระบุการติดและดับของ รีเลย์
โปรแกรมทั้งหมดมีดังนี้
#include "<"unicon .h">"
int menu=1024,x=0,R1=0,R2=0,R3=0,R4=0;
void Show_menu(){
setTextBackgroundColor(GLCD_YELLOW);
glcd(0,0,"Relay 1");
glcd(1,0,"Relay 2");
glcd(2,0,"Relay 3");
glcd(3,0,"Relay 4");
}
void Show_off(){
setTextBackgroundColor(GLCD_SKY);
glcd(0,8,"OFF");
glcd(1,8,"OFF");
glcd(2,8,"OFF");
glcd(3,8,"OFF");
}
void setup()
{
setTextColor(GLCD_BLACK); // Set text color to red
setTextSize(2);
Show_menu();
Show_off();
out(19,0);
out(20,0);
out(21,0);
out(22,0);
}
void loop()
{
if (!in(7)){
sleep(100);
while(!in(7));
if(x==1){
if(R1==0){
out(19,1);
R1=1;
setTextBackgroundColor(GLCD_GREEN);
glcd(0,8,"ON ");
}
else {
out(19,0);
R1=0;
setTextBackgroundColor(GLCD_SKY);
glcd(0,8,"OFF");
}
}
else if (x==2){
if(R2==0){
out(20,1);
R2=1;
setTextBackgroundColor(GLCD_GREEN);
glcd(1,8,"ON ");
}
else {
out(20,0);
R2=0;
setTextBackgroundColor(GLCD_SKY);
glcd(1,8,"OFF");
}
}
else if (x==3){
if(R3==0){
out(21,1);
R3=1;
setTextBackgroundColor(GLCD_GREEN);
glcd(2,8,"ON ");
}
else {
out(21,0);
R3=0;
setTextBackgroundColor(GLCD_SKY);
glcd(2,8,"OFF");
}
}
else if (x==4){
if(R4==0){
out(22,1);
R4=1;
setTextBackgroundColor(GLCD_GREEN);
glcd(3,8,"ON ");
}
else {
out(22,0);
R4=0;
setTextBackgroundColor(GLCD_SKY);
glcd(3,8,"OFF");
}
}
}
if (menu!=analog(0)){
menu=analog(0);
if(menu<255){
if(x!=1){
Show_menu();
setTextBackgroundColor(GLCD_RED);
glcd(0,0,"Relay 1");
x=1;
}
}
else if (menu>255 &&menu<512){
if(x!=2){
Show_menu();
setTextBackgroundColor(GLCD_RED);
glcd(1,0,"Relay 2");
x=2;
}
}
else if (menu>512&&menu<768){
if(x!=3){
Show_menu();
setTextBackgroundColor(GLCD_RED);
glcd(2,0,"Relay 3");
x=3;
}
}
else if (menu>768 ){
if(x!=4){
Show_menu();
setTextBackgroundColor(GLCD_RED);
glcd(3,0,"Relay 4");
x=4;
}
}
}
}
ไม่มีความคิดเห็น:
แสดงความคิดเห็น