花了幾天時間做出來的電磁炮。三種模式:模式一,調距離射靶。模式二,調角度,距離射靶。模式三,全自動射靶(利用激光測距來瞄靶)
#################################程序###########################
//遙控
#include <IRremote.h>
//LCD1602
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);//0x27 0x3F
//舵機
#include <Servo.h>
Servo myservo;
Servo myservo2;
const int irReceiverPin =7;//遙控引腳
const int relayPin =3;//繼電器引腳
int tu=0;//模式
int JL=0;//距離
int JL2=0;//模式2距離
unsigned int JL3;//模式3距離
int jiaodu=0;//角度
int jiaodu2=0;//模式2角度
int jiaodu3=0;//模式三角度
int zh=0;//模式2切換
int pin =4;//激光
int jishi;
int jiaodu4=0;
int JL4=0;
int jiaodu5=0;
unsigned long duration;//模式三激光探測距離
IRrecv irrecv(irReceiverPin); //Creates a variable of type IRrecv
decode_results results;
void setup() {
// put your setup code here, to run once:
pinMode(relayPin, OUTPUT);//使能繼電器
Serial.begin(9600);//波特率
myservo2.attach(8); myservo.attach(9);//舵機使能
irrecv.enableIRIn(); //遙控
lcd.init(); //LCD1602
lcd.backlight();
pinMode(pin, INPUT);
}
void loop() {
myservo.write(60);
while(1){
//遙控串口
if (irrecv.decode(&results)) //if the ir receiver module receiver data
{
/*
Serial.print("irCode: "); //print"irCode: "
Serial.print(results.value, HEX); //print the value in hexdecimal
Serial.print(", bits: "); //print" , bits: "
Serial.print(JL);
Serial.print(" ");
Serial.print(tu);
Serial.print(" ");
Serial.println(results.bits); //print the bits
*/
irrecv.resume(); // Receive the next value
}
// delay(20);
if(tu==0){
myservo.write(0);myservo2.write(90);
lcd.setCursor(0, 0);
lcd.print("Electromagnetic");
lcd.setCursor(0, 1);
lcd.print("Gun ");
}else if(tu==1){
lcd.setCursor(0, 0);
lcd.print("Model: 1 ");
lcd.setCursor(0, 1);
lcd.print(" Distance");
lcd.setCursor(9, 1);
lcd.print(JL);
lcd.setCursor(12, 1);
lcd.print("cm");
}else if(tu==2){
lcd.setCursor(0, 0);
lcd.print("Model: 2 ");
lcd.setCursor(0, 1);
lcd.print("JL:");
lcd.setCursor(4, 1);
lcd.print(JL2);
lcd.setCursor(8, 1);
lcd.print("JD:");
lcd.setCursor(12, 1);
lcd.print(jiaodu2);
}
switch(results.value){
case 0xFFA25D://CH-
tu=1;
results.value=0xFFFFFF;
break;
case 0xFF629D://CH
if(tu==1){
jiaodu=(JL/10)-5;
myservo.write(jiaodu);
delay(50);
digitalWrite(relayPin,HIGH);
delay(500);
digitalWrite(relayPin,LOW);
JL=0;tu=0;jiaodu=0;
results.value=0xFFFFFF;
}else if((tu==2)&&(zh==1)&&(JL2>199)){
jiaodu2=jiaodu2+60;
myservo2.write(jiaodu2);
jiaodu=(JL2/10)-5;
myservo.write(jiaodu);
delay(100);
digitalWrite(relayPin,HIGH);
delay(500);
digitalWrite(relayPin,LOW);
JL=0;tu=0;jiaodu2=0;jiaodu=0;zh=0;JL2=0;
results.value=0xFFFFFF;
}else results.value=0xFFFFFF;
break;
case 0xFFE21D://CH+
tu=2;
results.value=0xFFFFFF;
break;
case 0xFF22DD://|<<
if((tu==2)&&(zh==1)){
zh=0;
results.value=0xFFFFFF;
}
break;
case 0xFF02FD://>>|
if((tu==2)&&(zh==0)){
zh=1;
results.value=0xFFFFFF;
}else results.value=0xFFFFFFF;
break;
case 0xFFC23D://>||
tu=3;jiaodu3=60;
myservo2.write(60);
results.value=0xFFFFFFF;
break;
case 0xFFE01F://-
if((tu==1)&&(JL>199)){
JL--;
lcd.setCursor(9, 1);
lcd.print(JL);
results.value=0xFFFFFFF;
}else if((tu==2)&&(zh==0)&&(JL2>199)){
JL2--;
lcd.setCursor(4, 1);
lcd.print(JL2);
results.value=0xFFFFFFF;
}else if((tu==2)&&(zh==1)&&(jiaodu2>0)){
jiaodu2--;
lcd.setCursor(12, 1);
lcd.print(jiaodu2);
results.value=0xFFFFFFF;
}else results.value=0xFFFFFFF;
break;
case 0xFFA857://+
if((tu==1)&&(JL<301)){
JL++;
results.value=0xFFFFFFF;
}else if((tu==2)&&(zh==0)&&(JL2<301)){
JL2++;
results.value=0xFFFFFFF;
}else if((tu==2)&&(zh==1)&&(jiaodu2<61)){
jiaodu++;
results.value=0xFFFFFFF;
}else results.value=0xFFFFFFF;
break;
case 0xFF906F://EQ
break;
case 0xFF6897://0
if(tu==1){
JL=0;
lcd.setCursor(9, 1);
lcd.print(" ");
results.value=0xFFFFFFF;
}else if((tu==2)&&(zh==0)){
lcd.setCursor(4, 1);
lcd.print(" ");
JL2=0;
results.value=0xFFFFFFF;
}else if((tu==2)&&(zh==1)){
lcd.setCursor(12, 1);
lcd.print(" ");
jiaodu2=0;
results.value=0xFFFFFFF;
}else results.value=0xFFFFFFF;
break;
case 0xFF9867://100+
if((tu==1)&&(JL<301)){
JL=JL+100;
results.value=0xFFFFFFF;
}else if((tu==2)&&(zh==0)&&(JL2<301)){
JL2=JL2+100;
results.value=0xFFFFFFF;
}else results.value=0xFFFFFFF;
break;
case 0xFFB04F://200+
if((tu==1)&&(JL<301)){
JL=JL+200;
results.value=0xFFFFFFF;
}else if((tu==2)&&(zh==0)&&(JL2<301)){
JL2=JL2+200;
results.value=0xFFFFFFF;
}else results.value=0xFFFFFFF;
break;
case 0xFF30CF://1
if((tu==1)&&(JL<301)){
JL=JL+1;
results.value=0xFFFFFFF;
}else if((tu==2)&&(zh==0)&&(JL<301)){
JL2=JL2+1;
results.value=0xFFFFFFF;
}else if((tu==2)&&(zh==1)&&(jiaodu2<61)){
jiaodu2=jiaodu2+1;
results.value=0xFFFFFFF;
}else results.value=0xFFFFFFF;
break;
case 0xFF18E7://2
if((tu==1)&&(JL<301)){
JL=JL+2;
results.value=0xFFFFFFF;
}else if((tu==2)&&(zh==0)&&(JL<301)){
JL2=JL2+2;
results.value=0xFFFFFFF;
}else if((tu==2)&&(zh==1)&&(jiaodu2<61)){
jiaodu2=jiaodu2+2;
results.value=0xFFFFFFF;
}else results.value=0xFFFFFFF;
break;
case 0xFF7A85://3
if((tu==1)&&(JL<301)){
JL=JL+3;
results.value=0xFFFFFFF;
}else if((tu==2)&&(zh==0)&&(JL<301)){
JL2=JL2+3;
results.value=0xFFFFFFF;
}else if((tu==2)&&(zh==1)&&(jiaodu2<61)){
jiaodu2=jiaodu2+3;
results.value=0xFFFFFFF;
}else results.value=0xFFFFFFF;
break;
case 0xFF10EF://4
if((tu==1)&&(JL<301)){
JL=JL+4;
results.value=0xFFFFFFF;
}else if((tu==2)&&(zh==0)&&(JL<301)){
JL2=JL2+4;
results.value=0xFFFFFFF;
}else if((tu==2)&&(zh==1)&&(jiaodu2<61)){
jiaodu2=jiaodu2+4;
results.value=0xFFFFFFF;
}else results.value=0xFFFFFFF;
break;
case 0xFF38C7://5
if((tu==1)&&(JL<301)){
JL=JL+5;
results.value=0xFFFFFFF;
}else if((tu==2)&&(zh==0)&&(JL<301)){
JL2=JL2+5;
results.value=0xFFFFFFF;
}else if((tu==2)&&(zh==1)&&(jiaodu2<61)){
jiaodu2=jiaodu2+5;
results.value=0xFFFFFFF;
}else results.value=0xFFFFFFF;
break;
case 0xFF5AA5://6
if((tu==1)&&(JL<301)){
JL=JL+6;
results.value=0xFFFFFFF;
}else if((tu==2)&&(zh==0)&&(JL<301)){
JL2=JL2+6;
results.value=0xFFFFFFF;
}else if((tu==2)&&(zh==1)&&(jiaodu2<61)){
jiaodu2=jiaodu2+6;
results.value=0xFFFFFFF;
}else results.value=0xFFFFFFF;
break;
case 0xFF42BD://7
if((tu==1)&&(JL<301)){
JL=JL+7;
results.value=0xFFFFFFF;
}else if((tu==2)&&(zh==0)&&(JL<301)){
JL2=JL2+7;
results.value=0xFFFFFFF;
}else if((tu==2)&&(zh==1)&&(jiaodu2<61)){
jiaodu2=jiaodu2+7;
results.value=0xFFFFFFF;
}else results.value=0xFFFFFFF;
break;
case 0xFF4AB5://8
if((tu==1)&&(JL<301)){
JL=JL+8;
results.value=0xFFFFFFF;
}else if((tu==2)&&(zh==0)&&(jiaodu2<61)){
jiaodu2=jiaodu2+8;
results.value=0xFFFFFFF;
}else if((tu==2)&&(zh==1)&&(JL<301)){
JL2=JL2+8;
results.value=0xFFFFFFF;
}else results.value=0xFFFFFFF;
break;
case 0xFF52AD://9
if((tu==1)&&(JL<301)){
JL=JL+9;
results.value=0xFFFFFFF;
}else if((tu==2)&&(zh==0)&&(JL<301)){
JL2=JL2+9;
results.value=0xFFFFFFF;
}else if((tu==2)&&(zh==1)&&(jiaodu2<61)){
jiaodu2=jiaodu2+9;
results.value=0xFFFFFFF;
}else results.value=0xFFFFFFF;
break;
}
//
if(tu==3){
myservo.write(0);
lcd.setCursor(0, 0);
lcd.print("Model: 3 ");
lcd.setCursor(0, 1);
/*
Serial.print(" JL3: ");
Serial.print(JL3);
Serial.println("us");
*/
//掃描
JL3= pulseIn(pin, HIGH);
while((JL3>30001)||(JL3<19999)){
if((zh==0)&&(jiaodu3<121)){
jiaodu3++;
myservo2.write(jiaodu3);
if(jiaodu3==120)zh=1;
delay(30);
}else if((zh==1)&&(jiaodu3>58)){
jiaodu3--;
myservo2.write(jiaodu3);
if(jiaodu3==60)zh=0;
delay(30);
}
JL3= pulseIn(pin, HIGH);
/* Serial.print(" JL3: ");
Serial.print(JL3);
Serial.println("cm");
*/
JL4=JL3/100;jiaodu4=(JL4/10)-5;
jiaodu5=jiaodu3-60;
if((JL3>0)&&(JL3<40000)){
lcd.print("JL:");
lcd.setCursor(3, 1);
lcd.print(JL4);
lcd.setCursor(7, 1);
lcd.print("cm");
lcd.setCursor(9, 1);
lcd.print("JD:");
lcd.setCursor(12, 1);
lcd.print(jiaodu5);
lcd.print(".c");
}
}
for(jishi=0;jishi<5;jishi++){
delay(300);
}if(jishi==5){
jiaodu4=(JL4/10)-5;
Serial.print(" jiaodu4: ");
Serial.print(jiaodu4);
myservo.write(jiaodu4);
delay(50);
digitalWrite(relayPin,HIGH);
delay(500);
digitalWrite(relayPin,LOW);
tu=0;jiaodu4=0;JL3=0;JL4=0;
myservo.write(0);myservo2.write(90);
}
}
}
}
|