今回もキットに手をつけれずにいます。
なんとか2つのサーボモーターをリモコンのボタンで制御できるようになりました。
紙飛行機が昇降・旋回する様子ですが、なんかぎこちないです。
それよりも、この紙飛行機の芸術性のなさはモデラーとして駄目ですね。(自分で突っ込んでおきます。)
サーボモーターにノイズが入るのかギクシャクとした作動になります、特に機銃発射(赤色LED点灯)に際しては”ビクッ”と挙動が変。
まだまだプログラミング沼から出られそうにありません。
以下に、現在のスケッチを記述します。
//////////////////////////////
// kurenainobuta Ver10.0 //
// By nanata_factory //
//////////////////////////////
#include <IRremote.h>
#include <Servo.h>
#include <DFPlayer_Mini_Mp3.h>
int RECV_PIN = 7; //赤外線受信機のピン
Servo Eservo; //Eservo(昇降用)サーボの宣言
Servo Tservo; //Tservo(旋回用)サーボの宣言
int Eval=30; //昇降用サーボの水平角の宣言
int Tval=30; //旋回用サーボの水平角の宣言
bool EcwRotation, EccwRotation; //昇降用サーボの回転の状態
bool TcwRotation, TccwRotation; //旋回用サーボの回転の状態
SoftwareSerial mySerial(2,3);// RX, TX
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // 受信機を起動する
Eservo.attach(6); //昇降用サーボピンの定義
Tservo.attach(4); //旋回用サーボピンの定義
pinMode(8,OUTPUT);//LEDを8ピンに
mp3_set_serial (mySerial); //set softwareSerial for DFPlayer-mini mp3 module
mySerial.begin (9600);
Eservo.write(30);
Tservo.write(30);
}
void loop()
{
if (irrecv.decode(&results)) {
// Serial.println(results.value,HEX);
// Serial.println(Eval);
// Serial.println(Tval);
irrecv.resume(); // Receive the next value
if (results.value == 0x008F705FA)//↑が押されたら
{
EcwRotation = !EcwRotation; //回転角度の値を切り替えます
EccwRotation = false; //これ以上回転しません
}else if (results.value == 0x008F700FF){//↓が押されたら
EccwRotation = !EccwRotation; //toggle the rotation value
EcwRotation = false; //回転角度の値を切り替えます
}
else if (EcwRotation && (Eval != 60)) {
Eval++; //連動ボタン用
}
else if (EccwRotation && (Eval != 0)) {
Eval--; //カウンター連動ボタン用
}
if (results.value == 0x008F701FE)//→が押されたら
{
TcwRotation = !TcwRotation; //回転角度の値を切り替えます
TccwRotation = false; //これ以上回転しません
}else if (results.value == 0x008F708F7){//←が押されたら
TccwRotation = !TccwRotation; //toggle the rotation value
TcwRotation = false; //回転角度の値を切り替えます
}
else if (TcwRotation && (Tval != 60)) {
Tval++; //連動ボタン用
}
else if (TccwRotation && (Tval != 0)) {
Tval--; //カウンター連動ボタン用
}
if (results.value == 0x008F71FE0)//Aが押されたら
{
mp3_set_volume (20);
mp3_play (1);
}
if (results.value == 0x008F704FB)//中央が押されたら
{
mp3_set_volume (25);
mp3_play (2);
digitalWrite(8, HIGH);//LEDを点灯させる
delay(100);
digitalWrite(8, LOW);
delay(100);
digitalWrite(8, HIGH);//LEDを点灯させる
delay(100);
digitalWrite(8, LOW);
delay(100);
digitalWrite(8, HIGH);
delay(100);
digitalWrite(8, LOW);
delay(100);
digitalWrite(8, HIGH);
delay(100);
digitalWrite(8, LOW);
}
}
Eservo.write(Eval);
Tservo.write(Tval);
Serial.println(Eval);
Serial.println(Tval);
delay(100); //回転速度
}












































