Arduino Noc无人机协同竞技传感器制作

正文索引 [隐藏]

木得办法,只能这样硬上看不见

所有的东西都是现学现卖,代码没有优化,只是为了完成功能,系统中断可能写的不好,欢迎各位大佬指导

第三代的成品图↑

不知道从哪折腾来的单个探测器原理图↑

目标

当传感器一距离小于100cm时蓝灯亮
当传感器二距离小于100cm时绿灯亮
当两个传感器距离都大于100cm时红灯亮

 

实现代码

 

//ErJi Lab Noc V1 const int TrigPin = 2;

const int EchoPin = 3;

const int ledPin=10;

float cm;

void setup()

{

Serial.begin(9600);

pinMode(TrigPin, OUTPUT);

pinMode(EchoPin, INPUT);

pinMode(ledPin,OUTPUT);

}

void loop()

{

//发一个10ms的高脉冲去触发

TrigPin digitalWrite(TrigPin, LOW);

delayMicroseconds(2);

digitalWrite(TrigPin, HIGH);

delayMicroseconds(10);

digitalWrite(TrigPin, LOW);

cm = pulseIn(EchoPin, HIGH) / 58.0;

//算成厘米

cm = (int(cm * 100.0)) / 100.0;

//保留两位小数

Serial.print(cm);

Serial.print(“cm”);

Serial.println();

delay(1000);

if(cm<50)

{

digitalWrite(ledPin,HIGH);

//点亮小灯

}

else

{

digitalWrite(ledPin,LOW);

//熄灭小灯

}

}

//ErJi Lab Noc V2

#include <MsTimer2.h>

//计数值

int tick = 0;

const int TrigPin = 2;

const int EchoPin = 3;

//探测1

const int TrigPin2 = 6;

const int EchoPin2 = 7;

//探测2

const int ledPin=10;

const int ledPin2=11;

const int ledPin3=12;

float cm;

float cm2;

void setup()

{

Serial.begin(9600);

pinMode(TrigPin, OUTPUT);

pinMode(EchoPin, INPUT);

//探测1

pinMode(TrigPin2, OUTPUT);

pinMode(EchoPin2, INPUT);

//探测2

pinMode(ledPin,OUTPUT);

pinMode(ledPin2,OUTPUT);

pinMode(ledPin3,OUTPUT);

}

void loop()

{

//发一个10ms的高脉冲去触发TrigPin

//探测1

digitalWrite(TrigPin, LOW);

delayMicroseconds(2);

digitalWrite(TrigPin, HIGH);

delayMicroseconds(10);

digitalWrite(TrigPin, LOW);

digitalWrite(TrigPin2, LOW);

MsTimer2:set(10, onTimer);

//设置中断,每1000ms进入一次中断服务程序

onTimer() MsTimer2::start();

//开始计时

//不知道干啥总之就是这样写

cm = pulseIn(EchoPin, HIGH) / 58.0;

//算成厘米

cm = (int(cm * 100.0)) / 100.0;

//保留两位小数

//计算

Serial.print(“cm=”);

Serial.print(cm);

Serial.print(” || “);

Serial.print(“cm2=”);

Serial.print(cm2);

Serial.println();

//输出

delay(100);

if(cm<50)

{

digitalWrite(ledPin,HIGH);

//点亮小灯

}

else

{

digitalWrite(ledPin,LOW);

//熄灭小灯

}

if(cm2<50)

{

digitalWrite(ledPin2,HIGH);

//点亮小灯

}

else

{

digitalWrite(ledPin2,LOW);

//熄灭小灯

}

if(cm2>=50 && cm>=50)

{

digitalWrite(ledPin3,HIGH);

//点亮小灯

}

else

{

digitalWrite(ledPin3,LOW);

//熄灭小灯

}

}

void onTimer()

{

digitalWrite(TrigPin2, LOW);

delayMicroseconds(2);

digitalWrite(TrigPin2, HIGH);

delayMicroseconds(10);

digitalWrite(TrigPin2, LOW);

cm2 = pulseIn(EchoPin2, HIGH) / 58.0;

//算成厘米

cm2 = (int(cm2 * 100.0)) / 100.0;

//保留两位小数

}

 

//ErJi Lab Noc v3

#include <MsTimer2.h>

//计数值

int tick = 0;

int i =0;

//探测2

const int TrigPin = 2;

const int EchoPin = 3;

//探测2

const int TrigPin2 = 6;

const int EchoPin2 = 7;

//LED

const int ledPin=10;

//蓝色

const int ledPin2=11;

//绿色

const int ledPin3=12;

//红色

//蜂鸣器

int buzzer=13;

//变量

float cm;

float cm2;

void setup()

{

Serial.begin(9600);

//探测1

pinMode(TrigPin, OUTPUT);

pinMode(EchoPin, INPUT);

//探测2

pinMode(TrigPin2, OUTPUT);

pinMode(EchoPin2, INPUT);

//LED

pinMode(ledPin,OUTPUT);

pinMode(ledPin2,OUTPUT);

pinMode(ledPin3,OUTPUT);

//蜂鸣器

pinMode(buzzer,OUTPUT);

}

void loop()

{

//发一个10ms的高脉冲去触发TrigPin

//探测1

digitalWrite(TrigPin, LOW);

delayMicroseconds(2);

digitalWrite(TrigPin, HIGH);

delayMicroseconds(10);

digitalWrite(TrigPin, LOW);

digitalWrite(TrigPin2, LOW);

MsTimer2::set(10, onTimer);

//设置中断,每1000ms进入一次中断服务程序

onTimer() MsTimer2::start();

//开始计时

//不知道干啥总之就是这样写

cm = pulseIn(EchoPin, HIGH) / 58.0;

//算成厘米

cm = (int(cm * 100.0)) / 100.0;

//保留两位小数

//计算

Serial.print(“cm=”);

Serial.print(cm);

Serial.print(” || “);

Serial.print(“cm2=”);

Serial.print(cm2);

Serial.println();

//输出

delay(100);

if(cm<100)

{

digitalWrite(ledPin,HIGH);

//点亮小灯

}

else

{

digitalWrite(ledPin,LOW);

//熄灭小灯

}

if(cm2<100)

{

digitalWrite(ledPin2,HIGH);

//点亮小灯

}

else

{

digitalWrite(ledPin2,LOW);

//熄灭小灯

}

if(cm2>=100 && cm>=100)

{

digitalWrite(ledPin3,HIGH);

//点亮小灯

}

else

{

digitalWrite(ledPin3,LOW);

//熄灭小灯

}

if(cm2<=100&&cm<=100)

{

for(i=0;i<80;i++)

//一个频率的声音

{

digitalWrite(buzzer,HIGH);

//发声音

delay(1);

//延时1ms

digitalWrite(buzzer,LOW);

//不发声音

delay(1);

//延时ms

}

for(i=0;i<100;i++)

//另一个频率的声音

{

digitalWrite(buzzer,HIGH);

//发声音

delay(2);

//延时2ms

digitalWrite(buzzer,LOW);

//不发声音

delay(2);

//延时2ms

}

}

}

void onTimer()

{

digitalWrite(TrigPin2, LOW);

delayMicroseconds(2);

digitalWrite(TrigPin2, HIGH);

delayMicroseconds(10);

digitalWrite(TrigPin2, LOW);

cm2 = pulseIn(EchoPin2, HIGH) / 58.0;

//算成厘米

cm2 = (int(cm2 * 100.0)) / 100.0;

//保留两位小数

}

在V2与V3中使用了MsTimer2.h

后话

这次真的是现学现卖了…以后想到啥再写点吧…其实是我懒…咽气