回答編集履歴
1
frq 比較パラメータ 変更
answer
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
+
```ここに言語を入力
|
2
|
+
コード
|
1
|
-
シリアルモニタでfrqダミー値を入れて確認
|
3
|
+
```シリアルモニタでfrqダミー値を入れて確認
|
2
4
|
frq境界をまたぐ時のみ spi_out() を出力
|
3
5
|
|
4
6
|
```
|
@@ -36,4 +38,50 @@
|
|
36
38
|
// ----------------------
|
37
39
|
frq += add;
|
38
40
|
}
|
41
|
+
```
|
42
|
+
frq_chk[] として追加してみました frqs1*4 は使ってません
|
43
|
+
シュミットトリガのようにヒステリスを持たせる場合は、frq 上昇時と下降時で frq_chk[] を切り換えれば良いと思います
|
44
|
+
|
45
|
+
```
|
46
|
+
#include <SPI.h>
|
47
|
+
SPISettings mySPISettings = SPISettings(500000, MSBFIRST, SPI_MODE0);
|
48
|
+
long int frq = 0;
|
49
|
+
unsigned char spi_dat[]={ B01001000 , B01001010 , B01011010 , B01011010 , B01011110 , B11011010 };
|
50
|
+
#define frqs0 10000ul
|
51
|
+
#define frqs1 10884ul
|
52
|
+
long frq_chk[] = { frqs0 , frqs1 , frqs0*2 , frqs1*2 , frqs0*4 , frqs1*4 };
|
53
|
+
void spi_out( unsigned char sel ){
|
54
|
+
if ( sel > 5 ){ return; }
|
55
|
+
SPI.beginTransaction(mySPISettings);
|
56
|
+
digitalWrite(10, HIGH);
|
57
|
+
SPI.transfer( spi_dat[sel] );
|
58
|
+
SPI.transfer(B11001111);
|
59
|
+
digitalWrite(10, LOW);
|
60
|
+
}
|
61
|
+
void setup() {
|
62
|
+
Serial.begin( 9600 );
|
63
|
+
Serial.println("Arduino Program Start !!");
|
64
|
+
SPI.begin();
|
65
|
+
}
|
66
|
+
void loop() {
|
67
|
+
static char add = 1;
|
68
|
+
static unsigned char sel = 9;
|
69
|
+
unsigned char frqs;
|
70
|
+
if ( frq <= 0 ){ add = 1; }
|
71
|
+
if ( frq >= 60000 ){ add = -1; }
|
72
|
+
// ---------------------- 判定メイン部
|
73
|
+
// frqs = frq / 10000 ; if ( frqs > 5 ){ frqs = 5; }
|
74
|
+
for ( frqs = 0 ; frqs < 5 ; frqs++ ){
|
75
|
+
if ( frq < frq_chk[frqs] ){ break; }
|
76
|
+
} // for
|
77
|
+
if ( frqs != sel ){
|
78
|
+
sel = frqs;
|
79
|
+
// Serial.print(" frqs = "); Serial.print( frqs );
|
80
|
+
Serial.print(" spi_out("); Serial.print( frqs ); Serial.print(") ");
|
81
|
+
Serial.print(" frq = "); Serial.println( frq );
|
82
|
+
spi_out( frqs );
|
83
|
+
}
|
84
|
+
// ----------------------
|
85
|
+
frq += add;
|
86
|
+
}
|
39
87
|
```
|