1. Trang chủ
  2. » Luận Văn - Báo Cáo

Nghiên cứu thiết kế chế tạo thiết bị quản lý giảng dạy khoa kỹ thuật ô tô trên mô hình động cơ

146 3 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

ỦY BAN NHÂN DÂN THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG CAO ĐẲNG GIAO THÔNG VẬN TẢI - - BÁO CÁO TỔNG HỢP KẾT QUẢ THỰC HIỆN NHIỆM VỤ NGHIÊN CỨU THIẾT KẾ CHẾ TẠO THIẾT BỊ QUẢN LÝ GIẢNG DẠY KHOA KỸ THUẬT Ơ TƠ TRÊN MƠ HÌNH ĐỘNG CƠ Năm 2022 ỦY BAN NHÂN DÂN THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG CAO ĐẲNG GIAO THƠNG VẬN TẢI - - BÁO CÁO TỔNG HỢP KẾT QUẢ THỰC HIỆN NHIỆM VỤ NGHIÊN CỨU THIẾT KẾ CHẾ TẠO THIẾT BỊ QUẢN LÝ GIẢNG DẠY KHOA KỸ THUẬT Ô TÔ TRÊN MƠ HÌNH ĐỘNG CƠ Chủ biên: ThS Phan Tiến Vương Thành viên: ThS Nguyễn Thế Giơi KS Tô Diệp Khanh ThS Châu Văn Khánh ThS Đoàn Văn Hai Năm 2022 Lời giới thiệu LỜI GIỚI THIỆU Trong xu hội nhập nay, công nghiệp Việt Nam đứng trước nhiều khó khăn, thử thách hội đầy tiềm Khi giới bắt đầu sử dụng ô tô phương tiện lại thông thường cịn dùng xe gắn máy làm phương tiện di chuyển chủ yếu, công nghệ sản xuất ô tô giới lên tới đỉnh cao bắt đầu sửa chữa lắp ráp Bên cạnh thị trường tơ Việt Nam thị trường đầy tiềm theo nhận định nhiều hãng sản xuất ô tô giới, nay, khai thác mức độ buôn bán phụ tùng, lắp ráp bảo dưỡng sửa chữa Cách mạng công nghiệp sử dụng lượng nước nước để giới hóa sản xuất Cuộc cách mạng lần thứ hai diễn nhờ ứng dụng điện để sản xuất hàng loạt Cuộc cách mạng lần thứ ba sử dụng điện tử công nghệ thông tin để tự động hóa sản xuất Bây giờ, Cách mạng Công nghiệp lần thứ tư nảy nở từ cách mạng lần ba, kết hợp cơng nghệ lại với nhau, làm mờ ranh giới vật lý, kỹ thuật số sinh học Ngành công nghiệp giới, qua trình biến động thay đổi lâu dài, nhìn chung ln đặt mục tiêu cải tiến phát triển lên mức cao Trong xu đó, việc áp dụng khoa học cơng nghệ vào sản xuất, nghiên cứu, phát triển ưu tiên hàng đầu Vì với đề tài “Nghiên cứu thiết kế chế tạo thiết bị quản lý giảng dạy khoa kỹ thuật ô tô mô hình động cơ” ứng dụng việc quản lý giảng dạy trường cao đẳng Giao thơng Vận tải khoa Kỹ thuật tơ Nhóm tác giả mong bước tiếp cận với khoa học đại mà cụ thể mảng lập trình IOT Nhóm tác giả xin gửi lời cảm ơn chân thành đến tập thể khoa Kỹ thuật ô tơ Ban Giám hiệu trường tạo điều kiện tốt để nhóm tác giả hồn thành đề tài Thành phố Hồ Chí Minh, ngày tháng năm 2022 Tham gia nghiên cứu: 1.ThS Phan Tiến Vương 2.ThS Nguyễn Thế Giới 3.KS Tô Diệp Khanh Đề tài nghiên cứu khoa học i Lời giới thiệu 4.ThS Châu Văn Khánh 5.ThS Đoàn Văn Hai Đề tài nghiên cứu khoa học ii Mục lục MỤC LỤC Trang LỜI GIỚI THIỆU I MỤC LỤC III DANH MỤC CHỮ VIẾT TẮT V DANH MỤC CÁC BẢNG BIỂU VI DANH MỤC HÌNH VII CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI 1.1 Tổng quan chung lĩnh vực nghiên cứu 1.2 Các kết nghiên cứu nước công bố 1.3 Mục đích đề tài 1.4 Phương pháp nghiên cứu 1.5 Ý nghĩa khoa học tính thực tiễn đề tài 1.6 Giới hạn đề tài 1.7 Kế hoạch thực CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 2.1 Nguyên lý hoạt động hệ thống điều khiển động phun xăng điện tử 2.1.1 Lịch sử hệ thống phun xăng điện tử 2.1.2 Hệ thống phun xăng điện tử động Toyota 11 2.2 Cảm biến chấp hành động phun xăng điện tử 19 2.2.1 Mạch điện nguồn cung cấp cho ECM 19 2.2.2 Bộ đo gió 20 2.2.3 Cảm biến vị trí trục khuỷu cảm biến vị trí trục cam 23 2.2.4 Cảm biến vị trí bàn đạp ga 26 2.2.5 Cảm biến vị trí bướm ga 28 2.2.6 Cảm biến nhiệt độ nước làm mát 29 2.2.7 Cảm biến nhiệt độ khơng khí nạp 30 2.2.8 Hệ thống cung cấp nhiên liệu 31 2.2.9 Hệ thống điều khiển kim phun nhiên liệu 34 2.2.10 Hệ thống đánh lửa trực tiếp 34 Đề tài nghiên cứu khoa học iii Mục lục CHƯƠNG 3: CHẾ TẠO THIẾT BỊ QUẢN LÝ MƠ HÌNH ĐỘNG CƠ 36 3.1 Thuật toán điều khiển thiết bị quản lý mơ hình động 36 3.1.1 Thuật toán điều khiển chung 36 3.1.2 Đăng ký hoạt động tên miền máy chủ 37 3.1.3 Xây dựng sở liệu 39 3.1.4 Thiết kế trang mạng 44 3.2 Thiết kế bo mạch điều khiển 53 3.2.1 Bo mạch giao tiếp mạng không dây 53 3.2.2 Bo mạch điều khiển 55 3.2.3 Màn hình HMI 60 3.2.4 Lập trình điều khiển thiết bị 69 3.2.5 Thiết kế bảng điều khiển mơ hình 73 3.2.6 Thi cơng lắp đặt mơ hình 75 CHƯƠNG 4: THỰC NGHIỆM VÀ ĐÁNH GIÁ 77 4.1 Thực nghiệm 77 4.1.1 Bài tập số 77 4.1.2 Bài tập số 78 4.1.3 Bài tập số 79 4.1.4 Bài tập số 80 4.1.5 Bài tập số 81 4.1.6 Bài tập số 83 4.1.7 Bài tập số 84 4.2 Đánh giá 85 CHƯƠNG 5: KẾT LUẬN VÀ ĐỀ NGHỊ 86 5.1 Kết luận 86 5.2 Đề nghị 86 TÀI LIỆU THAM KHẢO 87 PHỤ LỤC 88 Đề tài nghiên cứu khoa học iv Danh mục chữ viết tắt DANH MỤC CHỮ VIẾT TẮT DNS Hệ thống phân giải tên miền EAS Hệ thống đánh lửa sớm ECU Bộ điều khiển điện tử EGR Van tuần hồng khí thải ETCS-I Hệ thống điều khiển bướm ga thông minh EVAP Hệ thống thu hồi xăng DOHC Động trục cam đôi TDC Điểm chết VVT-i Hệ thống van biến thiên thông minh IoT Internet vạn vật HMI Thiết bị giao tiếp người thiết bị máy móc Website Trang mạng Video Phim Đề tài nghiên cứu khoa học v Danh mục bảng biểu DANH MỤC CÁC BẢNG BIỂU Trang Bảng 2.1: Thông số kỹ thuật động 2AZ-FE 12 Bảng 2.2: Thông số hệ thống phun xăng L-SFI động Toyota 2AZ-FE 19 Bảng 2.3: Thông số kỹ thuật cảm biến khối lượng khí nạp động Toyota 2AZ-FE 23 Bảng 2.4: Thông số kỹ thuật cảm biến vị trí trục khuỷu, cảm biến vị trí trục cam động Toyota 2AZ-FE 25 Bảng 2.5: Thông số kỹ thuật cảm biến vị trí bàn đạp ga động Toyota 2AZ-FE 27 Bảng 2.6: Thông số kỹ thuật cảm biến vị trí bướm ga động Toyota 2AZFE 28 Bảng 2.7: Thông số kỹ thuật cảm biến nhiệt độ nước làm mát động Toyota 2AZ-FE 30 Bảng 2.8: Thông số kỹ thuật cảm biến nhiệt độ không khí nạp động Toyota 2AZ-FE 31 Bảng 3.1: Thông số kỹ thuật bo mạch ESP8266 NodeMCU Lua CP2102 55 Bảng 3.2: Linh kiện sử dụng bo mạch điều khiển 58 Bảng 3.3: Điều khiển chân hộp ECU bo mach điều khiển 73 Đề tài nghiên cứu khoa học vi Danh mục hình DANH MỤC HÌNH Trang Hình 1.1: Internet kết nối vạn vật Hình 2.1: Hệ thống phun xăng kiểu D-Jetronic Hình 2.2: Hệ thống phun xăng K-Jetronic Hình 2.3: Hệ thống phun xăng KE-Jetronic Hình 2.4: Hệ thống phun xăng L-Jetronic Hình 2.5: Hệ thống phun xăng LH-Jetronic Hình 2.6: Hệ thống phun xăng mono-Jetronic 10 Hình 2.7: Hệ thống phun xăng motronic-ME 11 Hình 2.8: Động Toyota 2AZ-FE 12 Hình 2.9: Thân máy xy lanh động 2AZ-FE 13 Hình 2.10: Pít tơng động 2AZ-FE 14 Hình 2.11: Cấu tạo truyền sơ đồ lực khí thể 14 Hình 2.12: Trục khuỷu cân động động 2AZ-FE 15 Hình 2.13: Cấu tạo nắp máy động 2AZ-FE 15 Hình 2.14: Cơ cấu dẫn động trục cam động Toyota 2AZ-FE 16 Hình 2.15: Hệ thống bôi trơn động Toyota 2AZ-FE 16 Hình 2.16: Hệ thống làm mát động Toyota 2AZ-FE 17 Hình 2.17: Sơ đồ hệ thống phun xăng L-SFI đơng Toyota 2AZ-FE 18 Hình 2.18: Mạch cấp nguồn nhớ ECM động Toyota 2AZ-FE 19 Hình 2.19: Mạch cấp nguồn ECM động Toyota 2AZ-FE 20 Hình 2.20: Cấu tạo cảm biến khối lượng khơng khí nạp động Toyota 2AZ-FE 21 Hình 2.21: Nguyên lý hoạt động cảm biến khối lượng khơng khí nạp động Toyota 2AZ-FE 21 Hình 2.22: Vị trí cảm biến khối lượng khơng khí nạp động Toyota 2AZFE 22 Hình 2.23: Sơ đồ mạch điện cảm biến khối lượng không khí nạp động Toyota 2AZ-FE 22 Đề tài nghiên cứu khoa học vii Danh mục hình Hình 2.24: Nguyên lý hoạt động cảm biến điện từ 23 Hình 2.25: Vị trí xung tín hiệu cảm biến vị trí trục khuỷu động Toyota 2AZ-FE 24 Hình 2.26: Vị trí xung tín hiệu cảm biến vị trí trục trục cam động Toyota 2AZ-FE 24 Hình 2.27: Sơ đồ mạch điện cảm biến vị trí trục cam cảm biến vị trí trục khuỷu động Toyota 2AZ-FE 25 Hình 2.28: Dạng xung tín hiệu cảm biến vị trí trục khuỷu cảm biến vị trục cam động Toyota 2AZ-FE tốc độ cầm chừng 26 Hình 2.29: Cấu tạo nguyên lý hoạt động cảm biến vị trí bàn đạp ga động Toyota 2AZ-FE 26 Hình 2.30: Sơ đồ mạch điện cảm biến vị trí bàn đạp ga động Toyota 2AZ-FE 27 Hình 2.31: Cấu tạo nguyên lý hoạt động cảm biến vị trí bướm ga động Toyota 2AZ-FE 28 Hình 2.32: Sơ đồ mạch điện cảm biến vị trí bàn đạp ga 29 Hình 2.33: Sơ đồ mạch điện cảm biến nhiệt độ nước làm mát động Toyota 2AZ-FE 29 Hình 2.34: Vị trí cảm biến nhiệt độ khơng khí nạp động Toyota 2AZ-FE 30 Hình 2.35: Sơ đồ mạch điện cảm biến nhiệt động khơng khí nạp động Toyota 2AZ-FE 31 Hình 2.36: Sơ đồ hệ thống cung cấp nhiên liệu động Toyota 2AZ-FE 32 Hình 2.37: Cấu tạo bơm nhiên liệu động Toyota 2AZ-FE 32 Hình 2.38: Sơ đồ mạch điện hệ thống cung cấp nhiên liệu động co Toyota 2AZ-FE 33 Hình 2.39: Sơ đồ mạch điện hệ thống điều khiển kim phun động Toyota 2AZ-FE 34 Hình 2.40: Sơ đồ mạch điện hệ thống đánh lửa độn Toyota 2AZ-FE 35 Hình 3.1: Thuật toán điều khiển chung 36 Đề tài nghiên cứu khoa học viii Phụ lục mssv = myNex.readStr("loginbt1.passtxt.txt"); } return; } //// lấy tên sv void tensvbt2() { myNex.begin(115200); myNex.NextionListen(); mssv = myNex.readStr("loginbt2.passtxt.txt"); if(mssv.equals("ERROR") == false){ // ERROR is the return value if the code fails to read the new value lastTextsv = mssv; } else if(mssv.equals("ERROR") == true){ mssv = lastTextsv; mssv = myNex.readStr("loginbt2.passtxt.txt"); } return; } //// lấy tên sv void tensvbt3() { myNex.begin(115200); myNex.NextionListen(); mssv = myNex.readStr("loginbt3.passtxt.txt"); if(mssv.equals("ERROR") == false){ // ERROR is the return value if the code fails to read the new value Đề tài nghiên cứu khoa học 118 Phụ lục lastTextsv = mssv; } else if(mssv.equals("ERROR") == true){ mssv = lastText; mssv = myNex.readStr("loginbt3.passtxt.txt"); } return; } //// lấy tên sv void tensvbt4() { myNex.begin(115200); myNex.NextionListen(); mssv = myNex.readStr("loginbt4.passtxt.txt"); if(mssv.equals("ERROR") == false){ // ERROR is the return value if the code fails to read the new value lastTextsv = mssv; } else if(mssv.equals("ERROR") == true){ mssv = lastTextsv; mssv = myNex.readStr("loginbt4.passtxt.txt"); } return; } //// lấy tên sv void tensvbt5() Đề tài nghiên cứu khoa học 119 Phụ lục { myNex.begin(115200); myNex.NextionListen(); mssv = myNex.readStr("loginbt5.passtxt.txt"); if(mssv.equals("ERROR") == false){ // ERROR is the return value if the code fails to read the new value lastTextsv = mssv; } else if(mssv.equals("ERROR") == true){ mssv = lastTextsv; mssv = myNex.readStr("loginbt5.passtxt.txt"); } return; } //// lấy tên sv void tensvbt6() { myNex.begin(115200); myNex.NextionListen(); mssv = myNex.readStr("loginbt6.passtxt.txt"); if(mssv.equals("ERROR") == false){ // ERROR is the return value if the code fails to read the new value lastTextsv = mssv; } else if(mssv.equals("ERROR") == true){ mssv = lastTextsv; mssv = myNex.readStr("loginbt6.passtxt.txt"); Đề tài nghiên cứu khoa học 120 Phụ lục } return; } //// lấy tên sv void tensvbt7() { myNex.begin(115200); myNex.NextionListen(); mssv = myNex.readStr("loginbt7.passtxt.txt"); if(mssv.equals("ERROR") == false){ // ERROR is the return value if the code fails to read the new value lastTextsv = mssv; } else if(mssv.equals("ERROR") == true){ mssv = lastTextsv; mssv = myNex.readStr("loginbt7.passtxt.txt"); } return; } //// lấy tên sv void tensvbt8() { myNex.begin(115200); myNex.NextionListen(); mssv = myNex.readStr("loginbt8.passtxt.txt"); if(mssv.equals("ERROR") == false){ // ERROR is the return value if the code fails to read the new value Đề tài nghiên cứu khoa học 121 Phụ lục lastTextsv = mssv; } else if(mssv.equals("ERROR") == true){ mssv = lastTextsv; mssv = myNex.readStr("loginbt8.passtxt.txt"); } return; } //// lấy tên sv void tensvbt9() { myNex.begin(115200); myNex.NextionListen(); mssv = myNex.readStr("loginbt9.passtxt.txt"); if(mssv.equals("ERROR") == false){ // ERROR is the return value if the code fails to read the new value lastTextsv = mssv; } else if(mssv.equals("ERROR") == true){ mssv = lastTextsv; mssv = myNex.readStr("loginbt9.passtxt.txt"); } return; } //// lấy tên sv void tensvbt10() Đề tài nghiên cứu khoa học 122 Phụ lục { myNex.begin(115200); myNex.NextionListen(); mssv = myNex.readStr("loginbt10.passtxt.txt"); if(mssv.equals("ERROR") == false){ // ERROR is the return value if the code fails to read the new value lastTextsv = mssv; } else if(mssv.equals("ERROR") == true){ mssv = lastTextsv; mssv = myNex.readStr("loginbt10.passtxt.txt"); } return; } //// lấy tên sv void tensvbt11() { myNex.begin(115200); myNex.NextionListen(); mssv = myNex.readStr("loginbt11.passtxt.txt"); if(mssv.equals("ERROR") == false){ // ERROR is the return value if the code fails to read the new value lastTextsv = mssv; } else if(mssv.equals("ERROR") == true){ mssv = lastTextsv; mssv = myNex.readStr("loginbt11.passtxt.txt"); Đề tài nghiên cứu khoa học 123 Phụ lục } return; } //// lấy tên sv void tensvbt12() { myNex.begin(115200); myNex.NextionListen(); mssv = myNex.readStr("loginbt12.passtxt.txt"); if(mssv.equals("ERROR") == false){ // ERROR is the return value if the code fails to read the new value lastTextsv = mssv; } else if(mssv.equals("ERROR") == true){ mssv = lastTextsv; mssv = myNex.readStr("loginbt12.passtxt.txt"); } return; } //// lay ten gv void tengv() { myNex.begin(115200); myNex.NextionListen(); msgv = myNex.readStr("main.msgv.txt"); if(msgv.equals("ERROR") == false){ // ERROR is the return value if the code fails to read the new value Đề tài nghiên cứu khoa học 124 Phụ lục lastText = msgv; } else if(msgv.equals("ERROR") == true){ msgv = lastText; msgv = myNex.readStr("main.msgv.txt"); } return; } //////////////// read server name gv void runQuerygv() { // free it when you're done!) String querygv = String("SELECT UNHEX(HEX(HOVATEN))") + " FROM " + default_database + "." + default_tablegv + " WHERE MSGV = '" + default_valuegv + "'"; const char* QUERY_POP1=querygv.c_str(); sprintf(query, QUERY_POP1,(( millis() % 100000 ) * 10) ); //sprintf(query, QUERY_POPSV,(( millis() % 100000 ) * 10) ); MYSQL_DISPLAY(query); // Initiate the query class instance MySQL_Query query_mem = MySQL_Query(&conn); // Execute the query // KH, check if valid before fetching if ( !query_mem.execute(query) ) { Đề tài nghiên cứu khoa học 125 Phụ lục MYSQL_DISPLAY("Querying error"); return; } // Fetch the columns and print them column_names *cols = query_mem.get_columns(); for (int f = 0; f < cols->num_fields; f++) { MYSQL_DISPLAY0(cols->fields[f]->name); if (f < cols->num_fields - 1) { MYSQL_DISPLAY0(","); } } MYSQL_DISPLAY(); // Read the rows and print them row_values *row = NULL; { row = query_mem.get_next_row(); if (row != NULL) { for (int f = 0; f < cols->num_fields; f++) { MYSQL_DISPLAY0(row->values[f]); Đề tài nghiên cứu khoa học 126 Phụ lục namegv=(row->values[f]); if (f < cols->num_fields - 1) { MYSQL_DISPLAY0(","); } } MYSQL_DISPLAY(); } } while (row != NULL); } //////////////// read server name SV void runQuerysv() { // free it when you're done!) String querysv = String("SELECT UNHEX(HEX(HOVATEN))") + " FROM " + default_database + "." + default_tablesv + " WHERE MSSV = '" + default_valuesv + "'"; const char* QUERY_POP1=querysv.c_str(); sprintf(query, QUERY_POP1,(( millis() % 100000 ) * 10) ); //sprintf(query, QUERY_POPSV,(( millis() % 100000 ) * 10) ); MYSQL_DISPLAY(query); // Initiate the query class instance MySQL_Query query_mem = MySQL_Query(&conn); // Execute the query // KH, check if valid before fetching Đề tài nghiên cứu khoa học 127 Phụ lục if ( !query_mem.execute(query) ) { MYSQL_DISPLAY("Querying error"); return; } // Fetch the columns and print them column_names *cols = query_mem.get_columns(); for (int f = 0; f < cols->num_fields; f++) { MYSQL_DISPLAY0(cols->fields[f]->name); if (f < cols->num_fields - 1) { MYSQL_DISPLAY0(","); } } MYSQL_DISPLAY(); // Read the rows and print them row_values *row = NULL; { row = query_mem.get_next_row(); if (row != NULL) { for (int f = 0; f < cols->num_fields; f++) Đề tài nghiên cứu khoa học 128 Phụ lục { MYSQL_DISPLAY0(row->values[f]); namesv=(row->values[f]); if (f < cols->num_fields - 1) { MYSQL_DISPLAY0(","); } } MYSQL_DISPLAY(); } } while (row != NULL); } //// doc hoat động GV void runInsertgv() { // Initiate the query class instance MySQL_Query query_mem = MySQL_Query(&conn); if (conn.connected()) { // Save const char*vb=namegv.c_str(); char vc[100]; namegv.toCharArray(vc,100); sprintf(query,INSERT_DATAGV,default_database,default_tablegvin,msgv, vc); // Execute the query MYSQL_DISPLAY(query); Đề tài nghiên cứu khoa học 129 Phụ lục // KH, check if valid before fetching if ( !query_mem.execute(query) ) { MYSQL_DISPLAY("Complex Insert error"); } else { MYSQL_DISPLAY("Complex Data Inserted."); } } else { MYSQL_DISPLAY("Disconnected from Server Can't insert."); } } //// doc hoat động SV void runInsertsv() { // Initiate the query class instance MySQL_Query query_mem = MySQL_Query(&conn); if (conn.connected()) { // Save const char*vb=namesv.c_str(); char vs[100]; namesv.toCharArray(vs,100); sprintf(query, INSERT_DATASV, default_database, default_tablesvin,mssv, vs); // Execute the query MYSQL_DISPLAY(query); Đề tài nghiên cứu khoa học 130 Phụ lục // KH, check if valid before fetching if ( !query_mem.execute(query) ) { MYSQL_DISPLAY("Complex Insert error"); } else { MYSQL_DISPLAY("Complex Data Inserted."); } } else { MYSQL_DISPLAY("Disconnected from Server Can't insert."); } } ///// // the heart of the program void shiftOut(int myDataPin, int myClockPin, byte myDataOut) { // This shifts bits out MSB first, //on the rising edge of the clock, //clock idles low //internal function setup int i=0; int pinState; pinMode(myClockPin, OUTPUT); pinMode(myDataPin, OUTPUT); //clear everything out just in case to //prepare shift register for bit shifting digitalWrite(myDataPin, 0); digitalWrite(myClockPin, 0); Đề tài nghiên cứu khoa học 131 Phụ lục //for each bit in the byte myDataOut� //NOTICE THAT WE ARE COUNTING DOWN in our for loop //This means that %00000001 or "1" will go through such //that it will be pin Q0 that lights for (i=7; i>=0; i ) { digitalWrite(myClockPin, 0); //if the value passed to myDataOut and a bitmask result // true then so if we are at i=6 and our value is // %11010100 it would the code compares it to %01000000 // and proceeds to set pinState to if ( myDataOut & (1

Ngày đăng: 05/10/2023, 19:50

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN