hiro yamamoto works

ESP8266 Web logger
RaspberryPi HiRes Audio
Mini Solar power system
当ブログ掲載内容は無保証です。利用は自己責任でお願いいたします。

 

カレンダー

2021
September
Sun Mon Tue Wed Thu Fri Sat
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    

QRコード

検索



このブログを検索

カウンター

本日のアクセス
昨日のアクセス
総アクセス数

ブログサービス

Powered by

teacup.ブログ
RSS

アクチェータのストローク時間を測定(Arduino)

アクチェータのストローク両端にセンサを取り付けて、
ストローク間の移動時間をLCD表示するスケッチを考えて
みました。2021.07.16間違い修正

クリックすると元のサイズで表示します
スイッチをホールラッチセンサに置き換えて、センサ付きエア
アクチェータ(磁石内蔵)動きを検出する予定です。

マイコン:AE-ATMEGA328-MINI(Arduino Pro mini互換秋月電子)
LCD:HiLetgo HD44780 I2C 1602 LCD(I2C変換PCF8574)

・PortBを入力に設定(DDRB = B00000000;)
 Bit6,7は使ってはいけないはずだが入力設定だけなら
 良いのか? Bit0,1(D8,9)入力はプルアップすること。
・ポートB入力ピンレジスタを読んで、
 使用するI/O以外の変化に影響されない。
・micros()のオーバーフローは考慮しない。
・センサはアクチェータの両ストローク端で検出時ON
 D8(sensor0) アクチェータの押し(push)側端
 D9(sensor1) アクチェータの戻り(pull)側端
・Time表示数値の単位は ミリ秒(mS)
クリックすると元のサイズで表示します
動作の説明
 D9(1)に接続したスイッチを押して離し、D8(0)のスイッチを
押したとき表示される値が戻り時間(push Time)
 D8(0)に接続したスイッチを押して離し、D9(1)のスイッチを
押したとき表示される値が押し時間(pull Time)

コピペ後修正必要
<を半角に修正する。&を半角&に修正する。
#include <LiquidCrystal_PCF8574.h>
#include <Wire.h>

LiquidCrystal_PCF8574 lcd(0x27); // set the LCD address to 0x27 for a 16 chars and 2 line display

uint8_t buttonState;
uint8_t lastButtonState = 0;
unsigned long pushStartTime;
unsigned long pullStartTime;

void setup() {
Serial.begin(115200);

Wire.begin();
DDRB = B00000000; // ポートBをすべて入力で良い?
lcd.begin(16, 2); // initialize the lcd
}

void loop() {
lcd.setBacklight(255);//Backlight数字変えても明るさ変化なし 0で消灯

buttonState = PINB & 0x03; // D8:PortB Bit0 D13:PortB Bit5
if (buttonState != lastButtonState) {
if ((buttonState == 0x03) && (lastButtonState == 0x01)) {
pushStartTime = millis();
} else if ((buttonState == 0x02) && (lastButtonState == 0x03)) {
unsigned long pushTime = millis() - pushStartTime;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Push ");
lcd.setCursor(5, 0);
lcd.print(pushTime);
lcd.setCursor(14, 0);
lcd.print("mS");
Serial.print("push Time = "); Serial.println(pushTime);
} else if ((buttonState == 0x03) && (lastButtonState == 0x02)) {
pullStartTime = millis();
} else if ((buttonState == 0x01) && (lastButtonState == 0x03)) {
unsigned long pullTime = millis() - pullStartTime;

lcd.setCursor(0, 1);
lcd.print("Pull ");
lcd.setCursor(5, 1);
lcd.print(pullTime);
lcd.setCursor(14, 1);
lcd.print("mS");

Serial.print("pull Time = "); Serial.println(pullTime);

}
//delay(1);無くても問題ないようだ。
}
lastButtonState = buttonState;

シリアルモニタにも表示します。
無保証です。
0
投稿者:管理人
投稿者
メール

 
コメント
URL
コメントは新しいものから表示されます。
コメント本文中とURL欄にURLを記入すると、自動的にリンクされます。
AutoPage最新お知らせ