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

回答編集履歴

1

frq 比較パラメータ 変更

2019/02/02 20:55

投稿

koujikuu
koujikuu

スコア401

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
  ```