From 4a4c472b639d3281a510983f667f65c62b57a876 Mon Sep 17 00:00:00 2001 From: liu <387636706@qq.com> Date: Wed, 10 May 2023 20:38:01 +0800 Subject: [PATCH] V0.1 --- gear_change.py | 134 ++++++++++++++++++++++++++++ geartest2.py | 235 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 369 insertions(+) create mode 100644 gear_change.py create mode 100644 geartest2.py diff --git a/gear_change.py b/gear_change.py new file mode 100644 index 0000000..77b3a09 --- /dev/null +++ b/gear_change.py @@ -0,0 +1,134 @@ +import sqlite3 +import time +def init(): + gear_cmd = 0 + auto_acc=0 + brk_open=0 + brk_change=0 + stop=0 + db_file = "geardb.db" + conn = sqlite3.connect(db_file) + cur = conn.cursor() + # sql='INSERT INTO geardb(id) VALUES(1);' + sql = "update geardb set gear_cmd='%s',auto_acc='%s',brk_open='%s',brk_change='%s' ,stop='%s'WHERE id = 1"%( + gear_cmd,auto_acc,brk_open,brk_change,stop) + cur.execute(sql) + conn.commit() + cur.close() + conn.close() +def gear_p(): + print('P') + gear_cmd = 1 + auto_acc=0 + db_file = "geardb.db" + conn = sqlite3.connect(db_file) + cur = conn.cursor() + # sql='INSERT INTO geardb(id) VALUES(1);' + sql = "update geardb set gear_cmd='%s',auto_acc='%s' WHERE id = 1"%(gear_cmd,auto_acc) + cur.execute(sql) + conn.commit() + cur.close() + conn.close() + +def gear_n(): + print('N') + gear_cmd = 3 # n + auto_acc=0 + db_file = "geardb.db" + conn = sqlite3.connect(db_file) + cur = conn.cursor() + # sql='INSERT INTO geardb(id) VALUES(1);' + sql = "update geardb set gear_cmd='%s',auto_acc='%s' WHERE id = 1"%(gear_cmd,auto_acc) + cur.execute(sql) + conn.commit() + cur.close() + conn.close() +def gear_r(): + gear_cmd = 2 # r + print('r') + auto_acc = input("请输入油门深度:") + db_file = "geardb.db" + conn = sqlite3.connect(db_file) + cur = conn.cursor() + # sql='INSERT INTO geardb(id) VALUES(1);' + sql = "update geardb set gear_cmd='%s',auto_acc='%s' WHERE id = 1"%(gear_cmd,auto_acc) + cur.execute(sql) + conn.commit() + cur.close() + conn.close() +def gear_d(): + gear_cmd = 4 # r + print('d') + auto_acc = input("请输入油门深度:") + db_file = "geardb.db" + conn = sqlite3.connect(db_file) + cur = conn.cursor() + # sql='INSERT INTO geardb(id) VALUES(1);' + sql = "update geardb set gear_cmd='%s',auto_acc='%s' WHERE id = 1"%(gear_cmd,auto_acc) + cur.execute(sql) + conn.commit() + cur.close() + conn.close() +def shache(): + brk_open = 30 + brk_change=1 + db_file = "geardb.db" + conn = sqlite3.connect(db_file) + cur = conn.cursor() + # sql='INSERT INTO geardb(id) VALUES(1);' + sql = "update geardb set brk_open='%s',brk_change='%s' WHERE id = 1"%(brk_open,brk_change) + cur.execute(sql) + conn.commit() + cur.close() + conn.close() +def shache2(): + brk_change=0 + db_file = "geardb.db" + conn = sqlite3.connect(db_file) + cur = conn.cursor() + # sql='INSERT INTO geardb(id) VALUES(1);' + sql = "update geardb set brk_change='%s' WHERE id = 1"%brk_change + cur.execute(sql) + conn.commit() + cur.close() + conn.close() +def stop(): + stop=1 + db_file = "geardb.db" + conn = sqlite3.connect(db_file) + cur = conn.cursor() + # sql='INSERT INTO geardb(id) VALUES(1);' + sql = "update geardb set stop='%s' WHERE id = 1"%stop + cur.execute(sql) + conn.commit() + cur.close() + conn.close() +def main(): + while True: + gear_change = int(input('请输入档位:\n' + '1:P档\n' + '2:R档\n' + '3:N档\n' + '4:D档\n' + '5:刹车\n' + '6:紧急停止\n')) + if gear_change==1: + gear_p() + elif gear_change==3: + gear_n() + elif gear_change==2: + gear_r() + elif gear_change==4: + gear_d() + elif gear_change==5: + shache() + time.sleep(0.1) + shache2() + elif gear_change==6: + stop() + + else: + print('请重新输入') +if __name__=='__main__': + init() + main() \ No newline at end of file diff --git a/geartest2.py b/geartest2.py new file mode 100644 index 0000000..a956a97 --- /dev/null +++ b/geartest2.py @@ -0,0 +1,235 @@ +import os +import datetime +import threading +import time + +import can # 需要安装python-can库 pip install python-can +from can import bus +import geardb + + +# def option(): +# global auto_acc, gear_cmd, brk_open, brk_change, stop +# auto_acc = 0 # 加速踏板行程0~100% +# brk_open = 100 # 刹车深度0-100% +# gear_cmd = 4 # 需求档位 1:P 2:R 3:N 4:D +# brk_change = 0 # 默认为0 变更为1 +# stop = 0 # 紧急停止 默认为0 + + +# can1 = can.interface.Bus(channel = 'can0', bustype = 'socketcan') #python-can 4.0需要用这个 +def update(): + global gear_cmd,auto_acc,brk_open,brk_change,stop + while True: + date = geardb.table_quer() + gear_cmd = int(date[0][1]) # 需求档位 1:P 2:R 3:N 4:D + auto_acc = int(date[0][2]) # 加速踏板行程0~100% + brk_open = int(date[0][3]) # 刹车深度0-100% + brk_change = int(date[0][4]) # 默认为0 变更为1 + stop = int(date[0][5]) # 紧急停止 默认为0 + time.sleep(0.05) +# 获取当前档位 +def can4b8(): + global gear_act + + bus.set_filters = [{"can_id": 0x04b8, "can_mask": 0xFFFF, "extended": False}] + # 连接can1 + + can1 = can.interface.Bus(channel='can1', bustype='socketcan', can_filters=bus.set_filters) # python-can 4.0需要用这个 + + # 一直循环接收数据 + while True: + msg = can1.recv(3.0) # recv()中定义超时接收时间 + # print(msg) + can4b81 = str(msg).replace(' ', '') + can4b8id = can4b81.find('ID') + can4b8dl = can4b81.find('DL') + can_id = can4b81[can4b8id + 3:can4b8id + 7] # id + # print(can_id) + # print(can4b81) + # print(can4b8id) + gear_act0 = can4b81[can4b8dl + 10:can4b8dl + 11] # gear + a = int(gear_act0) + if can_id == '04b8' and a > 1: + + gear_act1 = bin(int(gear_act0)) + gear_act2 = gear_act1[:-1] + gear_act = int(gear_act2, 2) + # if gear_act == 1: + # print('实际档位:为P档') + # elif gear_act==2: + # print('实际档位:为R档') + # elif gear_act==3: + # print('实际档位:为N档') + # elif gear_act==4: + # print('实际档位:为D档') + # else: + # print('档位识别失败') + + else: + print('未获取到实际挡位') + + +# 刹车转换 +def brk_open_conversion(brk_open10): + global brk_open_low, brk_open_high + if 100 >= brk_open10 >= 0: + brk_open = brk_open10 * 100 + brk_open16 = hex(brk_open) + # print(brk_open16) + brk_open_all = brk_open16[2:].upper() + if len(str(brk_open_all)) == 1: + brk_open_low = "0%s" % brk_open_all + brk_open_high = '00' + elif len(str(brk_open_all)) == 2: + brk_open_low = brk_open_all + brk_open_high = '00' + elif len(str(brk_open_all)) == 3: + brk_open_low = brk_open_all[1: 3] + brk_open_high = "0%s" % brk_open_all[0: 1] + elif len(str(brk_open_all)) == 4: + brk_open_low = brk_open_all[2: 4] + brk_open_high = brk_open_all[0: 2] + # print(brk_open_low, brk_open_high) + else: + print('刹车深度输入范围0~100') + + +# 油门转换 +def acc_conversion(auto_acc10): + global auto_acc_all + if 100 >= auto_acc10 >= 0: + auto_acc16 = hex(auto_acc10) + # print(auto_acc16) + auto_acc_all16 = auto_acc16[2:].upper() + # print(auto_acc_all16) + if len(str(auto_acc_all16)) == 1: + auto_acc_all = "0%s" % auto_acc_all16 + else: + auto_acc_all = auto_acc_all16 + # print(auto_acc_all) + else: + print('加速踏板深度输入范围0~100') + + +# 设置刹车 +def brk_open_option(): + global brk_change + while True: + brk_open_conversion(brk_open) + if brk_change == 1: + print('cansend can2 121#%s%s010000000000' % (brk_open_low, brk_open_high)) + os.system('cansend can2 121#%s%s010000000000' % (brk_open_low, brk_open_high)) + brk_change = 0 + time.sleep(0.01) + + +# 设置P档 +def gear_P(): + os.system('cansend can0 161#7200000500000000') # 挂p档切自动驾驶模式 + # print('cansend can0 161#7200000500000000') # 挂p档切自动驾驶模式 + + +# 设置N档 +def gear_N(): + os.system('cansend can0 161#7200000000000000') # 挂N档切自动驾驶模式 + # print('cansend can0 161#7200000000000000') # 挂N + + +# 保持D档 +def gear_keep_D(): + acc_conversion(int(auto_acc)) + os.system('cansend can0 161#72%s000400000000' % auto_acc_all) # 挂D档切自动驾驶模式 + # print('cansend can0 161#72%s000400000000' % auto_acc_all) # 挂D档切自动驾驶模式 + + +# 保持R档 +def gear_keep_R(): + acc_conversion(int(auto_acc)) + os.system('cansend can0 161#72%s000700000000' % auto_acc_all) # 挂R档切自动驾驶模式 + # print('cansend can0 161#72%s000700000000' % auto_acc_all) # 挂R档切自动驾驶模式 + + +# 切换D档 +def gear_D(): + os.system('cansend can2 121#1027010000000000') # 踩刹车 + acc_conversion(int(auto_acc)) + os.system('cansend can0 161#72%s000400000000' % auto_acc_all) # 挂D档切自动驾驶模式 + os.system('cansend can2 121#0000010000000000') # 松刹车 + # print('cansend can0 161#72%s000400000000' % auto_acc_all) # 挂D档切自动驾驶模式 + + +def gear_R(): + os.system('cansend can2 121#1027010000000000') # 踩刹车 + acc_conversion(int(auto_acc)) + os.system('cansend can0 161#72%s000700000000' % auto_acc_all) # 挂R档切自动驾驶模式 + os.system('cansend can2 121#0000010000000000') # 松刹车 + # print('cansend can0 161#72%s000700000000' % auto_acc_all) # 挂R档切自动驾驶模式 + + +def main(): + while True: + if stop == 0: + print('当前档位:',gear_act) + if gear_cmd == 1: + if gear_act == 1: + print('当前已是P档') + else: + print('切换P档') + gear_P() + elif gear_cmd == 3: + if gear_act == 3: + print('当前已是N档') + else: + print('切换N档') + gear_N() + elif gear_cmd == 4: + if gear_act == 4: + print('当前已是D档') + gear_keep_D() + else: + print('切换D档') + gear_D() + # os.system('cansend can2 121#0000010000000000') #测试用 + elif gear_cmd == 2: + if gear_act == 2: + print('当前已是R档') + gear_keep_R() + else: + print('切换R档') + gear_R() + else: + print('未设定档位') + else: + print('紧急停止') + os.system('cansend can2 121#1027010000000000') + break + time.sleep(0.01) + + +# 刹车初始值 100% +brk_open_low = '10' +brk_open_high = '27' +# 初始加速踏板行程0 +auto_acc16 = '00' + +gear_act = 0 # 实际挡位 +gear_cmd = 4 # 需求档位 1:P 2:R 3:N 4:D +auto_acc = 0 # 加速踏板行程0~100% +brk_open = 100 # 刹车深度0-100% +brk_change = 0 # 默认为0 变更为1 +stop = 0 # 紧急停止 默认为0 + + +# if __name__ == '__main__': +# # t1 = threading.Thread(target=option) +# t2 = threading.Thread(target=brk_open_option) +# t3 = threading.Thread(target=can4b8) +# t4 = threading.Thread(target=main) +# t5 = threading.Thread(target=update) +# # option() +# # t1.start() +# t2.start() +# t3.start() +# t4.start() +# t5.start() \ No newline at end of file