Arduino 距离传感器

该代码示例展示了如何使用Arduino控制超声波传感器进行距离测量,并根据测量结果通过蜂鸣器播放音符。在循环中,它首先发送触发信号,测量回波时间,然后计算与物体的距离。如果距离超过100cm,则设定为100cm。延迟时间与距离成正比,影响音乐节奏。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

const int trigPin = 3; // 传感器trig引脚连接到开发板模拟口3
const int echoPin = 2; // 传感器Echo引脚连接到开发板模拟口2

long duration, distance;
int tonePin = A0; //蜂鸣器的pin

void setup() {

  Serial.begin(9600);        // 开始 Serial Terminal 串口监视器

  pinMode(trigPin, OUTPUT);  // 将trigPin设置为输出

  pinMode(echoPin, INPUT);  //将echoPin设置为输入

  pinMode(tonePin, OUTPUT); //设置蜂鸣器的pin为输出模式

}


void loop() {

  digitalWrite(trigPin, LOW);  // 先将trigPin设置为低电平状态2微秒
  delayMicroseconds(2);

  digitalWrite(trigPin, HIGH); //再将trigPin设置为高电平状态10微秒
  delayMicroseconds(10);
  
  digitalWrite(trigPin, LOW);

  Serial.print(distance);        //在串口监视器打印出距离
  Serial.print("cm");
  Serial.println();

  tone(tonePin, 441); //此函数依次播放t1序列里的数组,即每个 音符
  duration = pulseIn(echoPin, HIGH); //计算echoPin在高电平状态的时长
  distance = duration * 0.034 / 2;  // 计算传感器跟物体之间的距离
  delay(20);
  noTone(tonePin);//停止当前音符,进入下一音符

  if (distance > 100) {
    distance = 100;
  }
  delay(distance * 10); //每个音符持续的时间,即节拍d1,是调整时间的越大,曲子速度越慢,越小曲子速度越快,自己掌握吧
  Serial.print("delay:");
  Serial.print(distance * 10);
  Serial.println();
  Serial.print("------");
  Serial.println();

  delay(10);

}

public class MainActivity extends Activity implements SensorEventListener{ public static final String TAG = "SensorTest"; private SensorManager sensorManager; private TextView tv; private PowerManager localPowerManager = null;// 电源管理对象 private WakeLock localWakeLock = null;// 电源锁 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); tv = (TextView) findViewById(R.id.tv); localPowerManager = (PowerManager) getSystemService(POWER_SERVICE); // 获取PowerManager.WakeLock对象,后面的参数|表示同时传入两个值,最后的是LogCat里用的Tag localWakeLock = this.localPowerManager.newWakeLock(32, "hahaha");// 第一个参数为电源锁级别,第二个是日志tag } @Override protected void onResume() { sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY), SensorManager.SENSOR_DELAY_UI); super.onResume(); } @Override protected void onPause() { sensorManager.unregisterListener(this); super.onPause(); } @Override public void onSensorChanged(SensorEvent event) { // TODO Auto-generated method stub float[] values = event.values; switch (event.sensor.getType()) { case Sensor.TYPE_PROXIMITY: tv.setText(values[0] + ""); if (values[0] == 0.0) {// 贴近手机 System.out.println("hands up"); Log.d(TAG, "hands up in calling activity"); if (localWakeLock.isHeld()) { return; } else { localWakeLock.acquire();// 申请设备电源锁 } } else {// 远离手机 System.out.println("hands moved"); Log.d(TAG, "hands moved in calling activity"); if (localWakeLock.isHeld()) { return; } else { localWakeLock.setReferenceCounted(false); localWakeLock.release(); // 释放设备电源锁 } break; } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值