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); } }//ぷろぐらむえんど