Micropython学习交流群 学习QQ群:786510434 提供多种固件下载和学习交流。

Micropython-扇贝物联 QQ群:31324057 扇贝物联是一个让你与智能设备沟通更方便的物联网云平台

Micropython学习交流群 学习QQ群:468985481 学习交流ESP8266、ESP32、ESP8285、wifi模块开发交流、物联网。

Micropython老哥俩的IT农场分享QQ群:929132891 为喜欢科创制作的小白们分享一些自制的计算机软硬件免费公益课程,由两位多年从事IT研发的中年大叔发起。

Micropython ESP频道

micropython制作的旋转立方块,ssd1306显示


micropython制作的旋转立方块,ssd1306显示

5c751f972aeb4.png

以前单片机经常看到有显示旋转立方块的,但都是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.011019945144653 seconds