Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
楼主: 张延幸

张延幸:基于单片机的虚拟电子琴

[复制链接]

399

主题

1251

帖子

4020

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4020
发表于 2023-1-30 20:37:44 | 显示全部楼层
张延幸 发表于 2023-1-29 16:31
从官网上的下载地址进行下载,添加python和pip到环境变量,随后进行验证,验证通过 ...

好的,继续推进
回复

使用道具 举报

1

主题

20

帖子

149

积分

注册会员

Rank: 2

积分
149
 楼主| 发表于 2023-2-16 15:32:31 来自手机 | 显示全部楼层
本帖最后由 张延幸 于 2023-2-16 15:44 编辑

最近的进度:
1.完成了python的安装
2.学习了输出函数print,转义字符和原字符
3.学习了python中的标识符和保留字
4.了解了整数类型,浮点类型等类型以及各类型之间的转换
回复

使用道具 举报

1

主题

20

帖子

149

积分

注册会员

Rank: 2

积分
149
 楼主| 发表于 2023-3-11 11:41:30 | 显示全部楼层
开题报告

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

点评

1首页 标题格式不对(应该是水柱简体,你电脑上没装这个软件)2.第四部分的序号写成二了  发表于 2023-3-22 17:00
回复

使用道具 举报

1

主题

20

帖子

149

积分

注册会员

Rank: 2

积分
149
 楼主| 发表于 2023-3-22 17:59:46 | 显示全部楼层
按照要求进行了修改。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

1

主题

20

帖子

149

积分

注册会员

Rank: 2

积分
149
 楼主| 发表于 2023-3-23 18:02:19 | 显示全部楼层
复试完的周计划

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

399

主题

1251

帖子

4020

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4020
发表于 2023-3-24 21:34:00 | 显示全部楼层
单片机最小系统不用自己焊接,直接用现成的就行,精力往后放
回复

使用道具 举报

1

主题

20

帖子

149

积分

注册会员

Rank: 2

积分
149
 楼主| 发表于 2023-4-11 15:14:22 | 显示全部楼层
接下来的计划

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

1

主题

20

帖子

149

积分

注册会员

Rank: 2

积分
149
 楼主| 发表于 2023-4-14 16:01:23 | 显示全部楼层
这周顺利实现了python与51单片机的串口通信,通过手触摸光电传感模块,传递信号给电脑,但是面对不同的信号,python只显示同样的数据,接下来将尝试解决这个问题。下周将完成外部系统的构建,并尝试实现虚拟电子琴的显示

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

点评

用串口助手看一下数据是不是对的,如果串口助手获取的是不同的数据,而python是相同的,那说明问题在于python程序,否则可能是发送本身就不对。  发表于 2023-4-16 17:29
回复

使用道具 举报

1

主题

20

帖子

149

积分

注册会员

Rank: 2

积分
149
 楼主| 发表于 2023-4-19 16:23:33 | 显示全部楼层
python端程序(程序仍需修改)
import os  # 导入os模块,处理操作系统相关事务
import serial  # 导入serial模块,串口通信相关
from ursina import *
import random as rd
import time
import pygame

file1=r'D:\备用桌面\毕业设计\钢琴库\1.mp3'
file2=r'D:\备用桌面\毕业设计\钢琴库\2.mp3'
file3=r'D:\备用桌面\毕业设计\钢琴库\3.mp3'
file4=r'D:\备用桌面\毕业设计\钢琴库\4.mp3'
file5=r'D:\备用桌面\毕业设计\钢琴库\5.mp3'
file6=r'D:\备用桌面\毕业设计\钢琴库\6.mp3'
file7=r'D:\备用桌面\毕业设计\钢琴库\7.mp3'

com = serial.Serial('COM97', 9600)  # 打开指定串口,设置串口通信波特率

def rec_data():  # 接收数据函数
   a = com.read()  # 从串口接收数据,类型为bytes
   b = int(a.hex(), 16)  # 将接收的数据转化为16进制数字型,注意是数字型,不是字符串型
   if b == 0x80:  # 按照自己的要求进行条件判断
     paddle_A.y+=dy*time.dt
     if paddle_A.y<=3.1:
        pygame.mixer.init()
        track = pygame.mixer.music.load(file1)
        pygame.mixer.music.play()
        time.sleep(3)
        pygame.mixer.music.stop()
        paddle_A.y=3.7# 执行内容
   if b == 0x83:  # 按照自己的要求进行条件判断
     paddle_B.y+=dy*time.dt
     if paddle_B.y<=3.1:
        pygame.mixer.init()
        track = pygame.mixer.music.load(file2)
        pygame.mixer.music.play()
        time.sleep(3)
        pygame.mixer.music.stop()
        paddle_B.y=3.7  # 执行内容
   if b == 0xFF:  # 按照自己的要求进行条件判断
     paddle_C.y+=dy*time.dt
     if paddle_C.y<=3.1:
        pygame.mixer.init()
        track = pygame.mixer.music.load(file3)
        pygame.mixer.music.play()
        time.sleep(3)
        pygame.mixer.music.stop()
        paddle_C.y=3.7  # 执行内容
   if b == 0x82:  # 按照自己的要求进行条件判断
     paddle_D.y+=dy*time.dt
     if paddle_D.y<=3.1:
        pygame.mixer.init()
        track = pygame.mixer.music.load(file4)
        pygame.mixer.music.play()
        time.sleep(3)
        pygame.mixer.music.stop()
        paddle_D.y=3.7  # 执行内容
   if b == 0xFE:  # 按照自己的要求进行条件判断
     paddle_E.y+=dy*time.dt
     if paddle_E.y<=3.1:
        pygame.mixer.init()
        track = pygame.mixer.music.load(file5)
        pygame.mixer.music.play()
        time.sleep(3)
        pygame.mixer.music.stop()
        paddle_E.y=3.7  # 执行内容
   if b == 0x81:  # 按照自己的要求进行条件判断
     paddle_F.y+=dy*time.dt
     if paddle_F.y<=3.1:
        pygame.mixer.init()
        track = pygame.mixer.music.load(file6)
        pygame.mixer.music.play()
        time.sleep(3)
        pygame.mixer.music.stop()
        paddle_F.y=3.7  # 执行内容
   if b == 0xDA:  # 按照自己的要求进行条件判断
     paddle_G.y+=dy*time.dt
     if paddle_G.y<=3.1:
        pygame.mixer.init()
        track = pygame.mixer.music.load(file7)
        pygame.mixer.music.play()
        time.sleep(3)
        pygame.mixer.music.stop()
        paddle_G.y=3.7  # 执行内容
   if b == 0xD2:  # 按照自己的要求进行条件判断
     paddle_G.y+=dy*time.dt
     if paddle_G.y<=3.1:
        pygame.mixer.init()
        track = pygame.mixer.music.load(file7)
        pygame.mixer.music.play()
        time.sleep(3)
        pygame.mixer.music.stop()
        paddle_G.y=3.7  # 执行内容
   if b == 0xD6:  # 按照自己的要求进行条件判断
     paddle_G.y+=dy*time.dt
     if paddle_G.y<=3.1:
        pygame.mixer.init()
        track = pygame.mixer.music.load(file7)
        pygame.mixer.music.play()
        time.sleep(3)
        pygame.mixer.music.stop()
        paddle_G.y=3.7  # 执行内容

# 调用函数
   
app=Ursina()

window.color=color.cyan

table=Entity(model="cube",color=color.red,scale=(18,0.5,6),position=(0,0,0),texture="white_cube")
left=Entity(model="cube",color=color.red,scale=(1,0.5,6),position=(-8.5,0.5,0),texture="white_cube")
right=Entity(model="cube",color=color.red,scale=(1,0.5,6),position=(8.5,0.5,0),texture="white_cube")
middle=Entity(model="cube",color=color.red,scale=(16,0.5,2),position=(0,0.5,2),texture="white_cube")

paddle_A=Entity(parent=table,color=color.white,model="cube",scale=(0.12,0.4,0.6),position=(-0.35,3.7,-0.5),collider="box")
paddle_B=Entity(parent=table,color=color.white,model="cube",scale=(0.12,0.4,0.6),position=(-0.23,3.7,-0.5),collider="box")
paddle_C=Entity(parent=table,color=color.white,model="cube",scale=(0.12,0.4,0.6),position=(-0.11,3.7,-0.5),collider="box")
paddle_D=Entity(parent=table,color=color.white,model="cube",scale=(0.12,0.4,0.6),position=(0.01,3.7,-0.5),collider="box")
paddle_E=Entity(parent=table,color=color.white,model="cube",scale=(0.12,0.4,0.6),position=(0.13,3.7,-0.5),collider="box")
paddle_F=Entity(parent=table,color=color.white,model="cube",scale=(0.12,0.4,0.6),position=(0.25,3.7,-0.5),collider="box")
paddle_G=Entity(parent=table,color=color.white,model="cube",scale=(0.12,0.4,0.6),position=(0.35,3.7,-0.5),collider="box")

paddle_1=Entity(parent=table,color=color.black,model="cube",scale=(0.03,0.7,0.3),position=(-0.29,3.7,-0.36),collider="box")
paddle_2=Entity(parent=table,color=color.black,model="cube",scale=(0.03,0.7,0.3),position=(-0.17,3.7,-0.36),collider="box")
paddle_4=Entity(parent=table,color=color.black,model="cube",scale=(0.03,0.7,0.3),position=(0.07,3.7,-0.36),collider="box")
paddle_5=Entity(parent=table,color=color.black,model="cube",scale=(0.03,0.7,0.3),position=(0.19,3.7,-0.36),collider="box")
paddle_6=Entity(parent=table,color=color.black,model="cube",scale=(0.03,0.7,0.3),position=(0.29,3.7,-0.36),collider="box")

camera.position=(0,15,-26)
camera.rotation_x=30

dy=rd.uniform(-0.6,-0.7)

def update():
     global dy
     rec_data()

app.run()
回复

使用道具 举报

1

主题

20

帖子

149

积分

注册会员

Rank: 2

积分
149
 楼主| 发表于 2023-4-21 16:32:11 | 显示全部楼层
项目基本完成,python端程序处理琴键摁动与声音播放仍在完善之中
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2025-6-8 19:50 , Processed in 0.046463 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表