teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

訂正

2021/12/05 04:10

投稿

koujikuu
koujikuu

スコア401

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; } // sw_single
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
- if ( sw_code != 0 ){ Serial.print("sw_code = "); prn_bin( sw_code ); Serial.println(); sw_code=0; }
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