首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于Arduino的超声波传感器程序,输出高控制电机。

基于Arduino的超声波传感器程序,输出高控制电机。
EN

Code Review用户
提问于 2014-02-07 16:08:02
回答 1查看 4.9K关注 0票数 4

我是全新的C++和工作与Arduino微控制器。我一直在为我的大学工作的项目要求我编写代码来完成以下工作:

  • 如果超声波传感器检测到一定范围内的距离,输出较高的功率来激活电动机。
  • 如果传感器检测到超出此范围的距离,则输出较低的输出以使电机停用。
  • 我希望创建一个阵列,将超声波传感器的读数平均超过.5秒-1秒间隔,然后输出该平均值。
  • 我是从Arduino网站上提供的教程中附带的一个测距仪脚本开始的,所以我的目标是修改这个脚本以适应我的目标,根据我测试过的代码输出高或低,并且已经很好地测试了距离。

我正在寻找任何技巧来创建一个数组来平均与传感器的距离,然后使用一个for循环来测试它是在间隔中还是输出高还是低。

任何帮助和指导都将不胜感激!

代码语言:javascript
运行
复制
const int TriggerPin = 8;  //sensor trigger pin
const int EchoPin = 9;    //sensor echo pin
const int MotorPin = 7;  //motor out pin
long Duration = 0;

void setup(){
  pinMode(TriggerPin,OUTPUT);  //sets trigger as output
  pinMode(EchoPin,INPUT);      //sets echo as input
  pinMode(MotorPin,OUTPUT);    //sets motor as output
  Serial.begin(9600);          //displays to serial monitor 
}

void loop(){
 digitalWrite(TriggerPin,LOW);  //trigger pin to 0V
 delayMicroseconds(2);          //waits 2 us
 digitalWrite(TriggerPin,HIGH); //trigger pin to 5V
 delayMicroseconds(10);         //10 us delay to recieve ping
 digitalWrite(TriggerPin,LOW);

Duration = pulseIn(EchoPin,HIGH);  //waits for echo pin to get high
//pulseIn returns the Duration in microseconds 
long Distance_mm = Distance(Duration);  //uses function to calc. distance

delay(100);  //delay half second, do next measurement
}

long Distance(long time);
{

long DistanceCalc;  //calculation variable
DistanceCalc = ((time /2.9) / 2);

//want to average this DistanceCalc reading over 10 readings, then use this value to    compare to the desired range

void loop(){
  if  (dist_avg < 600 && dist_avg > 400);
  digitalWrite(MotorPin,HIGH);
  else
  digitalWrite(MotorPin,LOW);
}
//if average distance is within .4-.6 meter range, output HIGH; turns motor on
//if avergae distance is outside .4-.6 meter range, outut LOW; turns motor off
EN

回答 1

Code Review用户

发布于 2014-02-08 20:19:04

  • 根据C++命名约定,C++中只有用户定义的类型和宏才是大写的.常量、全局变量和函数应该以小写字母开头。
  • 由于常量是相似的,所以可以将它们分组为enum:enum { Motor=7,触发器,Echo };如果第一个设置为7,下面的参数将分别设置为8和9。这也有助于代码维护。如果需要添加另一个Pin,只需适当地将其插入enum,而不是创建另一个常量。
  • Duration只在loop()中使用,所以只需在那里初始化并使用它。将其作为全局变量可能会引发bug,否则是一种糟糕的做法。这通常适用于全局变量,因为它们在整个程序中都是可访问的,这意味着它们可以在任何地方更改。
  • 你在一些地方使用的是“魔法数字”(硬编码数字)。您应该将它们设置为变量或常量,或者提供注释来指定它们的含义。
  • 你的压痕很不一致。在不同的函数中缩进不同数量的空格,但应该坚持一个空格(最常见的是四个空格)。您尤其应该在函数中进行缩进,否则代码可能不包含在该函数中。
  • 这在语法上是不正确的: if (dist_avg < 600 & dist_avg > 400);digitalWrite(MotorPin,HIGH);else digitalWrite(MotorPin,LOW);在if条件之后不应该有分号,否则下面的语句将无法处理它。第二行和第四行也应缩进。
票数 3
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/41160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档