bugbushの日記

3Dプリンター等。Pegasus Touchを使用して色々出力しています。****精度は参考としてください。!!!私のプリント法、管理が間違っている可能性が高いです!!!

arduino_EEPROMを使用する。*ホビーサーボモータ制御

サーボモーターの位置をスイッチを押した時にEEPROMに記憶し、

再度別の外部入力が行われた時(例えばスイッチを押した時)に記憶された位置を呼び出し

移動させる。

ボリュームでサーボモーターの角度を任意の位置へ移動させる

ボタン1を押す

EEPROMに格納

ボタン2を押す

EEPROMの~ナントカ番地から格納した0~180の数値を呼び出す

サーボモータが角度を変える



常にボリュームでサーボモーターの角度を変えられるが

ボタンを押した時はメモリした位置に移動する。

という単純なプログラムです。

以下プログラム


#include <Servo.h> //サーボ使うなら必須
#include <EEPROM.h>//EEPROM使うなら必須
Servo myservo;
int Pin7 = 7; //デジタルピン7へ スイッチ
int Pin8 = 8; //デジタルピン8へ スイッチ
int i; //アナログ入力ピン用
int a ;
int c;
int value;
int value2;
int deg;
void setup()
{

Serial.begin(9600); // シリアルポートを設定
myservo.attach(3); //ピン3使用
pinMode(Pin7, INPUT);//入力に7ピン
pinMode(Pin8, INPUT);//入力に8ピン


}

void loop()
{
if(digitalRead(Pin8) == LOW){//8ピンがLOWの時.スイッチを押してない時

i = analogRead(A0); // アナログ入力ピンを読み取る0~1023
deg= map(i, 0, 1023,0,180);// アナログ0~1023を0~180に
myservo.write(deg);//myservoをボリュームと連動0~180度の範囲で動く

Serial.print(i,10); // デバグ用に値を出力する
Serial.print(" "); 
Serial.print(deg,10); // デバグ用に値を出力する
Serial.print(" ");

 

if(digitalRead(Pin7) == HIGH){//ピン7がHIGHになった時

c=1; 
EEPROM.write(c,deg);//aEEPROMのアドレスc1にdegを書き込む

value = EEPROM.read(1);//番地1の値をvalueに格納 *多分不要
myservo.write(value);//maservoに番地1の値を出力 *多分不要。確認するならLED光らせるなり角度をずらすなりなんなりと
Serial.print(value);//デバック用
Serial.print(" ");
Serial.println(c,10);//デバック用
delay(3000); //確認用であり3000msの間入力を受け付けない
}

else if (digitalRead(Pin7) == LOW){//確認用。マイナスにすることで確認
a=-i;
Serial.println(a,10);
Serial.print(" ");
}

}

if(digitalRead(Pin8) == HIGH){//ピン8が入力されたとき

value2 = EEPROM.read(1); // 番地の指定(1番地の値をvalue2へ格納)*valueでも可
myservo.write(value2); //maservoに番地1の値を出力
Serial.print(value2,10);//デバック用
Serial.print(" ");
Serial.println(c,10);
}



}//ぷろぐらむえんど