附录(都没包含库文件,因为我的程序都不怎么完美,大家看下参考下就好,接线我会把我自己焊接时的草图贴出,由于程序达不到教程的标准就不出详细介绍了,以后改进后再出,坛里有编程好的也可以帮忙优化下)
(如果需要库文件的留言很多的话我也是可以贴出来的)
附录1(此部分程序只有easy transfer的部分是我改的,其他的都是厂家的源码)
由于代码太长了我直接打包上传了
Nano_AHRS3TX.zip
9.98KB
ZIP
65次下载
附录2
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP085.h>
#include "SD.h"
#include <EasyTransfer.h>
#include <IRremote.h>
EasyTransfer ET;
IRsend irsend;
int RECV_PIN = 7;
IRrecv irrecv(RECV_PIN);
decode_results results;
long back=0;
unsigned long time;
int launch=8;
struct RECEIVE_DATA_STRUCTURE{
//put your variable definitions here for the data you want to receive
//THIS MUST BE EXACTLY THE SAME ON THE OTHER ARDUINO
float yawDEG;
float pitchDEG;
float rollDEG;
};
RECEIVE_DATA_STRUCTURE mydata;
Adafruit_BMP085 bmp = Adafruit_BMP085(10085);
float seaLevelPressure = 1009;
float temperature;
const int chipSelect = 4;
void setup(void)
{
pinMode(launch,OUTPUT);
pinMode(3, OUTPUT);
Serial.begin(57600); SD.begin(chipSelect); ET.begin(details(mydata), &Serial); bmp.begin(); irrecv.enableIRIn(); // 初始化红外接收器
File dataFile = SD.open("data.txt",FILE_WRITE);
if (dataFile){
dataFile.print("[s:9]ressure(hpa): "); dataFile.print("\\t"); dataFile.print("Temperature(C): "); dataFile.print("\\t"); dataFile.print("Altitude(m): "); dataFile.print("\\t"); dataFile.print("YPR: "); dataFile.print("\\t"); dataFile.println("time(ms)"); dataFile.close(); }
}
void loop(void) {
time = millis();
ET.receiveData(); sensors_event_t event;
bmp.getEvent(&event); bmp.getTemperature(&temperature); File dataFile = SD.open("data.txt",FILE_WRITE);
if (dataFile){
dataFile.print(event.pressure); dataFile.print("\\t"); dataFile.print(temperature); dataFile.print("\\t"); dataFile.print(bmp.pressureToAltitude(seaLevelPressure, event.pressure,temperature)); dataFile.print("\\t"); dataFile.print(mydata.yawDEG); dataFile.print("\\t"); dataFile.print(mydata.pitchDEG); dataFile.print("\\t"); dataFile.print(mydata.rollDEG); dataFile.println(time); dataFile.close(); delay(1);
}
if (irrecv.decode(&results)){ back=results.value; if (back==2155813097){
if (dataFile)
{
dataFile.println("launched"); dataFile.close(); }
delay(2000);
irsend.sendSony(0xa90, 12); irsend.sendSony(0xa90, 12); irsend.sendSony(0xa90, 12); irsend.sendSony(0xa90, 12); irsend.sendSony(0xa90, 12); irsend.sendSony(0xa90, 12); delay(10010);
digitalWrite(launch,HIGH);
delay(2000);
digitalWrite(launch,LOW);
irrecv.resume(); }
else
{
irrecv.resume(); }
}
}
附录3
#include <IRremote.h>
IRsend irsend; int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
int val=0;
int back=0;
int pan=0;
void result()
{
if (irrecv.decode(&results)){ back=results.value; irrecv.resume(); if (back==21677){
Serial.println(F("launch_in_10seconds")); }
else{
Serial.println(F("Error")); }
}
}
void setup()
{
Serial.begin(9600); Serial.println(F("Enter_launch_password")); irrecv.enableIRIn(); // 初始化红外接收器
pinMode(3, OUTPUT);
}
void loop(){
result();
if (Serial.available() > 0) {
val=Serial.read(); if (val==49){
irsend.sendNEC(0x807F18E9, 32); irsend.sendNEC(0x807F18E9, 32); irsend.sendNEC(0x807F18E9, 32); irsend.sendNEC(0x807F18E9, 32); irsend.sendNEC(0x807F18E9, 32); irrecv.enableIRIn();
}
}
}