-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathswitch.h
115 lines (109 loc) · 2.42 KB
/
switch.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#pragma once
#include <Adafruit_NeoPixel.h>
#define PIXEL_SWITCH 6
#define PIXEL_COUNT 3
#define BUTTON A0
Adafruit_NeoPixel switchLED = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_SWITCH, NEO_GRB + NEO_KHZ800);
#define BUTTONLEN 5
bool button[BUTTONLEN];
int button_p;
unsigned long buttonTime;
bool buttonNow;
bool buttonLast;
bool switchStateMode1;
bool switchStateMode1b;
bool switchStateMode2;
unsigned long switchTime1;
unsigned long switchTime2;
unsigned long switchBeginTime1;
unsigned long switchBeginTime2;
bool switch_init()
{
switchLED.begin();
switchLED.show();
buttonNow = 1;
buttonLast = 1;
for (int i=0;i<BUTTONLEN;i++)
{
button[i]=1;
}
button_p=0;
switchStateMode1 = LOW;
switchStateMode1b = LOW;
switchStateMode2 = LOW;
switchTime1 = 0;
switchTime2 = 0;
switchBeginTime1 = 0;
switchBeginTime2 = 0;
buttonTime = millis();
}
void switch_judge()
{
/*
* 判断开关状态,长按3s可更改开关状态
* switchStateMode1
*/
switchStateMode1b = switchStateMode1;
buttonLast = buttonNow;
button[button_p]=(boolean)(analogRead(BUTTON)>500);
button_p=(button_p+1)%BUTTONLEN;
// Serial.print("p:");
// Serial.print(button_p);
// Serial.print(" now:");
// Serial.print(button[button_p]);
int sum=0;
for (int i=0;i<BUTTONLEN;i++)
{
sum+=(int)button[i];
// Serial.print(" ");
// Serial.print(button[i]);
}
buttonNow=(boolean)(sum>(BUTTONLEN/2));
//buttonNow=analogRead(BUTTON);
if (buttonLast && !buttonNow)
{
switchBeginTime1 = millis();
}
// Serial.print(" buttonLast:");
// Serial.print(buttonLast);
// Serial.print(" buttonNow:");
// Serial.print(buttonNow);
// Serial.print(" begintime");
// Serial.println(switchBeginTime2);
if (!buttonNow && switchBeginTime1)
{
switchTime1 = millis() - switchBeginTime1;
if (switchTime1 > 3000)
{
switchStateMode1 = !switchStateMode1;
switchBeginTime1 = 0;
}
}
if (buttonNow)
{
switchBeginTime1 = 0;
}
/*
* 判断开关状态
* 轻按可更改开关状态
* switchStateMode2
*/
if (buttonLast && !buttonNow)
{
switchBeginTime2=millis();
}
if(buttonNow&&switchBeginTime2)
{
switchTime2=millis()-switchBeginTime2;
if(switchTime2<500)
{
switchStateMode2 =1; //!switchStateMode2;
}
switchBeginTime2=0;
}
if(switchBeginTime2&&((millis()-switchBeginTime2)>=500))
{
switchBeginTime2=0;
}
buttonTime=millis();
}