图是随便找了个网站随便画的。
下面是代码,C语言的代码选哪个插入啊问一句?
#include <TimerOne.h>
/********管脚定义********/
const int trig = 13;
const int echo = 12;
const int led = 10;
const int sega = 2;
const int segb = 3;
const int segc = 4;
const int segd = 5;
const int sege = 6;
const int segf = 7;
const int segg = 8;
const int segdp = 9;
const int key0 = 11;
/********参数定义*********/
#define FILTER_N 9
boolean blinkLED = false; // 是否闪烁 LED 的标志
int ledState = LOW; // 用于设置 LED 状态
float distance_cm; // 距离(cm)
int key = -1;
int n[11][8] = {
{0, 0, 1, 1, 1, 1, 1, 1},
{0, 0, 0, 0, 0, 1, 1, 0},
{0, 1, 0, 1, 1, 0, 1, 1},
{0, 1, 0, 0, 1, 1, 1, 1},
{0, 1, 1, 0, 0, 1, 1, 0},
{0, 1, 1, 0, 1, 1, 0, 1},
{0, 1, 1, 1, 1, 1, 0, 1},
{0, 0, 0, 0, 0, 1, 1, 1},
{0, 1, 1, 1, 1, 1, 1, 1},
{0, 1, 1, 0, 1, 1, 1, 1},
{1, 0, 0, 0, 0, 0, 0, 0}
};
void timerIsr() {
if (blinkLED) { // 如果需要闪烁 LED
ledState = !ledState; // 翻转 LED 的状态
digitalWrite(led, ledState); // 设置 LED 的状态
}
}
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
pinMode(led, OUTPUT);
pinMode(sega, OUTPUT);
pinMode(segb, OUTPUT);
pinMode(segc, OUTPUT);
pinMode(segd, OUTPUT);
pinMode(sege, OUTPUT);
pinMode(segf, OUTPUT);
pinMode(segg, OUTPUT);
pinMode(segdp, OUTPUT);
pinMode(key0, INPUT);
Timer1.initialize(50000); // 设置 Timer1 的定时时间为 500ms
Timer1.attachInterrupt(timerIsr); // 注册 Timer1 的中断函数
}
void loop() {
int a, b, c, d;
float velocity = 345.5302;
int distance;
float filterdistance; // 滤波后数据
if (digitalRead(key0) == 1) {
key = 0;
} else {
key = 1;
}
if (key == 0) {
filterdistance = Filter_Md(velocity); // 中位数滤波
distance = int((filterdistance + 0.05) * 10);
} else {
filterdistance = Filter_Me(velocity); // 均值滤波
distance = int((filterdistance + 0.05) * 10);
} // 这里用了上拉电阻
/**********串口绘图***********/
Serial.print(distance_cm);
Serial.print(",");
Serial.println(filterdistance);
delay(10);
/**********led闪烁***********/
if (distance_cm < 10.00) {
blinkLED = true;
} else {
blinkLED = false;
digitalWrite(led, LOW);
}
a = distance % 10; // 小数第一位
b = distance / 10 % 10; // 个位
c = distance / 100 % 10; // 十位
d = distance / 1000 % 10; // 百位
/*******数码管循环显示*******/
for (int pin = 2; pin <= 9; pin++) {
digitalWrite(pin, n[0][9 - pin]);
}
delay(400);
for (int pin = 2; pin <= 9; pin++) {
digitalWrite(pin, n[d][9 - pin]);
}
delay(400);
for (int pin = 2; pin <= 9; pin++) {
digitalWrite(pin, n[c][9 - pin]);
}
delay(400);
for (int pin = 2; pin <= 9; pin++) {
digitalWrite(pin, n[b][9 - pin]);
}
delay(400);
for (int pin = 2; pin <= 9; pin++) {
digitalWrite(pin, n[10][9 - pin]);
}
delay(400);
for (int pin = 2; pin <= 9; pin++) {
digitalWrite(pin, n[a][9 - pin]);
}
delay(500);
}
/**************均值滤波***********/
float Filter_Me(float v) {
int i;
float filter_sum = 0.0;
for (int i = 0; i < FILTER_N; i++) {
digitalWrite(trig, LOW);
delay(10);
digitalWrite(trig, HIGH);
delay(10);
digitalWrite(trig, LOW);
distance_cm = pulseIn(echo, HIGH) * (v / 2.0) / 10000.0;
distance_cm = (int(distance_cm * 100.0)) / 100.0;
filter_sum += distance_cm;
delay(1);
}
return (filter_sum / FILTER_N);
}
/**********中位数滤波**********/
float Filter_Md(float v) {
float filter_buf[FILTER_N];
int i, j;
float filter_temp;
for (i = 0; i < FILTER_N; i++) {
digitalWrite(trig, LOW);
delay(10);
digitalWrite(trig, HIGH);
delay(10);
digitalWrite(trig, LOW);
distance_cm = pulseIn(echo, HIGH) * (v / 2.0) / 10000.0;
distance_cm = (int(distance_cm * 100.0)) / 100.0;
filter_buf[i] = distance_cm;
delay(1);
}
// 采样值从小到大排列(冒泡法)
for (j = 0; j < FILTER_N - 1; j++) {
for (i = 0; i < FILTER_N - 1 - j; i++) {
if (filter_buf[i] > filter_buf[i + 1]) {
filter_temp = filter_buf[i];
filter_buf[i] = filter_buf[i + 1];
filter_buf[i + 1] = filter_temp;
}
}
}
return filter_buf[(FILTER_N - 1) / 2];
}