所有分类
主题 主题
平台 平台
我的工作台
userHead
注册时间 [[userInfo.create_time]]
创造力 [[userInfo.creativity]]
[[userInfo.remark]]
[[d.project_title]]
articleThumb
[[d.material_name]]
timelineThumb
进入工作台
折叠
所有分类 我的工作台
展开
【PinPong】520的心心相印,居然有bug!!!
宙仔 宙仔 2021-05-09 03:01:25
0
0
简单

继续玩Oled!还是DF提供的PinPong库!!!

 5·20又来了,继续用技术男的方式进行表白,这次就用oled屏来画个“心心相印”吧。

projectImage

     为了方便绘制,我们用绘图软件先画好草图,记下每个关键点的坐标。

     通过查看Pinpong库中oled参数有描点、划线、画正方形、画圆的函数,里面居然没有画弧线的函数,好吧,那就还是用描点的方法来写一个绘制弧线的函数吧。

       我们根据数学中圆的参数方程可以得知,圆弧上的每个坐标可以通过圆心坐标,半径和对应的角度(弧度单位)来表示出来。因此,我们可以利用圆的参数方程来设置oled中绘制圆弧的函数drawcircle(x,y,r,a,b)。我们可以通过圆心坐标(x,y),半径r和角度范围(a,b)来实现圆弧的绘制。

  

projectImage

说明:函数中没有oled.show(),是先好绘图最后才显示。

弧线的绘制,0度是在3点位置,

此处使用了python的math库,因此,在python程序中必须要导入math库,

线段的绘制我们可以使用oled库中自带的line函数。

依次使用drawcircle()和line()按照上图中标定的坐标点,画出相应的图形即可。

贴个代码:

projectImage

运行程序后,what?怎么心碎了~~~

projectImage

特别说明,运行fill(1)的时候,每个区域都能点亮的。

为了证实是否是显示屏的出现了状态,在“心碎”区域划线(见下python代码),线段变成一个“点”了~~~完全不能显示出来!!!

代码 代码
	                    					from pinpong.board import Board

from pinpong.libs.dfrobot_ssd1306 import SSD1306_I2C

 

Board("uno").begin()               

oled = SSD1306_I2C(width=128,height=64)

 

oled.line(115,56,96,23,col=1)

oled.show()
	                    				
projectImage

 找葛老师测试了一下以上的代码,他的显示屏也出现了同样的情况!(大家也可以帮忙测试一下,看看是否是这个情况???)

 原以为是line函数的问题,自己也写了一个drawline的函数,结果也是一样!

不知道DF的技术是否注意到这个问题?

 好了,虽然oled屏让我们“心碎”,但我们的心心相印还继续做下去哈。

图案整体往前移20个像素点(y坐标不变,所有x坐标-20),看看是否完整?

运行后图形如下:

projectImage

有残缺,但并非心碎!

简单修改以下,变成以下图形:

projectImage

好了,最后贴上完整的代码!

代码 代码
	                    					import time
import math
from pinpong.board import Board,Pin
from pinpong.libs.dfrobot_ssd1306 import SSD1306_I2C


Board("uno").begin()               
oled = SSD1306_I2C(width=128,height=64)

def drawcircle(x,y,r,a,b):
    for i in range(a,b):
        rad=math.radians(i)
        oled.pixel(int(x+r*math.cos(rad)), int(y+r*math.sin(rad)),col=1)

drawcircle(20,23,16,180,310)
drawcircle(40,23,16,230,360)
drawcircle(60,23,16,230,360)
oled.line(4,23,30,56,col=1)
oled.line(30,56,56,23,col=1)
oled.line(40,44,50,56,col=1)
oled.line(50,56,75,23,col=1)
oled.text("IOU",60,23)
oled.text("20210520",64,48)
oled.show()
	                    				
Makelog作者原创文章,未经授权禁止转载。
0
0
评论
[[c.user_name]] [[c.create_time]]
[[c.parent_comment.count]]
[[c.comment_content]]