Arduino 歌曲中用数组执行判断以调节速度,怎么办(这对于一个初学者来说.....你们来看看吧)

Arduino 歌曲中用数组执行判断以调节速度,怎么办(这对于一个初学者来说.....你们来看看吧),第1张

似乎步长对应关系,+100  -0.1

而且else if (...<600)写在else if (....<500)之前,是错误的,导致后面的500,再次600栏无效..

如果analogRead值和time的倍数有线性的对应关系,(所给代码有误,对应不了,假设对应)

100, 200, 300, 400, 500, 600, 700, 800, 900, 1000 对应

  1, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1

写成函数

int calculateTime(int reading,int timeunit){

   float rs=100, ts=0.1

   return timeunit*(1-ts*int(reading/rs))

}

//整个if else if else if改写成

int newtime=calculateTime(analogRead(A0), time){

if(newtime<0){//读数大于等于1000,不替换原来的time

  noTone(2)  

  delay(time*1000)

}else time=newtime//读数小于1000,兼容后面的代码,替换原来的time..

//后面接原来的乐符代码等等

tone(2,NOTE_G3) //前奏

代码未经实测,只体现思路,领会后调试好

烧写以下代码到UNO:

const int EchoPin = 2//超声波信号输入

const int TrigPin = 3//超声波控制信号输出

int currDist = 0

void setup(){

pinMode(EchoPin, INPUT)

for (int pinindex = 3pinindex <8pinindex++) {

pinMode(pinindex, OUTPUT)// set pins 3 to 10 as outputs

}

pinMode(A0,OUTPUT)

pinMode(A1,OUTPUT)

pinMode(A2,OUTPUT)

pinMode(A3,OUTPUT)

digitalWrite(A0,LOW)

digitalWrite(A1,LOW)

digitalWrite(A2,LOW)

digitalWrite(A3,LOW)

Serial.begin(9600)

}

void loop(){

currDist = MeasuringDistance()//读取前端距离

//Serial.println(currDist)

if(currDist >25){

}

//power开关看个人需要,这里没有启用

//else if(currDist <8){

// mpower()

// }

else if(currDist <7){

mpause()

}

else if(currDist <15){

mnext()

}

else if(currDist <25){

mprev()

}

}

long MeasuringDistance() {

long duration

digitalWrite(TrigPin, LOW)

delayMicroseconds(2)

digitalWrite(TrigPin, HIGH)

delayMicroseconds(10)

digitalWrite(TrigPin, LOW)

duration = pulseIn(EchoPin, HIGH)

return duration / 29 / 2

}

//mplay播放

void mplay() {

digitalWrite(A0, HIGH)

delay(100)

digitalWrite(A0, LOW)

Serial.println("mplay")

}

//mprev上一首

void mprev() {

digitalWrite(A1, HIGH)

delay(1000)

digitalWrite(A1, LOW)

Serial.println("mprev")

}

//mnext下一首

void mnext() {

digitalWrite(A2, HIGH)

//return

delay(1000)

digitalWrite(A2, LOW)

Serial.println("mnext")

}

//mpause暂停

void mpause() {

digitalWrite(A0, HIGH)

delay(1000)

digitalWrite(A0, LOW)

Serial.println("mpause")

}

//mpower

//void mpower() {

// digitalWrite(A3, HIGH)

// delay(500)

//digitalWrite(A3, LOW)

// Serial.println("mpower")

//}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11299216.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存