Arduino - 正弦波数值的采样与应用

嵌入式系统中许多应用中需要对正弦函数采样,得到一个范围在[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引脚11
float 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,以保证正弦波以需要的速度变化
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值