アクチェータのストローク両端にセンサを取り付けて、
ストローク間を移動する時間をシリアルモニタへ表示する
スケッチを考えてみました。
マイコン:ESP-WROOM-02
デジタルIO:MCP23S08(8Bit I/Oエクスパンダ)
(E-温度品(動作電圧4.5〜5.5V)を3.3V動作させてます。)
・4Bitを入力、残り4Bitを出力に設定(必須はI/O0,1入力)
・入力は抵抗でプルダウン、スイッチ押すとHIGH
・デジタルI/Oポート全体(レジスタ)を読んで、
使用するI/O以外の変化に影響されない。
・micros()のオーバーフローは考慮しない。
・センサはアクチェータの両ストローク端で検出時ON
IO0 アクチェータの押し(push)側端
IO1 アクチェータの戻り(pull)側端
・Time表示数値の単位は ミリ秒(mS)
動作の説明
IO0に接続したスイッチを押して離し、IO1のスイッチを
押したとき表示される値が戻り時間(pull Time)
IO1に接続したスイッチを押して離し、IO0のスイッチを
押したとき表示される値が押し時間(push Time)
スケッチ例 StateChangDetectionをベースにしました。
コピペ後修正必要です。(修正不要な書き方わからんです)
<を半角に修正する。&を半角&に修正する。
シリアルモニタの表示
右スイッチがIO0、左スイッチがIO1
ストローク間を移動する時間をシリアルモニタへ表示する
スケッチを考えてみました。
マイコン:ESP-WROOM-02
デジタルIO:MCP23S08(8Bit I/Oエクスパンダ)
(E-温度品(動作電圧4.5〜5.5V)を3.3V動作させてます。)
・4Bitを入力、残り4Bitを出力に設定(必須はI/O0,1入力)
・入力は抵抗でプルダウン、スイッチ押すとHIGH
・デジタルI/Oポート全体(レジスタ)を読んで、
使用するI/O以外の変化に影響されない。
・micros()のオーバーフローは考慮しない。
・センサはアクチェータの両ストローク端で検出時ON
IO0 アクチェータの押し(push)側端
IO1 アクチェータの戻り(pull)側端
・Time表示数値の単位は ミリ秒(mS)
動作の説明
IO0に接続したスイッチを押して離し、IO1のスイッチを
押したとき表示される値が戻り時間(pull Time)
IO1に接続したスイッチを押して離し、IO0のスイッチを
押したとき表示される値が押し時間(push Time)
スケッチ例 StateChangDetectionをベースにしました。
コピペ後修正必要です。(修正不要な書き方わからんです)
<を半角に修正する。&を半角&に修正する。
#include <MCP23S08.h>//<を半角に直す
#define CS_PIN 16 //MCP23S08のCS PIN
MCP23S08 expander(CS_PIN, 0x20);//アドレスA0,A1 PIN-GND接続
uint8_t buttonState; //現在の入力状態
uint8_t lastButtonState = 0; //以前の入力状態
unsigned long pushStartTime;
unsigned long pullStartTime;
void setup() {
Serial.begin(115200);
//ESP本体pinModeはSPI.beginの前に置く
SPI.begin();
expander.begin();// I/O expander MCP23S08
for (uint8_t pin = 0; pin
シリアルモニタの表示
右スイッチがIO0、左スイッチがIO1