Nghiên cứu, thiết kế giao diện hiển thị thông số xe máy điện ứng dụng giao tiếp can

134 2 0
Nghiên cứu, thiết kế giao diện hiển thị thông số xe máy điện ứng dụng giao tiếp can

Đ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

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH ĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT Ô TÔ NGHIÊN CỨU, THIẾT KẾ GIAO DIỆN HIỂN THỊ THÔNG SỐ XE MÁY ĐIỆN ỨNG DỤNG GIAO TIẾP CAN GVHD: TS LÊ THANH PHÚC SVTH: AN LÊ TUẤN ANH NGUYỄN HUY NGHIÊM SKL010774 Tp Hồ Chí Minh, Tháng năm 2023 TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH KHOA ĐÀO TẠO CHẤT LƯỢNG CAO ĐỒ ÁN TỐT NGHIỆP NGHIÊN CỨU, THIẾT KẾ GIAO DIỆN HIỂN THỊ THÔNG SỐ XE MÁY ĐIỆN ỨNG DỤNG GIAO TIẾP CAN SVTH: AN LÊ TUẤN ANH_19145202 SVTH: NGUYỄN HUY NGHIÊM_19145018 Khóa: 2019 Ngành: CÔNG NGHỆ KỸ THUẬT Ô TÔ GVHD: TS LÊ THANH PHÚC Tp Hồ Chí Minh, tháng năm 2023 TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH KHOA ĐÀO TẠO CHẤT LƯỢNG CAO ĐỒ ÁN TỐT NGHIỆP NGHIÊN CỨU, THIẾT KẾ GIAO DIỆN HIỂN THỊ THÔNG SỐ XE MÁY ĐIỆN ỨNG DỤNG GIAO TIẾP CAN SVTH: AN LÊ TUẤN ANH_19145202 SVTH: NGUYỄN HUY NGHIÊM_19145018 Khóa: 2019 Ngành: CƠNG NGHỆ KỸ THUẬT Ơ TƠ GVHD: TS LÊ THANH PHÚC Tp Hồ Chí Minh, tháng năm 2023 CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc *** Tp Hồ Chí Minh, ngày…tháng…năm 2023 NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: An Lê Tuấn Anh MSSV: 19145202 Nguyễn Huy Nghiêm MSSV: 19145018 Ngành: Công nghệ kỹ thuật ô tô Lớp: 19145CL4A Giảng viên hướng dẫn: TS Lê Thanh Phúc ĐT: 0932591200 Ngày nhận đề tài: Ngày nộp đề tài: Tên đề tài: - Nghiên cứu, thiết kế giao diện hiển thị thông số xe máy điện ứng dụng giao tiếp CAN Các số liệu, tài liệu ban đầu: Tài liệu mạng CAN Nội dung thực đề tài: - Tìm hiểu sở lý thuyết mạng CAN hệ thống hiểu thị thông tin - Thiết kế hệ thống hiển thị thông số xe máy điện sử dụng mạng CAN Sản phẩm: - thuyết minh đề tài - Mơ hình giả lập hệ thống hiển thị thông số xe máy điện ứng dụng giao tiếp CAN XÁC NHẬN CỦA TRƯỞNG NGÀNH GIẢNG VIÊN HƯỚNG DẪN i CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc *** PHIẾU NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN Họ tên Sinh viên: An Lê Tuấn Anh MSSV: 19145202 Nguyễn Huy Nghiêm MSSV: 19145018 Ngành: Công nghệ kỹ thuật ô tô Tên đề tài: Nghiên cứu, thiết kế giao diện hiển thị thông số xe máy điện ứng dụng giao tiếp CAN Họ tên Giáo viên hướng dẫn: TS Lê Thanh Phúc NHẬN XÉT Về nội dung đề tài & khối lượng thực hiện: Nhóm sinh viên thực đề tài nghiên cứu giao tiếp CAN ô tô Trong đó, thông tin CAN bus tiếp nhận truyền lên Python Việc lập trình hiển thị Python, nhóm sinh viên sử dụng ngơn ngữ Python Việc nghiên cứu CAN lập trình Python giúp cho sinh viên hiểu truyền liệu ô tô đồng thời trang bị cho sinh viên lập trình giúp cho sinh viên vận dụng vào cơng việc sau tốt nghiệp Ưu điểm: Nhóm sinh viên thực nội dung đề tài từ sớm, hoàn thiện tất nội dung giáo viên hướng dẫn yêu cầu Khuyết điểm: Do thiếu kiến thức, chưa giải vấn đề nhiễu mạng CAN nên việc thao tác hình Python cịn bị chậm trễ Đề nghị cho bảo vệ hay không? …………………………………………………………………………………………… Đánh giá loại: …………………………………………………………………………………………… Điểm:………………… (Bằng chữ:………………………………………………… ) Tp Hồ Chí Minh, ngày tháng năm 2023 Giáo viên hướng dẫn (Ký & ghi rõ họ tên) ii CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc *** PHIẾU NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN Họ tên Sinh viên: An Lê Tuấn Anh MSSV: 19145202 Nguyễn Huy Nghiêm MSSV: 19145018 Ngành: Công nghệ kỹ thuật ô tô Tên đề tài: Nghiên cứu, thiết kế giao diện hiển thị thông số xe máy điện ứng dụng giao tiếp CAN Họ tên Giáo viên phản biện: TS Lê Quang Vũ NHẬN XÉT Về nội dung đề tài & khối lượng thực hiện: Ưu điểm: Khuyết điểm: Đề nghị cho bảo vệ hay không? Đánh giá loại: Điểm: ……………… (Bằng chữ: ) Tp Hồ Chí Minh, ngày tháng năm 2023 Giáo viên phản biện (Ký & ghi rõ họ tên) iii LỜI CẢM ƠN Trước tiên, chúng em xin gửi lời tri ân sâu sắc tới cha mẹ ban giám hiệu nhà, người tạo điều kiện thuận lợi để chúng em học tập nghiên cứu môi trường đáng mơ ước, thân thiện trang bị hệ thống phòng thư viện đại Trường Đại học Sư phạm Kỹ thuật thành phố Hồ Chí Minh Chúng em muốn bày tỏ lòng biết ơn chân thành đến thầy cô giáo Khoa Đào tạo Chất lượng cao, ngành Công nghệ kỹ thuật ô tô Trong suốt bốn năm học Đại học, giảng viên môn Động cơ, Khung gầm Điện ô tô truyền đạt cho chúng em kiến thức bổ ích giúp tiếp cận với trang thiết bị đại Đặc biệt, chúng em muốn gửi lời cảm ơn sâu sắc đến giảng viên hướng dẫn, TS Lê Thanh Phúc, tận tâm dạy từ chúng em nhận đề tài hoàn thành đồ án Chúng em trân trọng kiến thức quý báu mà thầy truyền đạt, giúp chúng em tích luỹ kinh nghiệm lĩnh vực chun mơn Chúng em xin gửi lời cảm ơn đến thành viên lớp 19145CL4, người đồng hành hỗ trợ lẫn suốt bốn năm giảng đường Chúc mừng bạn vượt qua kỳ thi tốt nghiệp cách thành cơng tìm cơng việc phù hợp với phát triển người Cuối cùng, chúng em xin gửi lời chúc sức khỏe thành công đến tất thầy cô giáo, người hết lịng cơng việc giảng dạy Cảm ơn nỗ lực đóng góp quý báu thầy cô, hy vọng thầy cô tiếp tục thành công đường giáo dục Tp Hồ Chí Minh, ngày tháng năm 2023 Nhóm sinh viên thực An Lê Tuấn Anh_Nguyễn Huy Nghiêm iv TÓM TẮT Ngày nay, với phát triển không ngừng công nghệ ô tô, xe châu Âu bình thường trung bình có khoảng 30 hộp điều khiển khác chưa kể đến xe sang số hộp điều khiển lên đến hàng trăm hộp Ngay hệ thống điều khiển ghế ngồi, âm có hộp ECU riêng Tất hộp kết nối để lấy tín hiệu Với đời hệ thống điều khiển điện tử làm giảm số lượng dây điện ô tô xuống tới mức tối đa, làm giảm chi phí sản xuất, tối ưu hóa khơng gian cho xe, tăng độ xác cho khâu xử lý Đặc biệt, hệ thống lỗi so với hệ thống thơng thường khơng sử dụng ECU Khi nhu cầu an tồn, tiện lợi độ xác cao, hệ thống địi hỏi phải có liên kết tất hộp điều khiển lại với để trao đổi thơng tin cách nhanh chóng, kịp thời xác Và mạng giao tiếp tơ ngày giải pháp tối ưu để giải vấn đề Cùng với phát triển mạng giao tiếp ô tô CAN (Controller Area Network), LIN (Local Interconnect Network), MOST (Media Oriented Systems Transport), K-line (Keyword Protocol 2000),… CAN mạng giao tiếp đáp ứng đầy đủ yêu cầu Vào năm 2008, CAN tiêu chuẩn tất xe sản xuất Mỹ Ưu điểm CAN an tồn, đơn giản, chi phí thấp, xác bị nhiễu, Cũng ưu điểm với phát triển mạng giao tiếp CAN nhóm thực định lựa chọn tìm hiểu CAN để hiển thị thông tin cần thiết để mơ q trình giao tiếp truyền nhận liệu CAN Sau tìm hiểu sâu mạng giao tiếp CAN nhóm nghiên cứu thiết kế mơ hình mơ hình để hiển thị thông số xe máy điện việc giao tiếp Arduino Uno thông qua MCP2515 hiển thị lên hình máy tính phần mền Python v MỤC LỤC NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP .i PHIẾU NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN ii PHIẾU NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN iii LỜI CẢM ƠN iv TÓM TẮT v DANH MỤC CÁC TỪ VIẾT TẮT ix DANH MỤC CÁC BẢNG BIỂU x DANH MỤC HÌNH ẢNH xi Chương TỔNG QUAN ĐỀ TÀI .1 1.1 Lịch sử vấn đề nghiên cứu: 1.2 Tính cấp thiết đề tài: 1.3 Mục tiêu đề tài: 1.4 Đối tượng phạm vi nghiên cứu: 1.4.1 Đối tượng nghiên cứu: 1.4.2 Phạm vi nghiên cứu: 1.5 Phương pháp nghiên cứu .3 1.6 Giới hạn đề tài 1.7 Nội dung thực 1.8 Bố cục đồ án: .3 Chương CƠ SỞ LÍ THUYẾT 2.1 Hệ thống hiển thị thông tin ô tô: .4 2.1.1 Tổng quát hệ thống hiển thị thông tin ô tô: .4 2.1.2 Hệ thống thông tin hỗ trợ người lái: 2.1.2.1 Hình ảnh: 2.1.2.2 Âm thanh: 2.1.2.3 Xúc giác: 2.2 Tổng quan mạng giao tiếp ô tô: 2.2.1 Mạng giao tiếp ô tô: 2.2.2 Các loại giao thức giao tiếp ô tô: 2.2.3 Yêu cầu mạng giao tiếp: .9 vi 2.2.3.1 Tốc độ truyền liệu: 2.2.3.2 Khả chống nhiễu: 11 2.2.3.3 Khả đáp ứng thời gian thực: 11 2.2.3.4 Số node tham gia vào mạng: 12 2.2.4 Các ứng dụng ô tô: 12 2.2.4.1 Ứng dụng thời gian thực: 13 2.2.4.2 Ứng dụng đa dẫn: 13 2.2.4.3 Ứng dụng đa phương tiện: 14 2.3 Tổng quan mạng CAN: 14 2.3.1 Lịch sử phát triển mạng CAN: 14 2.3.2 Đặc điểm mạng CAN: 16 2.3.2.1 Một số khái niệm: 16 2.3.2.2 Tốc độ truyền liệu: 16 2.3.2.3 Giá trị Bus CAN: 17 2.3.2.4 Cơ chế giao tiếp: bus 20 2.3.2.5 Cấu trúc mạng CAN: 21 2.3.2.6 Cấu trúc phân lớp: 23 2.3.2.7 Cấu trúc điện: 24 Chương SƠ LƯỢC VỀ PHẦN CỨNG VÀ PHẦN MỀM 39 3.1 Sơ lược phần mềm sử dụng 39 3.1.1 Giới thiệu phần mềm Arduino 39 3.1.2 Giới thiệu phần mềm Python 39 3.1.3 Giới thiệu phần mềm AutoCAD 39 3.2 Sơ lược phần cứng sử dụng 40 3.2.1 Arduino Uno 40 3.2.2 MCP 2515 43 3.2.3 Biến trở 45 3.2.4 Nút nhấn 45 3.2.5 Điện trở 46 3.2.6 Đèn led 46 3.2.7 Màn hình Desktop 47 vii canvas.img_9 = ImageTk.PhotoImage(img_file_9) f9 = Frame(canvas, height = 30, width = 30) f9.place(x = 270, y = 70) canvas.label9 = Label(f9, image = canvas.img_9) canvas.label9.pack() def clickONCBDT(): global a global dem4 if a == 1: dem4 += if dem4 % == 0: img_file_5 = Image.open('truot.jpg')#canbangdientu canvas.img_5 = ImageTk.PhotoImage(img_file_5) f5 = Frame(canvas, height = 30, width = 30) f5.place(x = 650, y = 300) canvas.label5 = Label(f5, image = canvas.img_5) canvas.label5.pack() if dem4 % == 1: img_file_5 = Image.open('tat.jpg')#canbangdientu canvas.img_5 = ImageTk.PhotoImage(img_file_5) f5 = Frame(canvas, height = 30, width = 30) f5.place(x = 650, y = 300) canvas.label5 = Label(f5, image = canvas.img_5) canvas.label5.pack() def clickHazad(): 105 global a global dem1 if a == 1: dem1 += if dem1 % == 0: img_file_10 = Image.open('hazad.jpg') canvas.img_10 = ImageTk.PhotoImage(img_file_10) f10 = Frame(canvas, height = 30, width = 30) f10.place(x = 350, y = 2.5) canvas.label10 = Label(f10, image = canvas.img_10) canvas.label10.pack() if dem1 % == 1: img_file_10 = Image.open('tat.jpg')#hazad canvas.img_10 = ImageTk.PhotoImage(img_file_10) f10 = Frame(canvas, height = 30, width = 30) f10.place(x = 350, y = 2.5) canvas.label10 = Label(f10, image = canvas.img_10) canvas.label10.pack() def clickXinhan(): global a global b global dem6 dem6 += if a == 1: if dem6 % == 0: 106 b=1 img_file_6 = Image.open('xinhan.jpg')#xinhan canvas.img_6 = ImageTk.PhotoImage(img_file_6) f6 = Frame(canvas, height = 30, width = 30) f6.place(x = 350, y = 70) canvas.label6 = Label(f6, image = canvas.img_6) canvas.label6.pack() command = 'nhan' print(command) ser.write(command.encode('utf-8')) if dem6 % == 1: b=0 img_file_6 = Image.open('tat.jpg')#xinhan canvas.img_6 = ImageTk.PhotoImage(img_file_6) f6 = Frame(canvas, height = 30, width = 30) f6.place(x = 350, y = 70) canvas.label6 = Label(f6, image = canvas.img_6) canvas.label6.pack() command = 'tatnhan' print(command) ser.write(command.encode('utf-8')) def tatXinhan(): global b global a b=0 107 img_file_6 = Image.open('tat.jpg')#xinhan canvas.img_6 = ImageTk.PhotoImage(img_file_6) f6 = Frame(canvas, height = 30, width = 30) f6.place(x = 350, y = 70) canvas.label6 = Label(f6, image = canvas.img_6) canvas.label6.pack() command = 'tatnhan' print(command) ser.write(command.encode('utf-8')) def clickTatKey(): global a global dem dem = a=0 img_file_1 = Image.open('tat.jpg') #pha canvas.img_1 = ImageTk.PhotoImage(img_file_1) f1 = Frame(canvas, height = 30, width = 30) f1.place(x = 60, y = 300) canvas.label1 = Label(f1, image = canvas.img_1) canvas.label1.pack() img_file_2 = Image.open('tatpin.jpg')#pin canvas.img_2 = ImageTk.PhotoImage(img_file_2) f2 = Frame(canvas, height = 30, width = 30) f2.place(x = 80, y = 150) 108 canvas.label2 = Label(f2, image = canvas.img_2) canvas.label2.pack() img_file_3 = Image.open('tat.jpg') canvas.img_3 = ImageTk.PhotoImage(img_file_3) f3 = Frame(canvas, height = 30, width = 30) f3.place(x = 60, y = 230) canvas.label3 = Label(f3, image = canvas.img_3) canvas.label3.pack() img_file_4 = Image.open('tat.jpg')#aslop canvas.img_4 = ImageTk.PhotoImage(img_file_4) f4 = Frame(canvas, height = 30, width = 30) f4.place(x = 650, y = 230) canvas.label4 = Label(f4, image = canvas.img_4) canvas.label4.pack() img_file_5 = Image.open('tat.jpg')#dau canvas.img_5 = ImageTk.PhotoImage(img_file_5) f5 = Frame(canvas, height = 30, width = 30) f5.place(x = 650, y = 300) canvas.label5 = Label(f5, image = canvas.img_5) canvas.label5.pack() img_file_6 = Image.open('tat.jpg')#xinhan canvas.img_6 = ImageTk.PhotoImage(img_file_6) f6 = Frame(canvas, height = 30, width = 30) f6.place(x = 350, y = 70) 109 canvas.label6 = Label(f6, image = canvas.img_6) canvas.label6.pack() img_file_7 = Image.open('tat.jpg') canvas.img_7 = ImageTk.PhotoImage(img_file_7) f7 = Frame(canvas, height = 30, width = 30) f7.place(x = 650, y = 160) canvas.label7 = Label(f7, image = canvas.img_7) canvas.label7.pack() img_file_8 = Image.open('tat.jpg')#key canvas.img_8 = ImageTk.PhotoImage(img_file_8) f8 = Frame(canvas, height = 30, width = 30) f8.place(x = 430, y = 70) canvas.label8 = Label(f8, image = canvas.img_8) canvas.label8.pack() img_file_9 = Image.open('tat.jpg')#phanhtay canvas.img_9 = ImageTk.PhotoImage(img_file_9) f9 = Frame(canvas, height = 30, width = 30) f9.place(x = 270, y = 70) canvas.label9 = Label(f9, image = canvas.img_9) canvas.label9.pack() img_file_10 = Image.open('tat.jpg')#hazad canvas.img_10 = ImageTk.PhotoImage(img_file_10) f10 = Frame(canvas, height = 30, width = 30) f10.place(x = 350, y = 2.5) 110 canvas.label10 = Label(f10, image = canvas.img_10) canvas.label10.pack() command = 'OFF' print(command) ser.write(command.encode('utf-8')) def to_pil2(z): global a if a == 1: if z != 232: alfa5= z/255*pi alfa6=0.02 alfa7=2.9 alfa8=-2.9 alfa9=-0.02 R3=155 R4=8 a5=390-R3*cos(alfa5+alfa6) b5=390-R3*sin(alfa5+alfa6) a6=390-R4*cos(alfa5+alfa7) b6=390-R4*sin(alfa5+alfa7) a7=390-R4*cos(alfa5+alfa8) b7=390-R4*sin(alfa5+alfa8) a8=390-R3*cos(alfa5+alfa9) b8=390-R3*sin(alfa5+alfa9) cord_pointer4 = [a5, b5, a6, b6, a7, b7, a8, b8] 111 canvas.coords(pointer4,cord_pointer4) def to_pil3(n): global a if a == 1: if n != 232: alfa= n/255*pi alfa1=0.002 alfa2=2.9 alfa3=-2.9 alfa4=-0.002 R1=50 R2=10 a1=114-R1*cos(alfa+alfa1) b1=114-R1*sin(alfa+alfa1) a2=114-R2*cos(alfa+alfa2) b2=114-R2*sin(alfa+alfa2) a3=114-R2*cos(alfa+alfa3) b3=114-R2*sin(alfa+alfa3) a4=114-R1*cos(alfa+alfa4) b4=114-R1*sin(alfa+alfa4) cord_pointer3 = [a1, b1, a2, b2, a3, b3, a4, b4] canvas.coords(pointer3,cord_pointer3) def to_pil4(m): global a if a == 1: 112 if m != 232: beta= m/255*pi beta1=0.002 beta2=2.9 beta3=-2.9 beta4=-0.002 Rb1=50 Rb2=10 c1=680-Rb1*cos(beta+beta1) d1=114-Rb1*sin(beta+beta1) c2=680-Rb2*cos(beta+beta2) d2=114-Rb2*sin(beta+beta2) c3=680-Rb2*cos(beta+beta3) d3=114-Rb2*sin(beta+beta3) c4=680-Rb1*cos(beta+beta4) d4=114-Rb1*sin(beta+beta4) cord_pointer5 = [c1, d1, c2, d2, c3, d3, c4, d4] canvas.coords(pointer5,cord_pointer5) def run(): data = ser.readline().decode('utf-8') read = data.split(',') x = int(read[0]) y = int(read[1]) j = int(read[2]) k = int(read[3]) 113 z = int(read[4]) n = int(read[5]) m = int(read[6]) print(x,y) global currenttime global dem6 global time1 global b if a == 1: if x == 1: dem6 +=1 if dem6 % == 0: b=1 command = 'nhan' print(command) ser.write(command.encode('utf-8')) if dem6 % == 1: b=0 tatXinhan() if y == 1: time.sleep(0.5) clickDen() if j == 1: time.sleep(0.5) clickTat() 114 if k == 1: time.sleep(0.5) clickKey() to_pil2(z) to_pil3(n) to_pil4(m) currenttime = dt.datetime.now() if b == 1: delta = currenttime.second - time1.second deltatg = abs(delta) if(deltatg > sangled): time1 = currenttime img_file_6 = Image.open('xinhan.jpg')#xinhan canvas.img_6 = ImageTk.PhotoImage(img_file_6) f6 = Frame(canvas, height = 30, width = 30) f6.place(x = 350, y = 70) canvas.label6 = Label(f6, image = canvas.img_6) canvas.label6.pack() if(deltatg < sangled): print(time1.second) img_file_6 = Image.open('tat.jpg')#xinhan canvas.img_6 = ImageTk.PhotoImage(img_file_6) f6 = Frame(canvas, height = 30, width = 30) f6.place(x = 350, y = 70) canvas.label6 = Label(f6, image = canvas.img_6) 115 canvas.label6.pack() #to_pil3(int(read)) #to_pil4(int(read)) w.after(10, run) run() update_interval=1/20 def update_asyncio(canvas, interval): canvas.loop.call_soon(canvas.stop) canvas.loop.run_forever() if canvas.close_event.is_set(): canvas.quit() canvas.after(int(interval * 1000), canvas. update_asyncio, interval) #Nút nhấn customtkinter.set_appearance_mode("dark") # Modes: "System" (standard), "Dark", "Light" customtkinter.set_default_color_theme("green") # Themes: "blue" (standard), "green", "dark-blue" app = customtkinter.CTk() app.geometry("300x650") app.title("Tablo Phụ") frame_1 = customtkinter.CTkFrame(master=app) frame_1.pack(padx=60, pady=0 , expand=True) label_1 = customtkinter.CTkLabel(master=frame_1,text="WARNING", justify=customtkinter.CENTER) label_1.pack(padx=10, pady=00) 116 button = customtkinter.CTkButton(master=frame_1, command=clickHazad) text="HAZARD", button.pack(padx=10, pady=10) button1 = command=clickKey) customtkinter.CTkButton(master=frame_1, text="KEY", button1.pack(padx=10, pady=10) button2 = customtkinter.CTkButton(master=frame_1, command=clickTatKey) text="OFF KEY", text="Phanh Tay", button2.pack(padx=10, pady=10) button10 = customtkinter.CTkButton(master=frame_1, command=clickPhanhtay) button10.pack(padx=10, pady=10) button6 = customtkinter.CTkButton(app, text="Xi Nhan", command=clickXinhan) button6.pack(padx=10, pady=10) frame_2 = customtkinter.CTkFrame(master=app) frame_2.pack(padx=60, pady=0 , expand=True) label_2=customtkinter.CTkLabel(master=frame_2,text="Đèn", justify=customtkinter.LEFT) label_2.pack(padx=50, pady=0) button3 = customtkinter.CTkButton(master=frame_2, command=clickCos) text="Đèn Cos", text="Đèn Pha", text="Tắt Đèn", button3.pack(padx=10, pady=10) button4 = customtkinter.CTkButton(master=frame_2, command=clickPha) button4.pack(padx=10, pady=10) button5 = customtkinter.CTkButton(master=frame_2, command=clickTat) 117 button5.pack(padx=10, pady=10) button7 = customtkinter.CTkButton(app, text="Auto hold", command=clickAutohold) button7.pack(padx=10, pady=10) button8 = customtkinter.CTkButton(app, text="Down Hill", command=clickDownhill) button8.pack(padx=10, pady=10) button9 = customtkinter.CTkButton(app, text="ESP", command=clickONCBDT) button9.pack(padx=10, pady=10) app.mainloop() w.mainloop() 118 S K L 0

Ngày đăng: 14/11/2023, 10:11

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan