arduino python firmate_processing firmata协议及数组训练
要求:
最初想法:绘制一个图形,通过图形的变化或者鼠标点击什么图案,arduino上面的led灯亮暗变换。
因为想熟练数组的运用,所以在绘制图形的时候想通过数组来绘制图形,但是我发现如果一味的想运用上数组,反而会本末倒置,把绘图复杂化。(因为在我的想法里,数组在绘图方面是用来绘制一样的图形,不过是它们的大小,位置等可以通过数组来变化,但是在我目前绘制的图形中,并没有需要很多个一样的图形,所以我把最初的想法放弃了)
然后我就开始想通过数组我能绘制什么,于是我想到了我可以绘制多个圆,并且让它们旋转从而增加趣味性。
然后通过数组我可以改变圆的大小。
我还可以改变它们的颜色,于是我就想到了彩虹的七色。然后又可以随着颜色的变换,arduino上的led灯一个一个亮起来,这就意味者我需要7个灯,但是在摆放灯的时候我放了10个,因为刚好可以布成一个爱心桃。
思路理清楚了 接着我就开始做processing的部分了,因为圆需要旋转所以得运用到rotate();函数
但是我又需要它不停的旋转所以我打算在rotate函数里加个自定义变量 即 rotate(i);
然后在后面给i一个增量,圆就可以不停的旋转了。
不过在旋转这里我得提一点 就是 rotate(PI/i);是以圆心为轴旋转 ,这样达不到我需要的效果 舍弃
而 rotate(i)则是以圆外某一点为轴旋转 符合我想要的要求。
圆能旋转了, 但是我得控制它们旋转轴的具体左边啊。
这时候就需要translate()函数了, 通过它可以确定中心轴的坐标
通过以上可以得出,结合translate和rorare 再给以一个变量,即可让一个图形绕着某点不停的旋转
接下来就是通过数组绘制7个圆了, 在数组的定义过程中,因为我想改变的是圆的大小,从50到350 以50单位递增,
所以在定义数组的时候就想运用for函数,这样就方便许多,。。但是可能是我在定义数组这方面还是不是很了解,所以只能用最笨的方法来定义了。
因为没有专门截图,但是下图
可以看出来我用最笨的方法定义
(圆在背景前面)
这张图也是我碰到的一个麻烦,就是当我想运用数组画圆出来的时候,发现能够顺利输出,结果却没反应。
经过思考过后,发现会不会是因为把圆放在background前面了,因为之前有学到过,在draw循环里加个background可以把之前的东西清空,即不会留下一些图形运动的痕迹。
(放在背景后面)
果然成功了。
上图只是测试能不能运用数组成功画出10等大的圆,成功后,我就用了之前所说过的,translate函数把它们选择的中心轴设置画布的中心,然后通过调整上图
ellipse(400,q*10,x[a],x[a]) 中的
x轴和y轴可以控制圆之间的距离,即疏密程度。
接下来processing部分没什么大问题了
接着就是arduino部分了,还有就是firmate协议
先连接好电路,跟之前的有个作业一样 我连成了心形,大致物理图如下
想要将p和a交互起来,在这里用到了firmata协议,首先现在arduino软件上将协议烧录进arduino里,
然后我通过processing里面的示例,将里面关于调用协议的内容加入到了我的代码中,然后达到了交互的效果。
当然在此也碰到了很多小问题,因为对firmata协议的不理解和不熟悉,走了很多弯路,最后也是勉强成功的。
说是勉强成功是因为 我的确可以控制灯亮起来,但是我在里面输入了low的编码时,却暗不下来,而且因为led灯连的端口的不同
9-12号端口的光特别特别暗 也不知道是为什么。 而且随着灯的编码变多 processing里的图案居然会变得延迟。
以下是实际操作代码:
import
processing.serial.*; //输入输出processing和arduino的数据
import
cc.arduino.*; //引入firmata协议
Arduino arduino; //
新建一个arduino的变量
float i=0; //控制旋转的变量
float speed=0.001; //旋转变量的增量 即旋转的速度
int [] x = new int[9]; //定义数列X的长度为9
int t=0; //自定义变量用来控制颜色的变换和灯的变换
void setup(){
size(1000,1000);
x[0]=50;
x[1]=80;
x[2]=120;
x[3]=150;
x[4]=180;
x[5]=210;
x[6]=240;
x[7]=270;
x[8]=300; //数量里面每个具体的数
arduino = new Arduino(this, Arduino.list()[0],
57600); //将Arduino里面传来的信号储存在变量arduino中
for (int i = 0; i <= 13; i++)
arduino.pinMode(i, Arduino.OUTPUT); //设置数字输出端口
}
void draw(){
background(0);
translate(500,500); //图形旋转的中心轴
for(int a=0; a<9;a++){
rotate(i);
ellipse(20,800,50,50); //绘制10个相同大小的圆
ellipse(400,20,50,50); //同上
ellipse(500,20,50,50);//同上
ellipse(20,a*50,x[a],x[a]); //绘制10个等大的圆
i+=speed; // 旋转的速度
t++;
if(t>2000){fill(255,0,0);} //当t>2000时 填充红色
if(t>3000){fill(#FF5303);} // 当t>3000s时 填充橙色
if(t>4000){fill(#FF5303);}
if(t>5000){fill(#FFF308);}
if(t>6000){fill(#23FF08);}
if(t>7000){fill(#08FFF1);}
if(t>8000){fill(#0896FF);}
if(t>9000){fill(#7C1AFF);}
if(t>10000){fill(#E000FF);} //当t>10000时 填充紫色
if(t>12000){fill(random(255),random(255),random(255));}
//当t>12000 填充彩色
if(t>14000){fill(random(255));} // 当t>14000 填充黑白频闪
if(t>16000){t=1000;} // 当t>16000 恢复白色 重新开始颜色轮回
if(t>0){arduino.digitalWrite(3,Arduino.HIGH); } //黑白圆时候
3号端口的灯亮
if(t>2000){arduino.digitalWrite(4,Arduino.HIGH); } //红色圆时候
4号端口灯亮
//为什么在这里不想做一亮一暗的效果,是因为不知道为什么加了一条Low后
led灯之会暗一点点,真的就一点点,再加上加上Low processing里的动画效果居然有很大的延迟, 所以舍弃了。
if(t>3000){arduino.digitalWrite(5,Arduino.HIGH);} //原理同上
if(t>4000){arduino.digitalWrite(6,Arduino.HIGH);}
if(t>5000){arduino.digitalWrite(7,Arduino.HIGH);}
if(t>6000){arduino.digitalWrite(8,Arduino.HIGH);}
if(t>7000){arduino.digitalWrite(9,Arduino.HIGH);}
if(t>8000){arduino.digitalWrite(10,Arduino.HIGH);}
if(t>9000){arduino.digitalWrite(11,Arduino.HIGH);}
if(t>10000){arduino.digitalWrite(12,Arduino.HIGH);}//原理同上
}
}
没有延迟单纯processi的视频
arduino python firmate_processing firmata协议及数组训练相关推荐
- python firmata协议利用arduino操控麦克纳姆轮小车(附完整代码)
python firmata协议利用arduino操控麦克纳姆轮小车 前言 一.python中pyfirmata的环境 材料 二.使用步骤 1.小车的安装方式 我在这采用的是X型安装方式 总结 前言 ...
- python控制机械臂6轴_基于Firmata协议的ROS Moveit六轴机械臂设计
ROS(Robot Operating System,开源机器人操作系统)是目前较为火热的一个一个机器人开发者平台.依赖于强大的资源库和开发者社区,ROS可以说是风靡全球. 在机器人开发的领域,机械臂 ...
- 下载MNIST数据集并使用python将数据转换成NumPy数组(源码解析)
下载MNIST数据集并使用python将数据转换成NumPy数组 首先来分析init_mnist函数 接下来继续分析load_mnist函数 实现数据集转换的python脚本的代码 显示MNIST图像 ...
- Python计算两个numpy数组的交集(Intersection)实战:两个输入数组的交集并排序、获取交集元素及其索引、如果输入数组不是一维的,它们将被展平(flatten),然后计算交集
Python计算两个numpy数组的交集(Intersection)实战:两个输入数组的交集并排序.获取交集元素及其索引.如果输入数组不是一维的,它们将被展平(flatten),然后计算交集 目录
- python基于模型对测试集和训练集的预测概率结果文件可视化模型的校准曲线、多个模型的校准曲线(calibration curve)
python基于模型对测试集和训练集的预测概率结果文件可视化模型的校准曲线.多个模型的校准曲线(calibration curve) 目录
- python笔记3(numpy数组)
记录python听课笔记 文章目录 记录python听课笔记 一,数组创建 1.创建NumPy数组 1.1一维数组和二维数组的创建和访问 1.2三维数组 1.3数组元素的数据类型 1.4arange( ...
- 是否有可能从python中的句子语料库重新训练word2vec模型(例如GoogleNews-vectors-negative300.bin)?
是否有可能从python中的句子语料库重新训练word2vec模型(例如GoogleNews-vectors-negative300.bin)? http://www.voidcn.com/artic ...
- 如何在Python中定义二维数组
我想定义一个没有初始化长度的二维数组,如下所示: Matrix = [][] 但这不起作用... 我已经尝试过下面的代码,但是它也是错误的: Matrix = [5][5] 错误: Traceback ...
- python语言怎么输入-python如何用input输入数组
python如何用input输入数组 发布时间:2020-10-16 17:43:27 来源:亿速云 阅读:113 作者:小新 小编给大家分享一下python如何用input输入数组,相信大部分人都还 ...
最新文章
- win8计算机管理打不开,win8,资源管理器未响应,文件夹打不开,假死……
- 创建型模式--原型模式
- SQL SERVER深入学习学习资料参考
- java获取net地址 本机
- 封装动态数组类Array
- 基于JAVA+SpringMVC+Mybatis+MYSQL的驾校预约系统
- 2019年8月19日矩阵
- Task Office for mac(任务办公计划管理)
- 【大数据部落】WEKA文本挖掘分析垃圾邮件分类模型
- 关于Java中volatile关键字笔记
- 基于卷积神经网络的人脸表情识别综述
- 探索反汇编-在Linux环境下
- Arcmap特殊注记
- Python实现检测文件的MD5值来查找重复文件
- 跳表SkipList介绍与实现
- solidworks管道设计教程
- 为什么要说“链上KYC”是Web3.0失败的前奏
- p2p技术之tcp内网穿透 java实现版
- 很多人都在说Java已经饱和了,未来的就业前景究竟怎么样?
- 人工智能是研究开发能够模拟、延伸和扩展人类智能的技术
热门文章
- 百度NeurIPS全球顶会冠军团队,带你7日从零实践强化学习
- 【建议收藏】MD5 算法的Java Bean
- 线段树之延时标记(区间修改)及lazy思想
- java.exe 安装程序_java实现可安装的exe程序实例详解
- 【MyBatis使用】mapper.xml 文件内<if test>标签判断参数值不等于null和空 当参数值为 0 时筛选条件失效原因分析(源码探究)
- sqlserver执行更新语句失败报错42S22
- Inverse of Rows and Columns
- Permute Digits
- 【异步编程学习笔记】JDK中的FutureTask和CompletableFuture详解(使用示例、源码)
- 【后端过程记录】用flask搭建服务器作后端接收数据 将base64字符串码解码为可读取文件 载入训练好的模型进行预测