質問編集履歴

2

誤記あり、追加訂正

2019/02/01 12:33

投稿

azt1999
azt1999

スコア13

test CHANGED
File without changes
test CHANGED
@@ -42,6 +42,8 @@
42
42
 
43
43
 
44
44
 
45
+ SPISettings mySPISettings = SPISettings(500000, MSBFIRST, SPI_MODE0);
46
+
45
47
  int val = 0;
46
48
 
47
49
  long int frq;

1

極力ループさせずにやりたい処理はArduino標準ライブラリで外部ICをシリアル2byteでイニシャライズさせることです。

2019/02/01 12:33

投稿

azt1999
azt1999

スコア13

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- 月からArduinoを始めた超初心者ですが、外部のハードウエアを制御を勉強中です。
1
+ 月からArduinoを始めた超初心者ですが、外部のハードウエアを制御を勉強中です。
2
2
 
3
3
  ArduinoのdigitalPin#5に入力された信号を周波数カウンタのスケッチで処理し、6段階に制御を割り振るスケッチを
4
4
 
@@ -16,13 +16,9 @@
16
16
 
17
17
 
18
18
 
19
- 外部のハードウエア制御の関係上、if構文の各ループ切替時のみ極力ループさせず極短時間だけさせたい処理ありますが、
20
-
21
- いいアイデアが無く、今のところ外部から負のワショットパルに近信号(といって0.5sec.程度?)を貰い、
22
-
23
- 別のdigitalpin#6に入れ、Hレベルになった際、処理を力技で止めさせてますが、外部のワンショットパルスの設定幅に
24
-
25
- 自由度が無く、切替時に相当もたつき感があり、レスポンスがよろしく無いです。(切替時に極短時間だけやらせたい処理は1回だけでも可)
19
+ 外部のハードウエア制御の関係上、if構文の各ループ切替時のみ極力ループさせず1回だけさせたい処理(外部のICを標準SPIライブラリでシリアルで送り、2byteでイニシャライズ)ありますが、いいアイデアが無く、今のところ、外部から負のワンショットパルスに近い信号(といっても0.5sec.程度?)を貰い、別のdigitalpin#6に入れ、Hレベルになった際、処理を力技で止めさせてますが、外部のワンショットパルスの設定幅に
20
+
21
+ 自由度が無く、切替時に相当もたつき感がありレスポンスがよろしく無です。(切替時のイニシャライズは1回だけで可)
26
22
 
27
23
 
28
24
 
@@ -40,6 +36,10 @@
40
36
 
41
37
  #include <FreqCounter.h>
42
38
 
39
+ #include <SPI.h>
40
+
41
+ #define SS_PIN 10
42
+
43
43
 
44
44
 
45
45
  int val = 0;
@@ -58,6 +58,10 @@
58
58
 
59
59
  pinMode(6, INPUT);
60
60
 
61
+  SPI.begin(); //SPI有効
62
+
63
+  pinMode(SS_PIN, OUTPUT);
64
+
61
65
  }
62
66
 
63
67
 
@@ -80,11 +84,19 @@
80
84
 
81
85
    if (val == 0) {
82
86
 
87
+   SPI.beginTransaction(mySPISettings);//ここから
88
+
89
+   digitalWrite(10, HIGH);//
90
+
91
+   SPI.transfer(B01001000);//
92
+
93
+   SPI.transfer(B11001111);//
94
+
83
-   //切替時に短時間だけやらせたい処理(1回だけも可)
95
+   digitalWrite(10, LOW);//ここまでが力ループさせず1回だけせたい処理で
84
-
96
+
85
-          }
97
+   }
86
-
98
+
87
-   //LOOP処理1
99
+     //通常LOOP処理1
88
100
 
89
101
   }
90
102
 
@@ -94,11 +106,19 @@
94
106
 
95
107
    if (val == 0) {
96
108
 
97
-   //切替時に極短時間だけやらせたい処理(1回だけでも可)
109
+   SPI.beginTransaction(mySPISettings);  
110
+
98
-
111
+   digitalWrite(10, HIGH);
112
+
113
+   SPI.transfer(B01001010);
114
+
115
+   SPI.transfer(B11001111);
116
+
117
+   digitalWrite(10, LOW);
118
+
99
-          }
119
+   }  
100
-
120
+
101
-   //LOOP処理2
121
+    //通常LOOP処理2
102
122
 
103
123
   }
104
124
 
@@ -108,11 +128,19 @@
108
128
 
109
129
    if (val == 0) {
110
130
 
111
-   //切替時に極短時間だけやらせたい処理(1回だけでも可)
131
+   SPI.beginTransaction(mySPISettings);  
132
+
112
-
133
+   digitalWrite(10, HIGH);
134
+
135
+   SPI.transfer(B01011010);
136
+
137
+   SPI.transfer(B11001111);
138
+
139
+   digitalWrite(10, LOW);
140
+
113
-          }
141
+   }  
114
-
142
+
115
-   //LOOP処理3
143
+    //通常LOOP処理3
116
144
 
117
145
   }
118
146
 
@@ -122,11 +150,19 @@
122
150
 
123
151
    if (val == 0) {
124
152
 
125
-   //切替時に極短時間だけやらせたい処理(1回だけでも可)
153
+   SPI.beginTransaction(mySPISettings);
154
+
126
-
155
+   digitalWrite(10, HIGH);
156
+
157
+   SPI.transfer(B01011010);
158
+
159
+   SPI.transfer(B11001111);
160
+
161
+   digitalWrite(10, LOW);
162
+
127
-          }
163
+   }
128
-
164
+
129
-   //LOOP処理4
165
+   //通常LOOP処理4
130
166
 
131
167
   }
132
168
 
@@ -136,11 +172,19 @@
136
172
 
137
173
    if (val == 0) {
138
174
 
139
-   //切替時に極短時間だけやらせたい処理(1回だけでも可)
175
+   SPI.beginTransaction(mySPISettings);
176
+
140
-
177
+   digitalWrite(10, HIGH);
178
+
179
+   SPI.transfer(B01011110);
180
+
181
+   SPI.transfer(B11001111);
182
+
183
+   digitalWrite(10, LOW);
184
+
141
-          }  
185
+   }  
142
-
186
+
143
-   //LOOP処理5
187
+   //通常LOOP処理5
144
188
 
145
189
   }
146
190
 
@@ -148,11 +192,19 @@
148
192
 
149
193
    if (val == 0) {
150
194
 
151
-   //切替時に極短時間だけやらせたい処理(1回だけでも可)
195
+   SPI.beginTransaction(mySPISettings);
196
+
152
-
197
+   digitalWrite(10, HIGH);
198
+
199
+   SPI.transfer(B11011010);
200
+
201
+   SPI.transfer(B11001111);
202
+
203
+   digitalWrite(10, LOW);
204
+
153
-          }
205
+   }
154
-
206
+
155
-   //LOOP処理6
207
+   //通常LOOP処理6
156
208
 
157
209
   }
158
210