code เก่าเป็น code ที่ได้มาจากตัวอย่าง ของ CCS ครับคือ C:\Program Files\PICC\Examples\ EX_X10.c
ซึ่งจะมีอยู่ในตัวอย่างของ CCS ซึ่งจะต้องใช้กับ X10 โมดูล TW523
เอามาดัดแลงใหม่เป็น EX_X10o.c เพื่อให้ใช้กับ X10LABของเรา ทำให้อ่านยากนิดนึง
ส่วนโค๊ดตัวใหม่เขียนตามความเข้าใจ ที่เกิดขึ้น มาเรียบเรียงใหม่ โดยสามารถให้ใช้กับ X10-Pro รุ่นใหม่ๆ ได้
อย่างเช่นของ บางบริษัท ซึ่งเป็นแบบ bidirection
จากโค๊ดที่คุณให้มา เป็นการ เปิด/ปิดตัวเองครับ X10OUT เป็นขาที่ควมคุม Reley เรากำหนดไว้เป็น RA2
#define X10OUT PIN_A2
fn ที่สำคัญจะอยู่ใน UARTReady(); ครับ ในส่วน
...
if(len==3) //House,Function
{
printf("Sending...%c%02d\r\n",RxHouse,RxFn);
X10WriteFn(RxHouse,RxFn);
if(RxFn==1||RxFn==2)
X10FuncExe(RxHouse,RxNo,RxFn);
}
if(len==6) //House,Number,Function
{
printf("Sending...%c%02d-%02d\r\n",RxHouse,RxNo,RxFn);
X10Write(RxHouse,RxNo,RxFn);
if(RxFn==3||RxFn==4) //@Test Self Address
X10FuncExe(RxHouse,RxNo,RxFn);
}
...
ตัวแปรที่สำคัญ RxHouse,RxNo,RxFn
RxHouse เก็บ House เป็นตัวักษรครับ เช่น 'A','B'
RxNo เป็น int เป็น Keycode หรือ number code
RxFn เป็น int เป็น Function code
fn ที่สำคัญ
http://www.thaimicrotron.com/X10/X10-MainPage.htm#FnCodevoid X10Write(char House,int Number,int Fn);
เช่นต้องการ ส่งคำสั่งบน ac line A02 ON
X10Write('A',02,X10FN_STATUS_ON);
void X10WriteFn(char House,int Fn); เป็น fn ที่ไม่ต้องระบุ keycode ,numbercod เช่นพวก ALL ทั้งหลาย Dim ,Bright
จะมีอยู่ 5 ฟังก์ชั่นเท่านั้นที่ใช้ได้
1). All Units Off
2). All Units On
5). Dim
6). Bright
7). All Lights Off
เช่น All Units Off คืออุปกรณ์ ใน House A ดับหมด
X10WriteFn('A',X10FN_ALL_UN_OFF);
เช่น All Units On คืออุปกรณ์ ใน House A ประเภทหลอดไฟ ติดหมด
X10WriteFn('A',X10FN_ALL_UN_ON);
X10FuncExe(); เป็น fn ที่ตรวจสอบว่า ตรงกับแอดเดรสตัวเองหรือเปล่า