前提・実現したいこと
Arduinoとロードセル、HX711を使用して(例:重さが500g)を超えたらリレーモジュールを動かしたい
発生している問題・エラーメッセージ
ifの条件にどれを参考にしていいかわからない。
該当のソースコード
#include <Arduino.h> void AE_HX711_Init(void); void AE_HX711_Reset(void); long AE_HX711_Read(void); long AE_HX711_Averaging(long adc,char num); float AE_HX711_getGram(char num); //---------------------------------------------------// // ピンの設定 //---------------------------------------------------// #define pin_dout 8 #define pin_slk 9 //---------------------------------------------------// // ロードセル シングルポイント( ビーム型) SC133 20kG [P-12034] //---------------------------------------------------// #define OUT_VOL 0.00091f //定格出力 [V] #define LOAD 5000.0f //定格容量 [g] float offset=0; void setup() { pinMode(4,OUTPUT); Serial.begin(9600); Serial.println("AE_HX711 test"); AE_HX711_Init(); AE_HX711_Reset(); offset = AE_HX711_getGram(30); } void loop() { float data; char S1[20]; char s[20]; data = AE_HX711_getGram(5); sprintf(S1,"%s [g] (0x%4x)",dtostrf((data-offset), 5, 2, s),AE_HX711_Read()); Serial.println(S1); } void AE_HX711_Init(void) { pinMode(pin_slk, OUTPUT); pinMode(pin_dout, INPUT); } void AE_HX711_Reset(void) { digitalWrite(pin_slk,1); delayMicroseconds(100); digitalWrite(pin_slk,0); delayMicroseconds(100); } long AE_HX711_Read(void) { long data=0; while(digitalRead(pin_dout)!=0); delayMicroseconds(10); for(int i=0;i<24;i++) { digitalWrite(pin_slk,1); delayMicroseconds(5); digitalWrite(pin_slk,0); delayMicroseconds(5); data = (data<<1)|(digitalRead(pin_dout)); } //Serial.println(data,HEX); digitalWrite(pin_slk,1); delayMicroseconds(10); digitalWrite(pin_slk,0); delayMicroseconds(10); return data^0x800000; } long AE_HX711_Averaging(long adc,char num) { long sum = 0; for (int i = 0; i < num; i++) sum += AE_HX711_Read(); return sum / num; } float AE_HX711_getGram(char num) { #define HX711_R1 20000.0f #define HX711_R2 8200.0f #define HX711_VBG 1.25f #define HX711_AVDD 4.2987f//(HX711_VBG*((HX711_R1+HX711_R2)/HX711_R2)) #define HX711_ADC1bit HX711_AVDD/16777216 //16777216=(2^24) #define HX711_PGA 128 #define HX711_SCALE (OUT_VOL * HX711_AVDD / LOAD *HX711_PGA) float data; data = AE_HX711_Averaging(AE_HX711_Read(),num)*HX711_ADC1bit; //Serial.println( HX711_AVDD); //Serial.println( HX711_ADC1bit); //Serial.println( HX711_SCALE); //Serial.println( data); data = data / HX711_SCALE; if (digitalRead(pin_dout) >=500 ) { digitalWrite(4, HIGH); //リレーをON(HIGH } else { digitalWrite(4, LOW); //リレーをOFF(LOW } return data; }
試したこと
ifのコードを“data”“AE_HX711_Read”など試したがうまくいかない、デジタルだから2進数?と混乱中
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/06 07:13