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

質問編集履歴

2

行番号を削除しました

2021/04/26 21:39

投稿

mkm
mkm

スコア15

title CHANGED
File without changes
body CHANGED
@@ -8,94 +8,92 @@
8
8
  再度タクトスイッチを押下してもLEDとブザーが反応したままになっています。
9
9
  また、シグナルハンドラを呼び出した際にもLEDとブザーが反応したままなので、消したいです。
10
10
  ```
11
- 1 #include<stdio.h>
12
- 2 #include<string.h>
13
- 3 #include<wiringPi.h>
14
- 4 #include<signal.h>
15
- 5 #define GPIO_LED 21
16
- 6 #define GPIO_TCT 20
17
- 7 #define GPIO_BUZ 5
18
- 8
19
- 9 void motion_on(int flag2);
20
- 10 void motion_off(void);
21
- 11 void Signal (int sig_name);
22
- 12 void SetSignal(int sig_name);
23
- 13 void tct_callbak(void);
24
- 14 volatile sig_atomic_t flag = 0;
25
- 15
26
- 16 int main(void){
27
- 17
28
- 18 if(wiringPiSetupGpio()==-1){
29
- 19 return 1;
30
- 20 }
31
- 21
32
- 22 pinMode(GPIO_LED,OUTPUT);
33
- 23 pinMode(GPIO_TCT,INPUT);
34
- 24 pinMode(GPIO_BUZ,OUTPUT);
35
- 25 pullUpDnControl(GPIO_TCT,PUD_DOWN);
36
- 26 pullUpDnControl(GPIO_LED,PUD_DOWN);
37
- 27 pullUpDnControl(GPIO_BUZ,PUD_DOWN);
38
- 28 signal(SIGINT,Signal);
39
- 29 wiringPiISR(GPIO_TCT,INT_EDGE_BOTH,tct_callbak);
40
- 30
41
- 31 while(flag==0){
42
- 32 };
43
- 33 return 0;
44
- 34 }
45
- 35
46
- 36 void tct_callbak(void){
47
- 37 if(digitalRead(GPIO_TCT)==HIGH){
48
- 38 motion_on(1);
49
- 39 }else if(digitalRead(GPIO_TCT)==LOW){
50
- 40 motion_off() ;
51
- 41 }
52
- 42 }
53
- 43
54
- 44 void motion_on(int flag2){
55
- 45
56
- 46 digitalWrite(GPIO_BUZ,HIGH);
57
- 47
58
- 48 for(int i=0; i<10;i++){
59
- 49 digitalWrite(GPIO_LED,HIGH);
60
- 50 delay(500);
61
- 51 digitalWrite(GPIO_LED,LOW);
62
- 52 delay(500);
63
- 53 }
64
- 54
65
- 55 flag2=1;
66
- 56 while(flag2==1){
67
- 57 digitalWrite(GPIO_LED,HIGH);
68
- 58 digitalWrite(GPIO_BUZ,HIGH);
69
- 59 }
70
- 60 }
71
- 61
72
- 62 void motion_off(void){
73
- 63 printf("OFFのよびだし");
74
- 64 digitalWrite(GPIO_BUZ,LOW);
75
- 65 digitalWrite(GPIO_LED,LOW);
76
- 66 motion_on(0);
77
- 67 }
78
- 68
79
- 69
80
- 70 void SetSignal(int sig_name){
81
- 71
82
- 72 f(signal(sig_name , Signal)==SIG_ERR){
83
- 73 printf("シグナル設定が出来ませんでした");
84
- 74 }
85
- 75 }
86
- 76
87
- 77 void Signal (int sig_name){
88
- 78
89
- 79 char str[3];
90
- 80 char str2[]="YES";
91
- 81 printf("システムを終了しますか。YES/NO\n");
92
- 82 scanf("%s",str);
93
- 83
94
- 84 if(strcmp (str,str2)==0){
95
- 85 flag=1;
96
- 86 }else{
97
- 87 flag=0;
98
- 88 }
99
- 89
100
- 90 }
11
+ #include<stdio.h>
12
+ #include<string.h>
13
+ #include<wiringPi.h>
14
+ #include<signal.h>
15
+ #define GPIO_LED 21
16
+ #define GPIO_TCT 20
17
+ #define GPIO_BUZ 5
18
+
19
+ void motion_on(int flag2);
20
+ void motion_off(void);
21
+ void Signal (int sig_name);
22
+ void SetSignal(int sig_name);
23
+ void tct_callbak(void);
24
+ volatile sig_atomic_t flag = 0;
25
+
26
+ int main(void){
27
+
28
+ if(wiringPiSetupGpio()==-1){
29
+ return 1;
30
+ }
31
+ pinMode(GPIO_LED,OUTPUT);
32
+ pinMode(GPIO_TCT,INPUT);
33
+ pinMode(GPIO_BUZ,OUTPUT);
34
+ pullUpDnControl(GPIO_TCT,PUD_DOWN);
35
+ pullUpDnControl(GPIO_LED,PUD_DOWN);
36
+ pullUpDnControl(GPIO_BUZ,PUD_DOWN);
37
+ signal(SIGINT,Signal);
38
+ wiringPiISR(GPIO_TCT,INT_EDGE_BOTH,tct_callbak);
39
+
40
+ while(flag==0){
41
+ };
42
+ return 0;
43
+ }
44
+
45
+ void tct_callbak(void){
46
+ if(digitalRead(GPIO_TCT)==HIGH){
47
+ motion_on(1);
48
+ }else if(digitalRead(GPIO_TCT)==LOW){
49
+ motion_off() ;
50
+ }
51
+ }
52
+
53
+ void motion_on(int flag2){
54
+
55
+ digitalWrite(GPIO_BUZ,HIGH);
56
+
57
+ for(int i=0; i<10;i++){
58
+ digitalWrite(GPIO_LED,HIGH);
59
+ delay(500);
60
+ digitalWrite(GPIO_LED,LOW);
61
+ delay(500);
62
+ }
63
+
64
+ flag2=1;
65
+ while(flag2==1){
66
+ digitalWrite(GPIO_LED,HIGH);
67
+ digitalWrite(GPIO_BUZ,HIGH);
68
+ }
69
+ }
70
+
71
+ void motion_off(void){
72
+ printf("OFFのよびだし");
73
+ digitalWrite(GPIO_BUZ,LOW);
74
+ digitalWrite(GPIO_LED,LOW);
75
+ motion_on(0);
76
+ }
77
+
78
+ void SetSignal(int sig_name){
79
+
80
+ f(signal(sig_name , Signal)==SIG_ERR){
81
+ printf("シグナル設定が出来ませんでした");
82
+ }
83
+ }
84
+
85
+ void Signal (int sig_name){
86
+
87
+ char str[3];
88
+ char str2[]="YES";
89
+ printf("システムを終了しますか。YES/NO\n");
90
+ scanf("%s",str);
91
+
92
+ if(strcmp (str,str2)==0){
93
+ flag=1;
94
+ }else{
95
+ flag=0;
96
+ }
97
+
98
+ }
101
99
  ```

1

<code>の「```」中にコードを入力しました

2021/04/26 21:39

投稿

mkm
mkm

スコア15

title CHANGED
File without changes
body CHANGED
@@ -7,7 +7,7 @@
7
7
  現状ではタクトスイッチを押した際にLEDとブザーは反応するのですが
8
8
  再度タクトスイッチを押下してもLEDとブザーが反応したままになっています。
9
9
  また、シグナルハンドラを呼び出した際にもLEDとブザーが反応したままなので、消したいです。
10
-
10
+ ```
11
11
  1 #include<stdio.h>
12
12
  2 #include<string.h>
13
13
  3 #include<wiringPi.h>
@@ -97,4 +97,5 @@
97
97
  87 flag=0;
98
98
  88 }
99
99
  89
100
- 90 }
100
+ 90 }
101
+ ```