回答編集履歴
1
訂正
answer
CHANGED
@@ -7,9 +7,6 @@
|
|
7
7
|
#define SW_TIME 500 // 500ms
|
8
8
|
const unsigned char SW_PIN[] = { 4,5,6,7,8,9 }; // sw port
|
9
9
|
volatile unsigned char sw_flag[ SW_MAX ];
|
10
|
-
volatile unsigned char sw_mode = 0;
|
11
|
-
volatile unsigned long swa_time ;
|
12
|
-
volatile unsigned char swa , swb , swc ;
|
13
10
|
volatile unsigned char sw_code = 0;
|
14
11
|
|
15
12
|
void prn_bin( unsigned char dat ){
|
@@ -19,7 +16,11 @@
|
|
19
16
|
} // for
|
20
17
|
}
|
21
18
|
void sw_scan(void){
|
19
|
+
static unsigned char sw_mode = 0;
|
20
|
+
static unsigned long swa_time ;
|
21
|
+
static unsigned char swa , swb , swc ;
|
22
22
|
unsigned char i;
|
23
|
+
if ( sw_code != 0 ){ return; }
|
23
24
|
for ( i=0 ; i<SW_MAX ; i++ ){
|
24
25
|
sw_flag[i] = ( ( sw_flag[i] << 1 ) | digitalRead( SW_PIN[i] ) ) & 0x03 ;
|
25
26
|
if ( sw_flag[i] == 0b10 ){ // sw_on
|
@@ -31,7 +32,7 @@
|
|
31
32
|
} // if
|
32
33
|
if ( sw_flag[i] == 0b01 ){ // sw_off
|
33
34
|
switch( sw_mode ){
|
34
|
-
case 1: if ( i == swa ){ bitSet( sw_code , swa ); sw_mode = 0; }
|
35
|
+
case 1: if ( i == swa ){ bitSet( sw_code , swa ); sw_mode = 0; } // sw_single
|
35
36
|
break ;
|
36
37
|
case 2: if ( i == swa ){ swc = swb ; sw_mode = 3; } // sw_double
|
37
38
|
if ( i == swb ){ swc = swa ; sw_mode = 3; }
|
@@ -52,18 +53,25 @@
|
|
52
53
|
MsTimer2::start();
|
53
54
|
}
|
54
55
|
void loop() {
|
56
|
+
if ( sw_code != 0 ){
|
57
|
+
Serial.print("sw_code = ");
|
58
|
+
prn_bin( sw_code );
|
55
|
-
|
59
|
+
if ( sw_code == 0b00000011 ){ Serial.print(" C"); }
|
60
|
+
if ( sw_code == 0b00000001 ){ Serial.print(" A"); }
|
61
|
+
Serial.println();
|
62
|
+
sw_code = 0;
|
63
|
+
} // if
|
56
64
|
}
|
57
65
|
```
|
58
66
|
実行結果↓
|
59
67
|
> Arduino Leonardo !!
|
60
|
-
sw_code = 00000001
|
68
|
+
sw_code = 00000001 A
|
61
69
|
sw_code = 00000010
|
62
70
|
sw_code = 00000100
|
63
71
|
sw_code = 00001000
|
64
72
|
sw_code = 00010000
|
65
73
|
sw_code = 00100000
|
66
|
-
sw_code = 00000011
|
74
|
+
sw_code = 00000011 C
|
67
75
|
sw_code = 00000110
|
68
76
|
sw_code = 00001100
|
69
77
|
sw_code = 00011000
|