Arduino - 正弦波数值的采样与应用
来源:互联网 发布:用友u8软件介绍 编辑:程序博客网 时间:2024/06/05 07:15
嵌入式系统中许多应用中需要对正弦函数采样,得到一个范围在[0, 1]按正弦规则变化的数组。简单的例子如呼吸灯和警报声等。本文以Arduino UNO为平台总结正弦函数采样的方法及使用例子。
基本步骤为:
- 使用for循环,定义采样间隔变量x(例如0~179°)
- 将角度间隔(1°)转换为弧度间隔,并对正弦函数进行采样
- 对采样值进行适当转换,缩放到我们的应用需要的取值范围之中
- 使用上述转换后的值驱动外设
- 适当延时以保证正弦采样正常进行
1. 正弦函数采样
Arduino通过 sin(x) 函数获取正弦函数的在弧度x点的值。如果需要按角度采样,则首先要将参数x转换成弧度,采样代码如下:
float sinVal; for(int x=0; x<180; x++){ //转化角度到弧度 sinVal = (sin(x*(3.1412/180))); }
2. 呼吸灯示例
将LED正极通过100Ω的限流电阻与数字引脚11连接,LED负极与Arduino I/O板的GND连接搭建简单电路。
int ledPin = 11; //定义LED引脚11float sinVal; //存储正弦值int ledVal; //存储LED亮度值void setup() { pinMode(ledPin,OUTPUT);}void loop() { // put your main code here, to run repeatedly: for(int x=0; x<180; x++){ //当用sin函数时转化角度单位到弧度单位 sinVal = (sin(x*(3.1412/180))); ledVal = int(sinVal*255);//<span style="font-family: Arial, Helvetica, sans-serif;"> 将正弦采样值转换到合适的亮度值</span> analogWrite(ledPin,ledVal); delay(25); }}
3. 报警器示例
是用一个压电扬声器的正负极分别连接Arduino的数字引脚8和GND,搭建一个简单的发声电路。代码如下:
float sinVal; //存储正弦值int toneVal; //存储发声频率void setup() { pinMode(8,OUTPUT);}void loop() { for(int x=0; x<180; x++){ //转化角度到弧度 sinVal = (sin(x*(3.1412/180))); //用sin函数值产生声音频率 toneVal = 2000 + (int(sinVal*1000)); // 将正弦采样值转换到合适的声音频率点 tone(8,toneVal); //引脚8,输出频率toneVal(Hz) delay(2); //延时2ms,以保证正弦波以需要的速度变化 }}
0 0
- Arduino - 正弦波数值的采样与应用
- Gibbs 采样的应用
- PIC16模拟串口以及采样正弦波
- 卷积与采样还原、滤波器的联系(应用篇)
- 示波器的采样频率与采样深度
- 采样点数与采样频率的区别
- 曲线采样数值 图层的个人理解
- ROS在ARDUINO的应用
- 正弦波
- 正弦波
- 从大数据中随机采样与排列----groupby与apply的应用
- 【NGUI】各个组件的应用与数值获取
- 方波与正弦波效率问题
- 图像的降采样与升采样笔记
- STM32的ADC采样与多通道ADC采样
- Netduino与Arduino的对比
- 直线和正弦波的故事
- 正弦波调光器的工作原理
- expect用法
- 1103. Integer Factorization (30)
- Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(一)
- [Leetcode]Perfect Squares(DP and Math Solution)
- matlab 图像几何变换 平移、旋转、缩放
- Arduino - 正弦波数值的采样与应用
- linux expect的使用详解
- Sicily 1753 解码
- LeetCode Largest Rectangle in Histogram(栈的使用)
- 在.NET中隐藏标签栏的方法
- 当发运后,成品数据一直在stage仓,造成不能立账的处理方法
- java反射机制学习
- 1.1.1.8、FrugalWare
- LeetCode -- Search a 2D Matrix II