Skip to content

Commit 1d212e6

Browse files
Add files via upload
1 parent 48e0a8e commit 1d212e6

File tree

12 files changed

+792
-0
lines changed

12 files changed

+792
-0
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/**
2+
传感器数字信号记录 连续3s按下,才打印一次按下 连续5s松开,才打印松开
3+
代码用处:连续3s按下,才打印一次按下 连续5s松开,才打印松开
4+
开发板:适用于Arduino系列开发板(如:NANO、UNO、Mega 2560、ESP32、ESP8266等)
5+
注意事项:输出0 为 低电平,输出1 为 高电平
6+
流程图链接:
7+
【金山文档】 PressContinuouslyCorrect_CN_Demo04
8+
https://kdocs.cn/l/csQ9FwyUgAdP
9+
*/
10+
11+
#define sensorPin 2 // 传感器引脚
12+
#define runIntervalTime 10 // 运行检测间隔时间 检测保持时长
13+
unsigned long runTime = 0; // 阶段运行记录时间
14+
15+
bool lastTimeState = LOW; // 上次状态值 默认为您当前初始化传感器的状态
16+
17+
unsigned long pressTime = 0; // 记录按下时间
18+
unsigned long noPressTime = 0; // 记录松开时间
19+
20+
#define PressInterval 3000 // 认定为按压保持时间
21+
#define noPressInterval 5000 // 认定为松开保持时间
22+
23+
void setup() {
24+
Serial.begin(9600); // 设置波特率
25+
pinMode(sensorPin, INPUT); // 设置引脚输入
26+
Serial.println(F("Start successfully")); // 打印提示
27+
}
28+
29+
void loop() {
30+
// 运行
31+
if (millis() - runTime >= runIntervalTime) { // 当前时间如果减去阶段记录时间大于并等于间隔时间
32+
runTime = millis(); // 记录阶段时间
33+
if (sensorState() != lastTimeState) { // 判断当前状态是否不等于上次的值
34+
lastTimeState = !lastTimeState; // 状态反转
35+
// Serial.print("The current status is: "); // 输出打印
36+
// Serial.println(lastTimeState); // 输出打印 状态
37+
// 根据状态记录时间
38+
if (lastTimeState == true) { // 判断按下时间
39+
pressTime = millis(); // 记录按下时间
40+
} else { // 判断松开时间
41+
noPressTime = millis(); // 记录松开时间
42+
}
43+
}
44+
}
45+
46+
// 时间间隔判断状态
47+
if (lastTimeState == true) { // 如果状态为高电平
48+
if (millis() - pressTime >= PressInterval) { // 时间间隔判断
49+
pressTime = millis();
50+
Serial.print("status is: "); // 输出打印
51+
Serial.println(lastTimeState); // 输出打印 状态
52+
}
53+
} else { // 如果状态为低电平
54+
if (millis() - noPressTime >= noPressInterval) { // 时间间隔判断
55+
noPressTime = millis();
56+
Serial.print("status is: "); // 输出打印
57+
Serial.println(lastTimeState); // 输出打印 状态
58+
}
59+
}
60+
61+
// loop回括号
62+
}
63+
64+
// 获取传感器状态
65+
bool sensorState() {
66+
bool _sensorFlag = digitalRead(sensorPin);
67+
// 原始数据打印
68+
//Serial.print("original status is: "); // 输出打印
69+
//Serial.println(_sensorFlag); // 输出打印 状态
70+
return _sensorFlag;
71+
}
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
/**
2+
传感器数字信号记录 连续有10次按下,才打印一次按下
3+
连续20次松开,才打印松开
4+
5+
代码用处:连续有10次按下,才打印一次按下
6+
连续20次松开,才打印松开
7+
开发板:适用于Arduino系列开发板(如:NANO、UNO、Mega 2560、ESP32、ESP8266等)
8+
注意事项:输出0 为 低电平,输出1 为 高电平
9+
*/
10+
11+
#define sensorPin 2 // 传感器引脚
12+
#define runIntervalTime 10 // 运行检测间隔时间 检测保持时长
13+
unsigned long runTime = 0; // 阶段运行记录时间
14+
15+
bool lastTimeState = LOW; // 上次状态值 默认为您当前初始化传感器的状态
16+
17+
18+
unsigned long pressTime = 0; // 记录按下时间
19+
unsigned long noPressTime = 0; // 记录松开时间
20+
21+
int pressRunCount = 0; // 记录按下运行次数
22+
int noPressRunCount = 0; // 记录松开运行次数
23+
24+
#define PressInterval 3000 // 认定为按压保持时间
25+
#define noPressInterval 5000 // 认定为松开保持时间
26+
#define PressCount 10 // 认定为按压保持 次数
27+
#define noPressCount 20 // 认定为松开保持 次数
28+
29+
void setup() {
30+
Serial.begin(9600); // 设置波特率
31+
pinMode(sensorPin, INPUT); // 设置引脚输入
32+
Serial.println(F("Start successfully")); // 启动打印提示
33+
}
34+
35+
void loop() {
36+
// 运行 间隔 检测一次
37+
if (millis() - runTime >= runIntervalTime) { // 当前时间如果减去阶段记录时间大于并等于间隔时间
38+
runTime = millis(); // 记录阶段时间
39+
int tempValue = sensorState(); // 原始状态
40+
Serial.print(tempValue); // 打印原始状态
41+
Serial.print(",");
42+
43+
if(tempValue == true){ // 按下
44+
45+
} else { // 松开
46+
47+
}
48+
49+
/*
50+
if (sensorState() != lastTimeState) { // 判断当前状态是否不等于上次的值
51+
lastTimeState = !lastTimeState; // 状态反转
52+
// Serial.print("The current status is: "); // 输出打印
53+
// Serial.println(lastTimeState); // 输出打印 状态
54+
// 根据状态记录时间
55+
if (lastTimeState == true) { // 判断按下
56+
runCount = 0; // 次数初始化
57+
} else { // 判断松开
58+
runCount = 0; // 次数初始化
59+
}
60+
}
61+
*/
62+
63+
}
64+
65+
// 次数间隔判断状态
66+
if (lastTimeState == true) { // 如果状态为高电平
67+
if (runCount >= PressCount) { // 次数间隔判断
68+
runCount = 0; // 赋值为0 降低打印速度
69+
Serial.print("status is: "); // 输出打印
70+
Serial.println(lastTimeState); // 输出打印 状态
71+
}
72+
} else { // 如果状态为低电平
73+
if (runCount >= noPressCount) { // 次数间隔判断
74+
runCount = 0; // 赋值为0 降低打印速度
75+
Serial.print("status is: "); // 输出打印
76+
Serial.println(lastTimeState); // 输出打印 状态
77+
}
78+
}
79+
80+
// loop回括号
81+
}
82+
83+
// 获取传感器状态
84+
bool sensorState() {
85+
bool _sensorFlag = digitalRead(sensorPin);
86+
// 原始数据打印
87+
//Serial.print("original status is: "); // 输出打印
88+
//Serial.println(_sensorFlag); // 输出打印 状态
89+
return _sensorFlag;
90+
}
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
/**
2+
传感器数字信号记录 连续有10次按下,才打印一次按下
3+
连续20次松开,才打印松开
4+
5+
代码用处:连续有10次按下,才打印一次按下
6+
连续20次松开,才打印松开
7+
开发板:适用于Arduino系列开发板(如:NANO、UNO、Mega 2560、ESP32、ESP8266等)
8+
注意事项:输出0 为 低电平,输出1 为 高电平
9+
流程图链接:
10+
【金山文档】 PressCorrectCount_CN_Demo05
11+
https://kdocs.cn/l/crhsyNsxriY0
12+
*/
13+
14+
#define sensorPin 2 // 传感器引脚
15+
#define runIntervalTime 10 // 运行检测间隔时间 检测保持时长
16+
unsigned long runTime = 0; // 阶段运行记录时间
17+
18+
bool lastTimeState = LOW; // 上次状态值 默认为您当前初始化传感器的状态
19+
20+
int runCount = 0; // 记录运行次数
21+
22+
#define PressCount 10 // 认定为按压保持 次数
23+
#define noPressCount 20 // 认定为松开保持 次数
24+
25+
void setup() {
26+
Serial.begin(9600); // 设置波特率
27+
pinMode(sensorPin, INPUT); // 设置引脚输入
28+
Serial.println(F("Start successfully")); // 启动打印提示
29+
}
30+
31+
void loop() {
32+
// 运行
33+
if (millis() - runTime >= runIntervalTime) { // 当前时间如果减去阶段记录时间大于并等于间隔时间
34+
runTime = millis(); // 记录阶段时间
35+
runCount++; // 检测次数自增
36+
if (sensorState() != lastTimeState) { // 判断当前状态是否不等于上次的值
37+
lastTimeState = !lastTimeState; // 状态反转
38+
// Serial.print("The current status is: "); // 输出打印
39+
// Serial.println(lastTimeState); // 输出打印 状态
40+
// 根据状态记录时间
41+
if (lastTimeState == true) { // 判断按下
42+
runCount = 0; // 次数初始化
43+
} else { // 判断松开
44+
runCount = 0; // 次数初始化
45+
}
46+
}
47+
}
48+
49+
// 次数间隔判断状态
50+
if (lastTimeState == true) { // 如果状态为高电平
51+
if (runCount >= PressCount) { // 次数间隔判断
52+
runCount = 0; // 赋值为0 降低打印速度
53+
Serial.print("status is: "); // 输出打印
54+
Serial.println(lastTimeState); // 输出打印 状态
55+
}
56+
} else { // 如果状态为低电平
57+
if (runCount >= noPressCount) { // 次数间隔判断
58+
runCount = 0; // 赋值为0 降低打印速度
59+
Serial.print("status is: "); // 输出打印
60+
Serial.println(lastTimeState); // 输出打印 状态
61+
}
62+
}
63+
64+
// loop回括号
65+
}
66+
67+
// 获取传感器状态
68+
bool sensorState() {
69+
bool _sensorFlag = digitalRead(sensorPin);
70+
// 原始数据打印
71+
//Serial.print("original status is: "); // 输出打印
72+
//Serial.println(_sensorFlag); // 输出打印 状态
73+
return _sensorFlag;
74+
}
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
/**
2+
传感器数字信号记录按下的时长和松开的时长 按下的状态,5s内,只打印一次。5s后,如果状态没变,会再次打印
3+
松开的状态,10s内,只打印一次。10s后,如果状态没变,会再次打印
4+
5+
场景:如果在规定时间内没有做出动作响应,会二次提醒。例如手机闹钟
6+
7+
代码用处:按下的状态,5s内,只打印一次。5s后,如果状态没变,会再次打印
8+
松开的状态,10s内,只打印一次。10s后,如果状态没变,会再次打印
9+
10+
场景:如果在规定时间内没有做出动作响应,会二次提醒。例如手机闹钟
11+
火车司机30s踩一次脚踏板,没踩就会刹车
12+
每隔1个小时,需要按一下按钮,否则就怎么怎么样
13+
开发板:适用于Arduino系列开发板(如:NANO、UNO、Mega 2560、ESP32、ESP8266等)
14+
注意事项:输出0 为 低电平,输出1 为 高电平
15+
流程图链接:
16+
【金山文档】 PressDelayInterval_CN_Demo07
17+
https://kdocs.cn/l/ckQe2kM9gR4G
18+
19+
*/
20+
21+
#define sensorPin 2 // 传感器引脚
22+
#define runIntervalTime 10 // 运行检测间隔时间 检测保持时长
23+
unsigned long runTime = 0; // 阶段运行记录时间
24+
25+
bool lastTimeState = LOW; // 上次状态值 默认为您当前初始化传感器的状态
26+
27+
unsigned long runningRecordTime = 0; // 记录按下时间
28+
29+
int pressCount = 0;
30+
int noPressCount = 0;
31+
32+
#define pressCountTime 5000 // 输出检测间隔打印时间
33+
#define noPressCountTime 10000 // 输出检测间隔打印时间
34+
35+
void setup() {
36+
Serial.begin(9600); // 设置波特率
37+
pinMode(sensorPin, INPUT); // 设置引脚输入
38+
Serial.println(F("Start successfully")); // 打印提示
39+
}
40+
41+
void loop() {
42+
// 运行
43+
if (millis() - runTime >= runIntervalTime) { // 当前时间如果减去阶段记录时间大于并等于间隔时间
44+
runTime = millis(); // 记录阶段时间
45+
if (sensorState() != lastTimeState) { // 判断当前状态是否不等于上次的值
46+
lastTimeState = !lastTimeState; // 状态反转
47+
Serial.print("The current status is: "); // 输出打印
48+
Serial.println(lastTimeState); // 输出打印 状态
49+
50+
// 次数清除
51+
pressCount = 0; // 状态重置
52+
noPressCount = 0; // 状态重置
53+
54+
// 记录时间
55+
runningRecordTime = millis(); // 记录当前时间
56+
}
57+
}
58+
59+
if (lastTimeState == true) {
60+
if (millis() - runningRecordTime >= pressCountTime) {
61+
runningRecordTime = millis(); // 记录时间
62+
Serial.print("status is: "); // 输出打印
63+
Serial.print(lastTimeState); // 输出打印 状态
64+
Serial.print(" Count: "); // 输出打印
65+
Serial.println(++pressCount); // 自增次数打印
66+
}
67+
} else {
68+
if (millis() - runningRecordTime >= noPressCountTime) {
69+
runningRecordTime = millis(); // 记录时间
70+
Serial.print("status is: "); // 输出打印
71+
Serial.print(lastTimeState); // 输出打印 状态
72+
Serial.print(" Count: "); // 输出打印
73+
Serial.println(++noPressCount); // 自增次数打印
74+
}
75+
}
76+
77+
// loop回括号
78+
}
79+
80+
// 获取传感器状态
81+
bool sensorState() {
82+
bool _sensorFlag = digitalRead(sensorPin);
83+
return _sensorFlag;
84+
}
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
/**
2+
传感器数字信号记录按下的时长和松开的时长 获取按下 松开 时间差
3+
4+
代码用处:记录按下的时长和松开的时长 map映射输出值
5+
开发板:适用于Arduino系列开发板(如:NANO、UNO、Mega 2560、ESP32、ESP8266等)
6+
注意事项:输出0 为 低电平,输出1 为 高电平
7+
8+
流程图链接:
9+
【金山文档】 PressLoosenDuration_CN_Demo03
10+
https://kdocs.cn/l/cdsY9VAK7CSG
11+
12+
*/
13+
14+
#define sensorPin 2 // 传感器引脚
15+
#define runIntervalTime 10 // 运行检测间隔时间 检测保持时长
16+
unsigned long runTime = 0; // 阶段运行记录时间
17+
18+
bool lastTimeState = LOW; // 上次状态值 默认为您当前初始化传感器的状态
19+
20+
unsigned long pressTime = 0; // 记录按下时间
21+
unsigned long noPressTime = 0; // 记录松开时间
22+
23+
#define printIntervalTime 1000 // 输出检测间隔打印时间
24+
unsigned long printRunTime = 0; // 记录阶段运行打印时间
25+
26+
void setup() {
27+
Serial.begin(9600); // 设置波特率
28+
pinMode(sensorPin, INPUT); // 设置引脚输入
29+
Serial.println(F("Start successfully")); // 打印提示
30+
}
31+
32+
void loop() {
33+
// 运行
34+
if (millis() - runTime >= runIntervalTime) { // 当前时间如果减去阶段记录时间大于并等于间隔时间
35+
runTime = millis(); // 记录阶段时间
36+
if (sensorState() != lastTimeState) { // 判断当前状态是否不等于上次的值
37+
lastTimeState = !lastTimeState; // 状态反转
38+
Serial.print("The current status is: "); // 输出打印
39+
Serial.println(lastTimeState); // 输出打印 状态
40+
// 根据状态记录时间
41+
if (lastTimeState == true) { // 判断按下时间
42+
pressTime = millis(); // 记录按下时间
43+
} else { // 判断松开时间
44+
noPressTime = millis(); // 记录松开时间
45+
}
46+
}
47+
}
48+
49+
// 间隔时间处理 运行触发打印时间间隔
50+
if (millis() - printRunTime >= printIntervalTime) { // 判断输出打印时间间隔
51+
printRunTime = millis(); // 记录阶段时间
52+
// 根据当前状态 打印时间间隔
53+
if (lastTimeState == true) { // 判断当前状态是否为高电平
54+
Serial.print("status is: "); // 输出打印
55+
Serial.print(lastTimeState); // 输出打印 状态
56+
Serial.print(" press IntervalTime(ms): "); // 输出打印
57+
Serial.println(millis() - pressTime); // 输出打印 间隔差值
58+
} else {
59+
Serial.print("status is: "); // 输出打印
60+
Serial.print(lastTimeState); // 输出打印 状态
61+
Serial.print(" release IntervalTime(ms): "); // 输出打印
62+
Serial.println(millis() - noPressTime); // 输出打印 间隔差值
63+
}
64+
}
65+
66+
// loop回括号
67+
}
68+
69+
// 获取传感器状态
70+
bool sensorState() {
71+
bool _sensorFlag = digitalRead(sensorPin);
72+
return _sensorFlag;
73+
}

0 commit comments

Comments
 (0)