- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Arduino のプログラムについて)
Arduinoでバッテリー電圧を制御するプログラム
このQ&Aのポイント
- Arduinoのプログラムで4つのバッテリーの電圧を取得し、充電を制御する方法を教えてください。
- 質問者がArduinoで作成したプログラムでバッテリーの電圧を読み取れているが、充電制御がうまくいかないという問題があります。
- digitalPin10~13のHIGH、LOWを制御する方法についてのアドバイスをお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
i = 0の時、 battery_v[0]が14.5V以上なら r = 9~13のピンを全てLOWにする(しかもなぜPIN9まで操作する?) 違えばすべてをHIGHにする 次のiへ あなたがそうプログラムしているので、全部同じ出力になるのは当然です。 良い方法とはフロチャート書くことを覚えることです。
その他の回答 (2)
- kteds
- ベストアンサー率42% (1882/4440)
回答No.3
下記のようにdigitalWriteの直前でもbattery_v[i]を追加して確認すすと、どのように表示されますか。 Serial.println(battery_v[i]); digitalWrite(r,LOW); および Serial.println(battery_v[i]); digitalWrite(r,HIGH);
質問者
補足
上の場合は、全部の r がLOWになり、下の場合は全部の r がHIGHになります。この配列のrは値を10,11,12,13と代入したので、rは全部を表しているみたいです。
- massano1
- ベストアンサー率40% (4/10)
回答No.2
アナログで測定する前に充電を停止しなければ正しい値は出ません。 一旦充電を停止してから測定してください。
質問者
補足
有難うございました。
補足
有難うございました。C言語の勉強を始めたばかりなもので、配列等しっかりと理解していきたいと思っています。とりあえず、下の様な初心者らしい、長たらしいプログラムを作ってみたら、上手く動作しました。でも、もっとプログラムを簡単に要約したいのですが、今一つ上手く出来ません。 void setup() { Serial.begin(9600); pinMode(10,OUTPUT); pinMode(11,OUTPUT); pinMode(12,OUTPUT); pinMode(13,OUTPUT); } void loop() { digitalWrite(10,LOW); digitalWrite(11,LOW); digitalWrite(12,LOW); digitalWrite(13,LOW); delay(5000); float battery_v[4]; for(int i=0;i<4;i++){ float convert_v=analogRead(i)*5./1024; battery_v[i]=convert_v/30*130; delay(100); Serial.print(i+1); Serial.print(" is "); Serial.println(battery_v[i]); delay(100); if (battery_v[0]<13.8) { digitalWrite(10,HIGH); } if (battery_v[1]<13.8){ digitalWrite(11,HIGH); } if (battery_v[2]<13.8) { digitalWrite(12,HIGH); } if (battery_v[3]<13.8) { digitalWrite(13,HIGH); } } delay(30*60*1000); } フローチャートは、自分で作ろうとするプログラムには必携なんですね。 全体のことを考えないで、部分的な処理ばかり考えていました。とても参考になりました。これからも、頑張ります。有難うございました。