STM32G071で周波数カウンター(だいたい10kzhぐらい)(SSD1307(128x32))


STM32G071で周波数カウンター(だいたい10kzhぐらい)(SSD1307(128x32))



x 過去ログを見よ


![o_cop416.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/2a2b63e9-3a72-83ee-4bb8-dec545668c62.jpeg)




```c++



//OLED_SSD1306_BITMAP24x320_DS1307_071


//ヘッダーファイル
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

//定義
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 32 // OLED display height, in pixels
#define OLED_RESET     -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

// ビットマップデータ
// 'soiya1', 128x320px
static const unsigned char PROGMEM databytes[] = {




  0xff, 0x00, 0xff, 0xfe, 0x18, 0x7f, 0xfc, 0xff, 0x3f, 0xf9, 0xff, 0x9f, 0xf3, 0xff, 0xcf, 0xf3, 
  0xff, 0xcf, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 
  0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 
  0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 
  0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 
  0xe7, 0xf3, 0xff, 0xe7, 0xf3, 0xff, 0xcf, 0xf8, 0xff, 0x8f, 0xfc, 0x3e, 0x1f, 0xfe, 0x00, 0x3f, 
  0xff, 0x03, 0xff, 0xfe, 0x03, 0xff, 0xfc, 0xe7, 0xff, 0xf9, 0xe7, 0xff, 0xfb, 0xe7, 0xff, 0xff, 
  0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 
  0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 
  0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 
  0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 
  0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xfe, 0x00, 0x7f, 0xfc, 0x00, 0x3f, 
  0xff, 0x00, 0xff, 0xfe, 0x18, 0x7f, 0xfc, 0xff, 0x3f, 0xf9, 0xff, 0x9f, 0xf3, 0xff, 0xcf, 0xf3, 
  0xff, 0xcf, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xf7, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 
  0xe7, 0xff, 0xff, 0xef, 0xff, 0xff, 0xcf, 0xff, 0xff, 0x9f, 0xff, 0xff, 0x3f, 0xff, 0x80, 0x7f, 
  0xff, 0x00, 0xff, 0xfe, 0x3f, 0xff, 0xfc, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xf3, 
  0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 
  0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xf1, 0xfe, 0x07, 0xf8, 0x00, 0x07, 
  0xff, 0x00, 0xff, 0xfe, 0x18, 0x7f, 0xfc, 0xff, 0x3f, 0xf9, 0xff, 0x9f, 0xf3, 0xff, 0xcf, 0xf3, 
  0xff, 0xcf, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 
  0xe7, 0xff, 0xff, 0xef, 0xff, 0xff, 0xcf, 0xff, 0xff, 0x9f, 0xff, 0xff, 0x3f, 0xff, 0x00, 0x7f, 
  0xff, 0x00, 0x7f, 0xff, 0xfe, 0x3f, 0xff, 0xff, 0x9f, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xe7, 0xff, 
  0xff, 0xe7, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xf3, 0xe7, 0xff, 0xf3, 0xe7, 0xff, 
  0xf3, 0xf3, 0xff, 0xf7, 0xf3, 0xff, 0xe7, 0xf8, 0xff, 0xcf, 0xfc, 0x3e, 0x1f, 0xfe, 0x00, 0x3f, 
  0xff, 0xfe, 0x7f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0x7f, 0xff, 0xf8, 0xff, 0xff, 0xf9, 0xff, 0xff, 
  0xe1, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xcf, 0xff, 0xff, 0x0f, 0xff, 0xfe, 0x19, 0xff, 0xfc, 0x39, 
  0xff, 0xf8, 0x79, 0xff, 0xf1, 0xf9, 0xff, 0xf3, 0xf9, 0xff, 0xe3, 0xf9, 0xff, 0xe7, 0xf9, 0xff, 
  0xe7, 0xf1, 0xf7, 0xe0, 0x00, 0x07, 0xe0, 0x00, 0x07, 0xff, 0xf9, 0xff, 0xff, 0xf9, 0xff, 0xff, 
  0xf9, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xf9, 
  0xff, 0xff, 0xf9, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xf9, 0xff, 
  0xf0, 0x00, 0x07, 0xf0, 0x00, 0x07, 0xe7, 0xff, 0xff, 0xef, 0xff, 0xff, 0xef, 0xff, 0xff, 0xe7, 
  0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 
  0xff, 0xe3, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xf8, 0x3f, 0xff, 0xfe, 0x00, 0x7f, 
  0xff, 0x20, 0x7f, 0xff, 0xfe, 0x3f, 0xff, 0xff, 0x9f, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xe7, 0xff, 
  0xff, 0xe7, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xf3, 0xff, 0xff, 
  0xf3, 0xff, 0xff, 0xf7, 0xf3, 0xff, 0xe7, 0xf8, 0xff, 0xcf, 0xfc, 0x3e, 0x1f, 0xfe, 0x00, 0x3f, 
  0xff, 0x00, 0xff, 0xfe, 0x18, 0x7f, 0xfc, 0xff, 0x3f, 0xf9, 0xff, 0x9f, 0xf3, 0xff, 0xcf, 0xf3, 
  0xff, 0xcf, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xef, 0xe7, 0xff, 0xff, 0xe7, 0xff, 
  0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe1, 0xff, 0xff, 0xe0, 0x00, 0x7f, 
  0xe0, 0x00, 0x3f, 0xe1, 0xff, 0x3f, 0xe3, 0xff, 0x9f, 0xe7, 0xff, 0xcf, 0xe7, 0xff, 0xe7, 0xe7, 
  0xff, 0xe7, 0xe7, 0xff, 0xf3, 0xe7, 0xff, 0xf3, 0xe7, 0xff, 0xf3, 0xe7, 0xff, 0xf3, 0xe7, 0xff, 
  0xf3, 0xf3, 0xff, 0xf7, 0xf3, 0xff, 0xe7, 0xf8, 0xff, 0xcf, 0xfc, 0x3e, 0x1f, 0xfe, 0x00, 0x3f, 
  0xc0, 0x00, 0x0f, 0xc0, 0x00, 0x03, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xc7, 0xff, 0xff, 0xcf, 0xff, 
  0xff, 0x8f, 0xff, 0xff, 0x0f, 0xff, 0xfe, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xfc, 0xff, 0xff, 0xf9, 
  0xff, 0xff, 0xf3, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xc7, 0xff, 0xff, 0x8f, 0xff, 0xff, 0x0f, 0xff, 
  0xfe, 0x1f, 0xff, 0xfe, 0x3f, 0xff, 0xfc, 0x3f, 0xff, 0xf8, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xf1, 
  0xff, 0xff, 0xe1, 0xff, 0xff, 0xe1, 0xff, 0xff, 0xe1, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xe3, 0xff, 
  0xff, 0xe3, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 
  0xff, 0x00, 0xff, 0xfe, 0x18, 0x7f, 0xfc, 0xff, 0x3f, 0xf9, 0xff, 0x9f, 0xf3, 0xff, 0xcf, 0xf3, 
  0xff, 0xcf, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 
  0xe7, 0xf3, 0xff, 0xef, 0xf3, 0xff, 0xcf, 0xf9, 0xff, 0x9f, 0xfc, 0xff, 0x3f, 0xfe, 0x00, 0x7f, 
  0xff, 0x00, 0x7f, 0xfe, 0x3e, 0x3f, 0xfc, 0xff, 0x9f, 0xf9, 0xff, 0xcf, 0xf3, 0xff, 0xe7, 0xf3, 
  0xff, 0xe7, 0xe7, 0xff, 0xf3, 0xe7, 0xff, 0xf3, 0xe7, 0xff, 0xf3, 0xe7, 0xff, 0xf3, 0xe7, 0xff, 
  0xf3, 0xf3, 0xff, 0xf7, 0xf3, 0xff, 0xe7, 0xf8, 0xff, 0xcf, 0xfc, 0x3e, 0x1f, 0xfe, 0x00, 0x3f, 
  0xff, 0x00, 0xff, 0xfe, 0x18, 0x7f, 0xfc, 0xff, 0x3f, 0xf9, 0xff, 0x9f, 0xf3, 0xff, 0xcf, 0xf3, 
  0xff, 0xc7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xff, 
  0xe7, 0xf3, 0xff, 0xe7, 0xf3, 0xff, 0xe7, 0xf9, 0xff, 0xe7, 0xfc, 0xff, 0x07, 0xfe, 0x00, 0x07, 
  0xff, 0x00, 0x67, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 
  0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xc7, 0xff, 0xff, 
  0xc7, 0xff, 0xff, 0xc7, 0xff, 0xff, 0x8f, 0xff, 0xfc, 0x1f, 0xff, 0xf0, 0x3f, 0xff, 0xe1, 0xff,



// 'F24x32_(colonQQ)', 24x32px


  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 
  0xff, 0xff, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0xff, 0xff, 
  0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff



};


#define in_pwm A0

#define DD PA10    // potentiometer connected to analog pin x


//初期化
void setup() {

  pinMode(in_pwm,INPUT);


  pinMode(DD, OUTPUT);   // sets the LED pin as output
  analogWriteFrequency(50);   //周波数
  analogWriteResolution(16);  //分解能
  analogWrite(DD, 32000  );   // analogRead values go from 0


  // I2Cアドレスは使用するディスプレイに合わせて変更する
  display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS);

}//setup


//メインループ
void loop() {

  int ii;    //ループカウンター
  int c1000 = 1; //千の桁
  int c100  = 2; //百の桁
  int c10   = 3; //十の桁
  int c1    = 4; //一の桁

  int x = 46; //数値

  int a,b;


  a = pulseIn(in_pwm,HIGH,20000000);
  delay(1); //1m秒待つ
  b = pulseIn(in_pwm,LOW,20000000);
  delay(1); //1m秒待つ

  if(a==0){a=1;} //0割り算防止用
  
  x = 1000000  / (a + b);  

  //x= 1234;

  if( x >=9999 ){x = 9999;} //オーバーフロート用


//10の割り算 0から9999までは、正しい。 stm32
#define DIV10(n) (((n*409)+((n*154)>>8))>>12)

  c1    =  (  x - (DIV10(x) * 10)  );  // '0'+(d%10)
  x = DIV10(x);
  c10   =  (  x - (DIV10(x) * 10)  );  // '0'+(d%10)
  x = DIV10(x);
  c100  =  (  x - (DIV10(x) * 10)  );  // '0'+(d%10)
  c1000 =   DIV10(x);                  // '0'+(d/10)







  // 画面表示をクリア
  display.fillScreen(BLACK);


  //ビットマップの表示
  display.drawBitmap( 0, 0, databytes + (c1000 * (24 / 8) * 32), 24, 32,  WHITE);

  //ビットマップの表示
  display.drawBitmap(24, 0, databytes + ( c100 * (24 / 8) * 32), 24, 32,  WHITE);

  //ビットマップの表示
  display.drawBitmap(48, 0, databytes + (  c10 * (24 / 8) * 32), 24, 32,  WHITE);

  //ビットマップの表示
  display.drawBitmap(72, 0, databytes + (   c1 * (24 / 8) * 32), 24, 32,  WHITE);


  //ビットマップの表示
  //display.drawBitmap(48, 0, databytes + (  10 * (24 / 8) * 32), 24, 32,  WHITE);



  // 描画バッファの内容を画面に表示
  display.display();

  delay(1000); //1秒待つ

}//loop



```