OA added
This commit is contained in:
		
							parent
							
								
									05ce129d19
								
							
						
					
					
						commit
						5687eb932e
					
				| 
						 | 
				
			
			@ -0,0 +1,75 @@
 | 
			
		|||
//player1,remote controler
 | 
			
		||||
#include<SPI.h>
 | 
			
		||||
#include<SoftwareSerial.h>
 | 
			
		||||
//RF24 radio(7,8);//端口可能要改
 | 
			
		||||
bool flag=false;
 | 
			
		||||
SoftwareSerial sendingSerial(5,6);
 | 
			
		||||
SoftwareSerial bluetoothSerial(7,8);
 | 
			
		||||
String sending="",received="";
 | 
			
		||||
const int Rp=3,Rr=2,interval=100;//Rp,Rr 分别为两个遥杆的接口
 | 
			
		||||
long propeller=0,rudder=0,dist;//propeller为螺旋桨(0-1023,512为静止),rudder为舵(0-1023,512为静止)
 | 
			
		||||
long sending_signal=0;//发送的信号
 | 
			
		||||
long response=0;
 | 
			
		||||
//const byte addresser[6]={"00001"};//创建通信通道地址,6用来写,8用来读
 | 
			
		||||
long time=0;
 | 
			
		||||
void setup() {
 | 
			
		||||
 | 
			
		||||
  Serial.begin(9600);
 | 
			
		||||
  sendingSerial.begin(38400);
 | 
			
		||||
  bluetoothSerial.begin(57600);
 | 
			
		||||
  bluetoothSerial.listen();
 | 
			
		||||
}
 | 
			
		||||
void send(){
 | 
			
		||||
 | 
			
		||||
  // Serial.println(propeller);
 | 
			
		||||
  // Serial.println(rudder);
 | 
			
		||||
  // Serial.print("propeller sent ");
 | 
			
		||||
  // Serial.println(propeller);
 | 
			
		||||
  // Serial.print("rudder sent ");
 | 
			
		||||
  // Serial.println(rudder);
 | 
			
		||||
  // Serial.println(sending_signal);
 | 
			
		||||
 
 | 
			
		||||
  //Serial.println(millis()-time);
 | 
			
		||||
}
 | 
			
		||||
void loop() {
 | 
			
		||||
  // put your main code here, to run repeatedly:
 | 
			
		||||
  //time=millis();
 | 
			
		||||
  //Serial.println("send");
 | 
			
		||||
  sending_signal=0;
 | 
			
		||||
  propeller=analogRead(Rp);
 | 
			
		||||
  rudder=analogRead(Rr);
 | 
			
		||||
  propeller=propeller*1.18;
 | 
			
		||||
  rudder=rudder*1.18;
 | 
			
		||||
  if(propeller>=1000)propeller=999;
 | 
			
		||||
  if(rudder>=1000)rudder=999;
 | 
			
		||||
  rudder=999-rudder;
 | 
			
		||||
  sending_signal+=propeller;
 | 
			
		||||
  sending_signal+=rudder*1000;
 | 
			
		||||
  if(digitalRead(4)==HIGH){
 | 
			
		||||
    sending_signal+=2000000;
 | 
			
		||||
    digitalWrite(15,HIGH);
 | 
			
		||||
  }
 | 
			
		||||
  else{
 | 
			
		||||
    sending_signal+=1000000;
 | 
			
		||||
    digitalWrite(15,LOW);
 | 
			
		||||
  }
 | 
			
		||||
  sending=String(sending_signal);
 | 
			
		||||
  bluetoothSerial.println(sending);
 | 
			
		||||
  Serial.println(sending);
 | 
			
		||||
  delay(interval);
 | 
			
		||||
  while(bluetoothSerial.available()>0){
 | 
			
		||||
    //Serial.println("available!");
 | 
			
		||||
    if(bluetoothSerial.peek()!='\n'){//peek()查看当前字节是不是换行
 | 
			
		||||
      received+=(char)bluetoothSerial.read();
 | 
			
		||||
      //Serial.println(received);
 | 
			
		||||
      //Serial.println("no \n");
 | 
			
		||||
    }
 | 
			
		||||
    else{
 | 
			
		||||
      bluetoothSerial.read();//把换行符读掉
 | 
			
		||||
      //Serial.println(received);
 | 
			
		||||
      sendingSerial.print(received);
 | 
			
		||||
      sendingSerial.print('\n');
 | 
			
		||||
      received="";
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,315 @@
 | 
			
		|||
#include<SPI.h>
 | 
			
		||||
#include "Arduino.h"
 | 
			
		||||
#include "HardwareSerial.h"
 | 
			
		||||
#include<SoftwareSerial.h>
 | 
			
		||||
#include<Servo.h>
 | 
			
		||||
#define  trigPin   2          //超声波模块的Trig口 6#
 | 
			
		||||
#define  echoPin   5          //超声波模块的echo口 5#
 | 
			
		||||
#define  ServoPin  3          //底座舵机端口 3#
 | 
			
		||||
#define  propellerFix 75
 | 
			
		||||
unsigned long time=0;
 | 
			
		||||
bool increasing=true;
 | 
			
		||||
bool clr=false;
 | 
			
		||||
//0: increase 1: decrease 2: clr
 | 
			
		||||
int status=0;
 | 
			
		||||
int clrtime=40;
 | 
			
		||||
int x=0;
 | 
			
		||||
int distRec[90];
 | 
			
		||||
int leftAlert=0;
 | 
			
		||||
int frontAlert=0;
 | 
			
		||||
int rightAlert=0;
 | 
			
		||||
int rudderModify=0;
 | 
			
		||||
const int autoTurn1=200;
 | 
			
		||||
const int autoTurn2=400;
 | 
			
		||||
const int alert=1000;
 | 
			
		||||
const int interval=100;
 | 
			
		||||
String sending="",received="";
 | 
			
		||||
Servo MyServo;
 | 
			
		||||
Servo RadarServo;
 | 
			
		||||
SoftwareSerial bluetoothSerial(7,8);
 | 
			
		||||
int count =0; 
 | 
			
		||||
int IN1 =9;
 | 
			
		||||
int IN2 =10;
 | 
			
		||||
int PWM=6;
 | 
			
		||||
int angle=90;
 | 
			
		||||
int period=25;
 | 
			
		||||
// float dist;
 | 
			
		||||
long dj,z;//dj是舵机,z是螺旋桨转速
 | 
			
		||||
//long propeller=0,rudder=0;//propeller为螺旋桨(0-1023,512为静止),rudder为舵(0-1023,512为静止)
 | 
			
		||||
//long s_propeller=0,s_rudder=0;//发送的信号
 | 
			
		||||
long propeller,rudder;//校验序列、读取内容和解码内容 
 | 
			
		||||
long response=0;
 | 
			
		||||
const byte addresses[6] = "00001";  //创建一个数组,建立接收机地址,或者说两个模块将用于通信的“管道”
 | 
			
		||||
int calculateDistance()
 | 
			
		||||
{ 
 | 
			
		||||
  long duration;
 | 
			
		||||
  digitalWrite(trigPin, LOW); 
 | 
			
		||||
  delayMicroseconds(2);
 | 
			
		||||
  digitalWrite(trigPin, HIGH); 
 | 
			
		||||
  delayMicroseconds(10);
 | 
			
		||||
  digitalWrite(trigPin, LOW);
 | 
			
		||||
  duration = pulseIn(echoPin, HIGH);
 | 
			
		||||
  return duration*0.034/2;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void setup()
 | 
			
		||||
{
 | 
			
		||||
  Serial.begin(9600);
 | 
			
		||||
  bluetoothSerial.begin(57600);
 | 
			
		||||
  bluetoothSerial.listen();
 | 
			
		||||
  MyServo.attach(4);
 | 
			
		||||
  RadarServo.attach(ServoPin);
 | 
			
		||||
  pinMode(trigPin,OUTPUT);
 | 
			
		||||
  pinMode(echoPin,INPUT);
 | 
			
		||||
  pinMode(IN1,OUTPUT);
 | 
			
		||||
  pinMode(IN2,OUTPUT);
 | 
			
		||||
  pinMode(PWM,OUTPUT);
 | 
			
		||||
  pinMode(A1,INPUT);
 | 
			
		||||
  pinMode(A2,INPUT);
 | 
			
		||||
  MyServo.write(45);
 | 
			
		||||
  RadarServo.write(0);
 | 
			
		||||
  delay(1000);  
 | 
			
		||||
}
 | 
			
		||||
long confirm(long x){
 | 
			
		||||
  if(x>=1000000&&x<=2000000)return x%1000000;
 | 
			
		||||
  else return -1;
 | 
			
		||||
}
 | 
			
		||||
void loop() {
 | 
			
		||||
  int distance=0;
 | 
			
		||||
 // Serial.print("s: ");
 | 
			
		||||
 // Serial.println(status); 
 | 
			
		||||
  if(status==0){
 | 
			
		||||
    if(x<180){
 | 
			
		||||
      x+=2;
 | 
			
		||||
    }
 | 
			
		||||
    else{
 | 
			
		||||
      status=2;
 | 
			
		||||
    }
 | 
			
		||||
    RadarServo.write(x);             //调整舵机角度
 | 
			
		||||
    //测距
 | 
			
		||||
    distance = calculateDistance();
 | 
			
		||||
    if(x!=180&&x%2==0)
 | 
			
		||||
      distRec[x/2]=distance;
 | 
			
		||||
    //send distance
 | 
			
		||||
    //response=1000000+x*1000+distance;
 | 
			
		||||
    response=0;
 | 
			
		||||
    response+=distance;
 | 
			
		||||
    //Serial.println(response);
 | 
			
		||||
    response+=(long)x*1000;
 | 
			
		||||
    //Serial.println(response);
 | 
			
		||||
    response+=1000000;
 | 
			
		||||
    //Serial.println(response);
 | 
			
		||||
  }
 | 
			
		||||
  else if(status==1){
 | 
			
		||||
    if(x>0){
 | 
			
		||||
      x-=2;
 | 
			
		||||
    }
 | 
			
		||||
    else{
 | 
			
		||||
      status=2;
 | 
			
		||||
    }
 | 
			
		||||
    RadarServo.write(x);             //调整舵机角度
 | 
			
		||||
    //测距
 | 
			
		||||
    distance = calculateDistance();
 | 
			
		||||
    if(x!=180&&x%2==0)
 | 
			
		||||
      distRec[x/2]=distance;
 | 
			
		||||
    //response=1000000+x*1000+distance;
 | 
			
		||||
    response=0;
 | 
			
		||||
    response+=distance;
 | 
			
		||||
    //Serial.println(response);
 | 
			
		||||
    response+=(long)x*1000;
 | 
			
		||||
    //Serial.println(response);
 | 
			
		||||
    response+=1000000;
 | 
			
		||||
    //Serial.println(response);
 | 
			
		||||
    //send distance
 | 
			
		||||
  }
 | 
			
		||||
  else if(status=2){
 | 
			
		||||
    clrtime--;
 | 
			
		||||
    if(clrtime<=0){
 | 
			
		||||
      clrtime=4;
 | 
			
		||||
      if(x>=180){
 | 
			
		||||
        status=1;
 | 
			
		||||
      }
 | 
			
		||||
      else{
 | 
			
		||||
        status=0;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    //send clear
 | 
			
		||||
    response=2000000;
 | 
			
		||||
  }
 | 
			
		||||
  sending=String(response);
 | 
			
		||||
 | 
			
		||||
  // Serial.print("x: ");
 | 
			
		||||
  // Serial.println(x);
 | 
			
		||||
  // Serial.print("d: ");
 | 
			
		||||
  // Serial.println(distance);
 | 
			
		||||
  // Serial.println(response);  
 | 
			
		||||
  Serial.println(sending);
 | 
			
		||||
  bluetoothSerial.println(sending);
 | 
			
		||||
  delay(interval);
 | 
			
		||||
  //delay(20-distance/17);
 | 
			
		||||
  Serial.println(distance);
 | 
			
		||||
  while(bluetoothSerial.available()>0){
 | 
			
		||||
    //Serial.println("available!");
 | 
			
		||||
    if(bluetoothSerial.peek()!='\n'){//peek()查看当前字节是不是换行
 | 
			
		||||
      received+=(char)bluetoothSerial.read();
 | 
			
		||||
      //Serial.println(received);
 | 
			
		||||
      //Serial.println("no \n");
 | 
			
		||||
    }
 | 
			
		||||
    else{
 | 
			
		||||
      bluetoothSerial.read();//把换行符读掉
 | 
			
		||||
      Serial.println(received);
 | 
			
		||||
      //Serial.println(received.length());
 | 
			
		||||
      //content=toInt(received);
 | 
			
		||||
      if(received[0]=='1'&&received.length()-1==7){
 | 
			
		||||
        propeller=received.substring(4).toInt();
 | 
			
		||||
        rudder=received.substring(1,4).toInt();
 | 
			
		||||
        if(propeller>600||propeller<400){
 | 
			
		||||
          if(propeller>600){ 
 | 
			
		||||
            long zheng=0.568*propeller-312.4;
 | 
			
		||||
            digitalWrite(IN2,HIGH);
 | 
			
		||||
            digitalWrite(IN1,LOW);
 | 
			
		||||
            analogWrite(PWM,zheng);
 | 
			
		||||
            z=zheng;
 | 
			
		||||
            Serial.println("forward propelling");
 | 
			
		||||
            Serial.println(z);
 | 
			
		||||
          }
 | 
			
		||||
          else if(propeller<400){
 | 
			
		||||
            long fan=255-0.568*propeller;
 | 
			
		||||
            digitalWrite(IN1,HIGH);
 | 
			
		||||
            digitalWrite(IN2,LOW);
 | 
			
		||||
            analogWrite(PWM,fan);
 | 
			
		||||
            z=fan;
 | 
			
		||||
            Serial.println("back propelling");
 | 
			
		||||
            Serial.println(z);
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        else if(propeller<=600||propeller>=400){
 | 
			
		||||
          z=0;
 | 
			
		||||
          analogWrite(PWM,0);
 | 
			
		||||
          Serial.println("stop propelling");
 | 
			
		||||
          Serial.println(z);
 | 
			
		||||
        } 
 | 
			
		||||
        //Serial.println("inputing ruddering");
 | 
			
		||||
        if(rudder>600||rudder<400)
 | 
			
		||||
        {
 | 
			
		||||
          if(rudder<400){
 | 
			
		||||
            long fan1=0.1*rudder;
 | 
			
		||||
            MyServo.write(fan1);
 | 
			
		||||
            //Serial.println("turn left");
 | 
			
		||||
            dj=2*fan1-90;
 | 
			
		||||
            //Serial.println(dj);
 | 
			
		||||
          }
 | 
			
		||||
          else if(rudder>600){
 | 
			
		||||
            long zheng1=0.1*rudder-10.122;
 | 
			
		||||
            MyServo.write(zheng1);
 | 
			
		||||
            dj=2*zheng1-90;
 | 
			
		||||
            //Serial.println("turn right");
 | 
			
		||||
            //Serial.println(dj);
 | 
			
		||||
          }
 | 
			
		||||
        } 
 | 
			
		||||
        else if(rudder<=600||rudder>=400){
 | 
			
		||||
          dj=0;
 | 
			
		||||
          MyServo.write(45);
 | 
			
		||||
          //Serial.println("stop turing");
 | 
			
		||||
          //Serial.println(dj);                     
 | 
			
		||||
        }  
 | 
			
		||||
      }
 | 
			
		||||
      else if(received[0]=='2'&&received.length()-1==7){
 | 
			
		||||
        propeller=received.substring(4).toInt();
 | 
			
		||||
        rudder=received.substring(1,4).toInt();
 | 
			
		||||
        for(int i=0;i<30;i++){
 | 
			
		||||
          leftAlert+=distRec[i];
 | 
			
		||||
          frontAlert+=distRec[i+30];
 | 
			
		||||
          rightAlert+=distRec[i+60];
 | 
			
		||||
        }
 | 
			
		||||
        if(propeller>600||propeller<400){
 | 
			
		||||
          if(propeller>600){ 
 | 
			
		||||
            digitalWrite(IN2,HIGH);
 | 
			
		||||
            digitalWrite(IN1,LOW);
 | 
			
		||||
            analogWrite(PWM,propellerFix);
 | 
			
		||||
            Serial.println("forward propelling");
 | 
			
		||||
          }
 | 
			
		||||
          else if(propeller<400){
 | 
			
		||||
            digitalWrite(IN1,HIGH);
 | 
			
		||||
            digitalWrite(IN2,LOW);
 | 
			
		||||
            analogWrite(PWM,propellerFix);
 | 
			
		||||
            Serial.println("back propelling");
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        else if(propeller<=600||propeller>=400){
 | 
			
		||||
          z=0;
 | 
			
		||||
          analogWrite(PWM,0);
 | 
			
		||||
          Serial.println("stop propelling");
 | 
			
		||||
          Serial.println(z);
 | 
			
		||||
        } 
 | 
			
		||||
        //Serial.println("inputing ruddering");
 | 
			
		||||
        if(leftAlert<alert&&frontAlert<alert&&rightAlert<alert){
 | 
			
		||||
          analogWrite(PWM,0);
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        else if(leftAlert<alert&&frontAlert<alert&&rightAlert>=alert){
 | 
			
		||||
          rudder-=autoTurn2;
 | 
			
		||||
          if(rudder<0){
 | 
			
		||||
            rudder=0;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        else if(leftAlert<alert&&frontAlert>=alert&&rightAlert<alert){
 | 
			
		||||
          
 | 
			
		||||
        }
 | 
			
		||||
        else if(leftAlert<alert&&frontAlert>=alert&&rightAlert>=alert){
 | 
			
		||||
          rudder-=autoTurn1;
 | 
			
		||||
          if(rudder<0){
 | 
			
		||||
            rudder=0;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        else if(leftAlert>=alert&&frontAlert<alert&&rightAlert<alert){
 | 
			
		||||
          rudder+=autoTurn2;
 | 
			
		||||
          if(rudder>999){
 | 
			
		||||
            rudder=999;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        else if(leftAlert>=alert&&frontAlert<alert&&rightAlert>=alert){
 | 
			
		||||
          rudder-=autoTurn2;
 | 
			
		||||
          if(rudder<0){
 | 
			
		||||
            rudder=0;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        else if(leftAlert>=alert&&frontAlert>=alert&&rightAlert<alert){
 | 
			
		||||
          rudder+=autoTurn1;
 | 
			
		||||
          if(rudder>999){
 | 
			
		||||
            rudder=999;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        else if(leftAlert>=alert&&frontAlert>=alert&&rightAlert>=alert){
 | 
			
		||||
          
 | 
			
		||||
        }        
 | 
			
		||||
        
 | 
			
		||||
        if(rudder>600||rudder<400)
 | 
			
		||||
        {
 | 
			
		||||
          if(rudder<400){
 | 
			
		||||
            long fan1=0.1*rudder;
 | 
			
		||||
            MyServo.write(fan1);
 | 
			
		||||
            //Serial.println("turn left");
 | 
			
		||||
            dj=2*fan1-90;
 | 
			
		||||
            //Serial.println(dj);
 | 
			
		||||
          }
 | 
			
		||||
          else if(rudder>600){
 | 
			
		||||
            long zheng1=0.1*rudder-10.122;
 | 
			
		||||
            MyServo.write(zheng1);
 | 
			
		||||
            dj=2*zheng1-90;
 | 
			
		||||
            //Serial.println("turn right");
 | 
			
		||||
            //Serial.println(dj);
 | 
			
		||||
          }
 | 
			
		||||
        } 
 | 
			
		||||
        else if(rudder<=600||rudder>=400){
 | 
			
		||||
          dj=0;
 | 
			
		||||
          MyServo.write(45);
 | 
			
		||||
          //Serial.println("stop turing");
 | 
			
		||||
          //Serial.println(dj);                     
 | 
			
		||||
        }  
 | 
			
		||||
      }
 | 
			
		||||
      received="";                                                             
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
  
 | 
			
		||||
		Loading…
	
		Reference in New Issue