Phần mềm 1 (software 1 single hop SW1-SH)

Một phần của tài liệu Đồ án tốt nghiệp "Mô hình mạng cảm nhận không dây - WSN" (Trang 28 - 30)

Thuật toán

Nút mạng thực hiện việc cảm nhận, số hóa và truyền tín hiệu nhiệt độđã số hóa đến nút gốc. Theo cấu trúc phần cứng của CC1010, để tiết kiệm nguồn nuôi, sau mỗi lần phát tín hiệu, ta sẽ đặt nút mạng vào trạng thái Hibernate (ngủ đông). Sau đó lại cho tiếp tục phát. Chu trình hoạt động của nút mạng theo một vòng lặp như sau:

- Phát tín hiệu số hoá của nhiệt độ lấy từ chân AD1.

- Đợi một khoảng thời gian ngẫu nhiên từ 0 đến 250* 8ms (trong lúc này tiến hành ngủđông cho nút mạng).

Hình 4.3: Thuật toán cho nút truyền trường hợp single hop

Chương trình

Sử dụng thư viện hàm nhà sản xuất cung cấp, để có thể đọc và truyền thông tin nhiệt độ ta sử dụng các hàm và đoạn chương trình như sau:

- Đưa lối ra IC LM 61 tới chân AD1, ta dùng khai báo: // ADC setup halConfigADC(ADC_MODE_SINGLE | ADC_REFERENCE_INTERNAL_1_25, CC1010EB_CLKFREQ, 0); ADC_SELECT_INPUT(ADC_INPUT_AD1); ADC_POWER(TRUE); - Địa chỉ được định: #define TBC_MY_SPP_ADDRESS 1 nodeIDs[0] = TBC_MY_SPP_ADDRESS; - Hàm truyền nhiệt được viết như sau:

void tbcTransmit (void) { word xdata temp;

// Khoi dong ADC

ADC_SAMPLE_SINGLE();

temp = ADC_GET_SAMPLE_10BIT(); // Cap nhat bang

txDataBuffer[TBC_TEMP_OFFSET] = (temp >> 8) & 0xFF; txDataBuffer[TBC_TEMP_OFFSET + 1] = temp & 0xFF; nodeTemps[0] = temp;

nodeLastT[0] = (int) sppGetTime(); // Truyen thong tin

sppSend(&TXI);

do { /*nothing*/ } while (sppStatus() != SPP_IDLE_MODE); } // tbcTransmit

- Hàm đợi ngẫu nhiên:

// doi 1 khoang ngau nhien (0 to 255*8=2040) void tbcWaitRandom (void) {

byte xdata time; byte xdata n; time = rand();

for (n = 0; n < waitMultiplier; n++) { halWait (time, CC1010EB_CLKFREQ); }

} // tbcWaitRandom

- Đoạn lặp trong chương trình thể hiện thuật toán: while (TRUE) {

tbcTransmit(); tbcWaitRandom(); }

Một phần của tài liệu Đồ án tốt nghiệp "Mô hình mạng cảm nhận không dây - WSN" (Trang 28 - 30)