From 5ea061ba105842af0bc72c4ff024a0b8f9a36f85 Mon Sep 17 00:00:00 2001 From: jd3096-mpy <1091329318@qq.com> Date: Thu, 25 Nov 2021 14:46:45 +0800 Subject: [PATCH] merge --- code/ble.py | 2 +- code/car.py | 81 +++++++++--------- code/examples/IR_control&screen.py | 85 ------------------- code/examples/IR_control.py | 58 ------------- .../{bleremote.py => ble&IRremote.py} | 9 +- code/ir_receive.py | 67 +++++++++++++++ 6 files changed, 111 insertions(+), 191 deletions(-) delete mode 100644 code/examples/IR_control&screen.py delete mode 100644 code/examples/IR_control.py rename code/examples/{bleremote.py => ble&IRremote.py} (91%) create mode 100644 code/ir_receive.py diff --git a/code/ble.py b/code/ble.py index 99dbd5a..d72a608 100644 --- a/code/ble.py +++ b/code/ble.py @@ -105,7 +105,7 @@ def notify(self, data): def is_connected(self): return len(self._connections) > 0 - def _advertise(self, interval_us=500000): + def _advertise(self, interval_us=100000): print("Starting advertising") self._ble.gap_advertise(interval_us, adv_data=self._payload) diff --git a/code/car.py b/code/car.py index 40d74f7..768bd4b 100644 --- a/code/car.py +++ b/code/car.py @@ -6,10 +6,19 @@ from ssd1306 import SSD1306_I2C #从ssd1306模块中导入SSD1306_I2C子模块 import framebuf import time - +from ir_receive import IRrec #编码盘计数 count1 = 0 count2 = 0 +#遥控器指令表 +IR_FORWARD=48 +IR_BACKWARD=164 +IR_LEFT=16 +IR_RIGHT=180 +IR_STOP=56 +IR_LIGHT_ON=44 +IR_LIGHT_OFF=26 + class CAR(): @@ -53,7 +62,8 @@ def __init__(self): self.t5 = Pin(39, Pin.IN, Pin.PULL_UP) #红外接收头 - self.IR = Pin(32, Pin.IN) + self.IR = IRrec(32) + self.IR.callback(self.getIR) #屏幕 self.i2c=SoftI2C(sda=Pin(25), scl=Pin(23)) @@ -308,44 +318,29 @@ def T5(self): return self.t5.value() #红外接收解码 - def getIR(self): - - if (self.IR.value() == 0): - count = 0 - while ((self.IR.value() == 0) and (count < 100)): #9ms - count += 1 - time.sleep_us(100) - if(count < 10): - return None - count = 0 - while ((self.IR.value() == 1) and (count < 50)): #4.5ms - count += 1 - time.sleep_us(100) - - idx = 0 - cnt = 0 - data = [0,0,0,0] - for i in range(0,32): - count = 0 - while ((self.IR.value() == 0) and (count < 10)): #0.56ms - count += 1 - time.sleep_us(100) - - count = 0 - while ((self.IR.value() == 1) and (count < 20)): #0: 0.56mx - count += 1 #1: 1.69ms - time.sleep_us(100) - - if count > 7: - data[idx] |= 1<> 1)|(v << 8) + self._sc += 1 + if (self._sc > 7): + self._sc = 0 + self._sb += 1 + if (self._sb > 3): + if ((self._sr[0] ^ self._sr[1] ^ self._sr[2] ^ self._sr[3]) == 0):#异或校验2组数据完整性 根据红外协议来讲 没问题pass 有问题清空重新来过 + self._address = self._sr[0] + self._command = self._sr[2] + if (self._cb): + self._cb(self, self._address, self._command) + self._rst() + + def _ic_cb(self, pin): + + self._ic_start = ticks_us()#时间 + icw = ticks_diff(self._ic_start, self._ic_last) + self._ic_last = self._ic_start + self._ic_width = icw + self._id += 1 + if (icw > 5500): + pass + elif (icw > 4000):#一个高低信号 大于 4ms 4.5ms 是发送结束 和起始 + self._rst() + elif (icw > 2500): # Repeat command#一个高低信号 大于 2.5ms 结束码2.5ms 收到 结束信号直接结束 + pass + elif (icw > 1500):#一个高低信号 大于 1.5ms 有效信号处理 + self._bit(1) # High bit + else: + self._bit(0) # Low bit#低8位 小于 1.5ms的 有效信号处理 + # print('Low bit') + + + def callback(self, fn): + self._cb = fn + + +def nec_cb(nec, a, c): + print(a, c) + +from ir_receive import IRrec +nec = IRrec(35) +nec.callback(nec_cb)