Micropython学习交流群 学习QQ群:786510434 提供多种固件下载和学习交流。
Micropython-扇贝物联 QQ群:31324057 扇贝物联是一个让你与智能设备沟通更方便的物联网云平台
Micropython学习交流群 学习QQ群:468985481 学习交流ESP8266、ESP32、ESP8285、wifi模块开发交流、物联网。
Micropython老哥俩的IT农场分享QQ群:929132891 为喜欢科创制作的小白们分享一些自制的计算机软硬件免费公益课程,由两位多年从事IT研发的中年大叔发起。
micropython制作的旋转立方块,ssd1306显示
以前单片机经常看到有显示旋转立方块的,但都是arduino,找了一圈经常没发现有Mpy的,也可能是我搜的关键词不对,管他呢,自己移植一个,用到的知识有矩阵计算、3d物品在2d平面的投影等,也是一知半解,主要程序移植对了就行,不多说了,上代码
from math import cos,sin,pi from machine import SoftI2C,Pin from ssd1306 import SSD1306_I2C cube=[[-15,-15,-15],[-15,15,-15],[15,15,-15],[15,-15,-15],[-15,-15,15],[-15,15,15],[15,15,15],[15,-15,15]] lineid=[1,2,2,3,3,4,4,1,5,6,6,7,7,8,8,5,8,4,7,3,6,2,5,1] i2c=SoftI2C(scl=Pin(44),sda=Pin(43)) oled=SSD1306_I2C(128, 64,i2c,addr=0x3c) oled.fill(0) def matconv(a,matrix): res=[0,0,0] for i in range(0,3): res[i]=matrix[i][0]*a[0]+matrix[i][1]*a[1]+matrix[i][2]*a[2] for i in range(0,3): a[i]=res[i] return a def rotate(obj,x,y,z): x=x/pi y=y/pi z=z/pi rz=[[cos(z),-sin(z),0],[sin(z),cos(z),0],[0,0,1]] ry=[[1,0,0],[0,cos(y),-sin(y)],[0,sin(y),cos(y)]] rx=[[cos(x),0,sin(x)],[0,1,0],[-sin(x),0,cos(x)]] matconv(matconv(matconv(obj,rz),ry),rx) def drawcube(x,y,z): oled.fill(0) for i in range(0,8): rotate(cube[i],x,y,z) for i in range(0,24,2): x1=int(64+cube[lineid[i]-1][0]) y1=int(32+cube[lineid[i]-1][1]) x2=int(64+cube[lineid[i+1]-1][0]) y2=int(32+cube[lineid[i+1]-1][1]) oled.line(x1,y1,x2,y2,1) #print(64+cube[lineid[i]-1][0],32+cube[lineid[i]-1][1],64+cube[lineid[i+1]-1][0],32+cube[lineid[i+1]-1][1]) oled.show() while 1: drawcube(0.1,0.2,0.3)
来源:https://blog.csdn.net/jd3096/article/details/125952682
Copyright © 2014 ESP56.com All Rights Reserved
执行时间: 0.011337995529175 seconds