M5Stack 入出力

M5StickCのIOについて調べてみたこちらより。M5Stick用ですが、動くでしょう
M5StickC.h → M5Stack.h に書き換えています。
digitalRead() デジタル入力 0(1.65V未満) or 1(1.65V以上)どのピンでも使用可
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <M5Stack.h>
  
int PIN = 32;
  
void setup() {
  M5.begin();
  
  pinMode( PIN, INPUT);
}
  
void loop() {
  Serial.printf("%04d\n", digitalRead(PIN) );
  delay(500);
}

analogRead() アナログ入力 0(0V)-4095(3.3V)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <M5Stack.h>
  
int PIN = 32;
  
void setup() {
  M5.begin();
  
  pinMode(PIN, ANALOG);
}
  
void loop() {
  Serial.printf("%04d\n", analogRead(PIN) );
  delay(500);
}

dacWrite() アナログ出力 0(0V)-255(3.3V) dacWrite()はIO26でしか使えません。(内部的にはIO25でも可能)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <M5Stack.h>
  
int PIN = 26;
  
void setup() {
  M5.begin();
  
  pinMode(PIN, OUTPUT);
}
  
void loop() {
  dacWrite(PIN, 0);
  delay(500);
  dacWrite(PIN, 128);
  delay(500);
  dacWrite(PIN, 255);
  delay(500);
}

digitalWrite() デジタル出力 LOW(0V) or HIGH(3.3V) IO36はIOがInputのみなので、出力には不可、それ以外のPINは可
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <M5Stack.h>
  
int PIN = 32;
  
void setup() {
  M5.begin();
  
  pinMode(PIN, OUTPUT);
}
  
void loop() {
  digitalWrite(PIN, HIGH);
  delay(500);
  digitalWrite(PIN, LOW);
  delay(500);
}

ledcWrite() PWM出力
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <M5Stack.h>
  
int PIN = 32;
int PWMCH = 0;
  
void setup() {
  M5.begin();
  
  pinMode(PIN, OUTPUT);
  ledcSetup(PWMCH, 12000, 8);
  ledcAttachPin(PIN, PWMCH);
}
  
void loop() {
  ledcWrite(PWMCH, 0);    //   0%(0.0V)
  delay(500);
  ledcWrite(PWMCH, 128);  //  50%(1.7V)
  delay(500);
  ledcWrite(PWMCH, 256);  // 100%(3.3V)
  delay(500);
}

PWMはdigitalWrite()で出力を定期的にON/OFFさせることで、擬似的なdacWrite()に似た動きになります。PWMは4PIN同時に利用することが可能で、細かい設定はledcSetup()で行っています。サンプルは周波数が 12KHz で分解能が8ビット(0-256)になっています。

8ビットの場合、256分割してそのうち何個を出力するかの指定なので、出力しないの0と全部出力するの256までの257段階で制御が可能です。

コメント

このブログの人気の投稿

Python OpenCVとWebカメラでバーコードリーダー

VB.net Dictionaryクラスの初期化