Điều khiển led sáng tắt

Một phần của tài liệu đề tài module ethernet trên vi điều khiển pic18f67j60 và ứng dụng trong đo lường, điều khiển ( phần mềm trên mplab ) (Trang 53 - 56)

CHƯƠNG 5 TCP/IP STACK

5.5. DEMO MODULE

5.5.1. Điều khiển led sáng tắt

- Gõ đường link trên trình duyệt http:/192.168.1.2/forms.htm.

- Chọn On/Off trong ô lựa chọn để đặt trạng thái cho từng led rồi ấn nút save để lưu trạng thái cho các led.

Hình 27: Điều khiển LED và viết lên LCD.

Để thực hiện được việc này ta sử dụng phương pháp GET:

- Phương pháp Get gán dữ liệu vào phần cuối của URL. Dữ liệu được gán sau dấu “?” trên thanh địa chỉ. Dữ liệu được gửi qua phương pháp GET tự động được giải mã và lưu trong biến curHTTP.data (curHTTP là biến cấu trúc để lưu trạng thái hiện tại của kết nối HTTP, một số biến trong cấu trúc curHTTP như curHTTP.byteCount, curHTTP. isAuthorized, biến mảng curHTTP.data…), biến curHTTP.data được giới hạn 100bytes. Khi biến curHTTP.data đầy thì dữ liệu sẽ được lưu vào trong bộ nhớ.

Code trong file forms.htm

Hình 28: Code trong file forms.htm

- Giả sử ta kick vào led 1 và 3. Một chuỗi sau sẽ được gửi đến server: GET /leds.htm?led1=1&led3=1 HTTP/1.1

- HTTP2 web server sẽ phân tích yêu cầu này và lưu dưới dạng một chuỗi trong biến curHTTP.data : "led1\01\0led3\01\0\0"

- Web server sẽ gọi hàm HTTPExecuteGet để xử lý đầu vào này. Mục đích của nó là phân tích những dữ liệu nhận được từ các tham số URL.

Code:

HTTP_IO_RESULT HTTPExecuteGet(void) {

BYTE *ptr;

BYTE filename[20]; // Load the file name

// Make sure BYTE filename[] above is large enough for your longest name MPFSGetFilename(curHTTP.file, filename, 20);

// If its the forms.htm page

if(!memcmppgm2ram(filename, "forms.htm", 9)) {

// Seek out each of the four LED strings, and if it exists set the LED states

ptr = HTTPGetROMArg(curHTTP.data, (ROM BYTE *)"led4"); if(ptr)

LED4_IO = (*ptr == '1');

ptr = HTTPGetROMArg(curHTTP.data, (ROM BYTE *)"led3"); if(ptr)

LED3_IO = (*ptr == '1');

ptr = HTTPGetROMArg(curHTTP.data, (ROM BYTE *)"led2"); if(ptr)

LED2_IO = (*ptr == '1');

ptr = HTTPGetROMArg(curHTTP.data, (ROM BYTE *)"led1"); if(ptr)

LED1_IO = (*ptr == '1'); }

return HTTP_IO_DONE; }

Đầu tiên, hàm MPFSGetFilename sẽ được gọi để kiểm tra trang forms.htm được truy cập. Hàm MPFSGetFilename sẽ đọc tên file truy cập hiện tại và lưu vào trong biến filename. Sau đó ta sử dụng memcmppgm2ram(filename, "forms.htm", 9) để so sánh xem biến filename có giá trị là "forms.htm" hay khơng. Nếu giống nhau thì hàm sẽ trả lại giá trị 0.

Hàm HTTPGetROMArg sẽ tìm kiếm trong mảng curHTTP.data để tìm giá trị của đối số được đưa ra sau khi thực hiện phương pháp GET, cụ thể trong đoạn code này là các led1, led2, led3, led4. Hàm này sẽ trả lại một con trỏ, trỏ đến giá trị của đối số trong mảng curHTTP.data. Sau đó sẽ gán giá trị thích hợp cho led tương ứng.

Một phần của tài liệu đề tài module ethernet trên vi điều khiển pic18f67j60 và ứng dụng trong đo lường, điều khiển ( phần mềm trên mplab ) (Trang 53 - 56)

Tải bản đầy đủ (DOC)

(66 trang)
w