# 登月小車


心得:因為第一二節課有請假所以完全不知道要做什麼東,是我朋友教我怎麼用才知道,而且一開始根本找不到開關在哪,是一直呼叫老師幫忙才找到,歐然後我覺得這個電腦用起來好不習慣,我到現在上課這麼多次都還不會關機.
```javascript=
try:
def printExcept(e):
lcd.clear()
log = str(e)
sys.print_exception(e)
data_len, i, colume = 30, 0, 0
while i < len(log):
lcd.draw_string(50, 100 + (colume * 20), (log[i : i + data_len] + '\n'), 0x00F8, 0x0000)
i = i + data_len
colume = colume + 1
from time import sleep
from webai_blockly import Lcd
from time import sleep
try:
from webai import *
except:
pass
view = Lcd()
# RUN USB MODE
_deviceID = '3fd25c'
try:
print(_onServiceEvent)
from time import sleep
sleep(1)
webai.mqtt.sub(topic=_deviceID + '/SERVICE', callback=_onServiceEvent)
except:
pass
while True:
view.displayImg(img=(webai.res.loadImg('mleft.jpg')))
sleep(0.5)
view.displayImg(img=(webai.res.loadImg('mright.jpg')))
sleep(0.5)
sleep(0.001)
except Exception as e:
printExcept(e)
```


心得:竟然可以用這塊小面板拍照,雖然畫質沒有多好,但拍出來有種復古感的感覺,但是看上面的程式碼覺得好難,到底怎麼寫出來的,好好奇喔希望自己以後也可以寫出來這種酷程式,還好可以套模板嘿嘿不然我應該做不出來.
```javascript=
try:
def printExcept(e):
lcd.clear()
log = str(e)
sys.print_exception(e)
data_len, i, colume = 30, 0, 0
while i < len(log):
lcd.draw_string(50, 100 + (colume * 20), (log[i : i + data_len] + '\n'), 0x00F8, 0x0000)
i = i + data_len
colume = colume + 1
import _thread
import webai_blockly
from webai_blockly import Lcd
from webai_blockly import Camera
from time import sleep
from time import sleep
show = 0
try:
from webai import *
except:
pass
view = Lcd()
def _hex_to_rgb(hex):
h = hex.lstrip('#')
return tuple(int(h[i:i+2], 16) for i in (0, 2, 4))
def _rgb_to_hex565(rgb):
(red, green, blue) = rgb
hex565 = "0x%0.4X" % ((int(red / 255 * 31) << 11) | (int(green / 255 * 63) << 5) | (int(blue / 255 * 31)))
board_hex = '0x' + hex565[4:] + hex565[2:4]
return int(board_hex, 16)
camera = Camera()
def SYSTEM_THREAD_BTN_L_press(gpio, checkTime):
lastStatus = 1
while True:
if webai_blockly.SYSTEM_ALLOCATE_LOCK.locked():
webai_blockly.SYSTEM_ALLOCATE_LOCK.acquire()
webai_blockly.SYSTEM_ALLOCATE_LOCK.release()
value = gpio.value();
if value == 0 and lastStatus != 0:
lastStatus = 0
view.drawString(x=40, y=50, text=b"{var}".format(var='儲存中...'), color=_rgb_to_hex565(_hex_to_rgb('#ffffff')), scale=2, x_spacing=20, mono_space=False)
webai.fs.save('photo.jpg', (camera.snapshot()))
view.drawString(x=220, y=50, text=b"{var}".format(var='完成'), color=_rgb_to_hex565(_hex_to_rgb('#ffffff')), scale=2, x_spacing=20, mono_space=False)
sleep(1)
elif value == 1 and lastStatus != 1:
lastStatus = 1
time.sleep_ms(checkTime)
def _on_webai_btn_click(name, state):
if name == 'btnL' and state == 1:
try:
_on_webai_L_press()
except:
pass
elif name == 'btnL' and state == 2:
try:
_on_webai_L_release()
except:
pass
elif name == 'btnL' and state == 3:
try:
_on_webai_L_long()
except:
pass
elif name == 'btnR' and state == 1:
try:
_on_webai_R_press()
except:
pass
elif name == 'btnR' and state == 2:
try:
_on_webai_R_release()
except:
pass
elif name == 'btnR' and state == 3:
try:
_on_webai_R_long()
except:
pass
elif state == 4:
try:
_on_webai_LR_press()
except:
pass
def _on_webai_L_press():
view.drawString(x=40, y=50, text=b"{var}".format(var='儲存中...'), color=_rgb_to_hex565(_hex_to_rgb('#ffffff')), scale=2, x_spacing=20, mono_space=False)
webai.fs.save('photo.jpg', (camera.snapshot()))
view.drawString(x=220, y=50, text=b"{var}".format(var='完成'), color=_rgb_to_hex565(_hex_to_rgb('#ffffff')), scale=2, x_spacing=20, mono_space=False)
sleep(1)
try:
webai.addIoListener(_on_webai_btn_click)
except:
try:
webai.addBtnListener(_on_webai_btn_click)
except:
pass
def SYSTEM_THREAD_BTN_R_press(gpio, checkTime):
global show
lastStatus = 1
while True:
if webai_blockly.SYSTEM_ALLOCATE_LOCK.locked():
webai_blockly.SYSTEM_ALLOCATE_LOCK.acquire()
webai_blockly.SYSTEM_ALLOCATE_LOCK.release()
value = gpio.value();
if value == 0 and lastStatus != 0:
lastStatus = 0
show = True
sleep(0.1)
view.displayImg(img=(webai.res.loadImg('photo.jpg')))
elif value == 1 and lastStatus != 1:
lastStatus = 1
time.sleep_ms(checkTime)
def _on_webai_R_press():
global show
show = True
sleep(0.1)
view.displayImg(img=(webai.res.loadImg('photo.jpg')))
# RUN USB MODE
_deviceID = '3fd25c'
try:
print(_onServiceEvent)
from time import sleep
sleep(1)
webai.mqtt.sub(topic=_deviceID + '/SERVICE', callback=_onServiceEvent)
except:
pass
show = False
try:
print(webai.addIoListener)
except:
try:
print(webai.addBtnListener)
except:
_thread.start_new_thread(SYSTEM_THREAD_BTN_L_press, (webai_blockly.SYSTEM_BTN_L, 100))
try:
print(webai.addIoListener)
except:
try:
print(webai.addBtnListener)
except:
_thread.start_new_thread(SYSTEM_THREAD_BTN_R_press, (webai_blockly.SYSTEM_BTN_R, 100))
while True:
if not show:
view.displayImg(img=(camera.snapshot()))
if (webai_blockly.SYSTEM_BTN_R.value()) == 1:
show = False
sleep(0.001)
except Exception as e:
printExcept(e)
```


心得:好酷我都沒試過用一堆程式碼可以拼成一張圖,但是我應該還寫不出來這種這麼難的程式碼就只能套模板,雖然這個向日葵看起來很兒童版,但已經很厲害了!還沒試過上傳圖片,等把心得寫完來玩玩看
```javascript=
try:
def printExcept(e):
lcd.clear()
log = str(e)
sys.print_exception(e)
data_len, i, colume = 30, 0, 0
while i < len(log):
lcd.draw_string(50, 100 + (colume * 20), (log[i : i + data_len] + '\n'), 0x00F8, 0x0000)
i = i + data_len
colume = colume + 1
from webai_blockly import Lcd
i = 0
try:
from webai import *
except:
pass
view = Lcd()
def _hex_to_rgb(hex):
h = hex.lstrip('#')
return tuple(int(h[i:i+2], 16) for i in (0, 2, 4))
def _rgb_to_hex565(rgb):
(red, green, blue) = rgb
hex565 = "0x%0.4X" % ((int(red / 255 * 31) << 11) | (int(green / 255 * 63) << 5) | (int(blue / 255 * 31)))
board_hex = '0x' + hex565[4:] + hex565[2:4]
return int(board_hex, 16)
# RUN USB MODE
_deviceID = '3fd25c'
try:
print(_onServiceEvent)
from time import sleep
sleep(1)
webai.mqtt.sub(topic=_deviceID + '/SERVICE', callback=_onServiceEvent)
except:
pass
view.drawLine(x0=160, y0=103, x1=160, y1=240, color=_rgb_to_hex565(_hex_to_rgb('#cc0000')), thickness=10)
view.drawEllipse(x=190,y=205,rx=15,ry=37,rotation=50,color=_rgb_to_hex565(_hex_to_rgb('#33ff33')),thickness=1,fill=True)
view.drawEllipse(x=130,y=190,rx=15,ry=37,rotation=130,color=_rgb_to_hex565(_hex_to_rgb('#33ff33')),thickness=1,fill=True)
for i in range(0, 360 + 1, 30):
view.drawEllipse(x=160,y=100,rx=20,ry=80,rotation=(i + 15),color=_rgb_to_hex565(_hex_to_rgb('#ffff00')),thickness=1,fill=True)
view.drawCircle(x=160, y=100, radius=55, color=_rgb_to_hex565(_hex_to_rgb('#660000')), thickness=1, fill=True)
view.drawCircle(x=160, y=100, radius=52, color=_rgb_to_hex565(_hex_to_rgb('#ff9900')), thickness=1, fill=True)
view.drawLine(x0=160, y0=60, x1=200, y1=100, color=_rgb_to_hex565(_hex_to_rgb('#660000')), thickness=3)
view.drawLine(x0=145, y0=65, x1=195, y1=115, color=_rgb_to_hex565(_hex_to_rgb('#660000')), thickness=3)
view.drawLine(x0=130, y0=70, x1=190, y1=130, color=_rgb_to_hex565(_hex_to_rgb('#660000')), thickness=3)
view.drawLine(x0=125, y0=85, x1=175, y1=135, color=_rgb_to_hex565(_hex_to_rgb('#660000')), thickness=3)
view.drawLine(x0=120, y0=100, x1=160, y1=140, color=_rgb_to_hex565(_hex_to_rgb('#660000')), thickness=3)
view.drawLine(x0=145, y0=135, x1=195, y1=85, color=_rgb_to_hex565(_hex_to_rgb('#660000')), thickness=3)
view.drawLine(x0=175, y0=65, x1=125, y1=115, color=_rgb_to_hex565(_hex_to_rgb('#660000')), thickness=3)
view.drawLine(x0=190, y0=70, x1=130, y1=130, color=_rgb_to_hex565(_hex_to_rgb('#660000')), thickness=3)
view.drawLine(x0=120, y0=100, x1=160, y1=60, color=_rgb_to_hex565(_hex_to_rgb('#660000')), thickness=3)
view.drawLine(x0=160, y0=140, x1=200, y1=100, color=_rgb_to_hex565(_hex_to_rgb('#660000')), thickness=3)
except Exception as e:
printExcept(e)
```


心得:一開始超笨我把車子拿去充電以為接上去就好了不用控制板,結果老師衝過來說齁這充電啦,你沒有控制板要怎麼輸入程式吧拉吧拉,而且把控制板接上之後還忘記把開關打開,明明程式碼都上傳好了然後繼續呼叫老師顆顆,超級好笑
```javascript=
try:
def printExcept(e):
lcd.clear()
log = str(e)
sys.print_exception(e)
data_len, i, colume = 30, 0, 0
while i < len(log):
lcd.draw_string(50, 100 + (colume * 20), (log[i : i + data_len] + '\n'), 0x00F8, 0x0000)
i = i + data_len
colume = colume + 1
from ujson import loads, dumps
__on_line = {}
__on_sheet = {}
__on_monster = {}
def _onServiceEvent(topic, msg):
try:
data = loads(msg)
payload = data['payload']
if data['type'] == 'sheet':
if data['actionType'] == 'responseWrite':
__on_sheet['write' + payload['url'] + payload['name']](payload)
elif data['actionType'] == 'responseFeature':
__on_sheet[payload['url'] + payload['name']](payload)
elif data['actionType'] == 'responseData':
_google_sheet_receive_data()
__on_sheet[payload['cell']] = payload['value']
elif data['type'] == 'line':
if data['actionType'] == 'replyToken' or data['actionType'] == 'channelMsg':
eval('_on_channel_' + payload['channelID'])(payload)
elif data['type'] == 'monster':
if data['actionType'] == 'click':
eval('on_click_' + payload['monster'] + '()')
elif data['type'] == 'keyboard':
eval('_' + data['actionType'] + '_' + payload['keycode'])()
elif data['type'] == 'value_input':
_on_value_input_cb(payload['value'])
elif data['type'] == 'speech_to_text':
receive_speech_to_text(payload['value'])
except:
pass
try:
from webai import *
except:
pass
mcar.init()
def _CAR_FORWARD():
mcar.forward()
def _CAR_BACK():
mcar.backward()
def _CAR_LEFT_FORWARD():
mcar.move(0, 100)
def _CAR_LEFT_BACK():
mcar.move(0, -100)
def _CAR_RIGHT_FORWARD():
mcar.move(100, 0)
def _CAR_RIGHT_BACK():
mcar.move(-100, 0)
def _CAR_TURN_RIGHT():
mcar.right(100)
def _CAR_TURN_LEFT():
mcar.left(100)
def _CAR_STOP():
mcar.stop()
def _CAR_KEEP():
pass
def _onkeydown_38():
_CAR_FORWARD()
def _onkeydown_40():
_CAR_BACK()
def _onkeydown_37():
_CAR_TURN_LEFT()
def _onkeydown_39():
_CAR_TURN_RIGHT()
def _onkeydown_32():
_CAR_STOP()
# RUN USB MODE
_deviceID = '459795'
try:
print(_onServiceEvent)
from time import sleep
sleep(1)
webai.mqtt.sub(topic=_deviceID + '/SERVICE', callback=_onServiceEvent)
except:
pass
mcar.l_ratio = 1
mcar.r_ratio = 1
except Exception as e:
printExcept(e)
```



心得:這個是後來知道一定要做才補的,而且我把這個控制板想得太智能了,我以為他資料庫裡面就有顏色編碼,直接辨識就好,結果還得要幫他調亮度那些的,小麻煩但我覺得這個是好玩榜第二名,第一名是那個遙控車車,雖然那個遙控車車會瘋狂延遲但還是很好玩.
```javascript=
try:
def printExcept(e):
lcd.clear()
log = str(e)
sys.print_exception(e)
data_len, i, colume = 30, 0, 0
while i < len(log):
lcd.draw_string(50, 100 + (colume * 20), (log[i : i + data_len] + '\n'), 0x00F8, 0x0000)
i = i + data_len
colume = colume + 1
from time import sleep
from webai_blockly import Camera
from webai import ColorObject
from webai_blockly import Lcd
_E7_95_AB_E9_9D_A2 = 0
_E9_A1_8F_E8_89_B2_E8_B3_87_E8_A8_8A = 0
try:
from webai import *
except:
pass
camera = Camera()
view = Lcd()
def _hex_to_rgb(hex):
h = hex.lstrip('#')
return tuple(int(h[i:i+2], 16) for i in (0, 2, 4))
def _rgb_to_hex565(rgb):
(red, green, blue) = rgb
hex565 = "0x%0.4X" % ((int(red / 255 * 31) << 11) | (int(green / 255 * 63) << 5) | (int(blue / 255 * 31)))
board_hex = '0x' + hex565[4:] + hex565[2:4]
return int(board_hex, 16)
# RUN USB MODE
_deviceID = '3ee0be'
try:
print(_onServiceEvent)
from time import sleep
sleep(1)
webai.mqtt.sub(topic=_deviceID + '/SERVICE', callback=_onServiceEvent)
except:
pass
while True:
_E7_95_AB_E9_9D_A2 = camera.snapshot()
# 可點擊右鍵->小工具,使用顏色小工具選擇顏色
_E9_A1_8F_E8_89_B2_E8_B3_87_E8_A8_8A = ColorObject.findMax(_E7_95_AB_E9_9D_A2, (0,62,-18,-3,-48,-17))
if (_E9_A1_8F_E8_89_B2_E8_B3_87_E8_A8_8A.pixels() if _E9_A1_8F_E8_89_B2_E8_B3_87_E8_A8_8A else 0) > 10:
view.drawString(x=125, y=110, text=b"{var}".format(var='藍色'), color=_rgb_to_hex565(_hex_to_rgb('#ffffff')), scale=2, x_spacing=20, img=_E7_95_AB_E9_9D_A2, display=False)
view.displayImg(img=_E7_95_AB_E9_9D_A2)
sleep(0.001)
except Exception as e:
printExcept(e)
```



心得:
這個是後來補的,差點以為自己把東西都丟了,回去翻東西才發現還好沒有丟,我其實很不喜歡捍接,因為國中的時候有被機器燙傷過所以這個部分是請朋友幫助我完成的.