pls help my rocketry!

bang

Member
Hi everybody! I'm trying to make a vertical landing rocket but I'm having a problem. I have an ms5611 code designed from Arduino. I open the impulse valve with ms5611 data, but since I made the project in Teensy, the Arduino code does not work. The relay does not turn on with the teensy code with the ms5611 sensor. I have a code where the relay stays on all the time. How to fix this error? here is my teensy code and ı will add arduino code:
arduıno code:
#include <Wire.h>
#include <MS5611.h>

// MS5611 barometre nesnesi
MS5611 baro;
int32_t basinc;
float yukseklik;

// Rölenin bağlı olduğu pin numarasını belirtin
int relayPin = 8; // Örneğin, röleyi dijital pin 8'e bağladığınızı varsayalım

void setup() {
Serial.begin(9600);
while (!Serial); // Seri bağlantının başlamasını bekle
Serial.println("MS5611 Sensör Verisi");

// I2C bus'ı başlat
Wire.begin();

// MS5611 barometreyi başlat
baro = MS5611();
if (baro.begin()) {
Serial.println("MS5611 başlatıldı.");
} else {
Serial.println("MS5611 başlatılamadı!");
}

// Röle pinini çıkış olarak ayarlayın
pinMode(relayPin, OUTPUT);
}

void loop() {
// MS5611 barometreden basınç ve yükseklik verilerini al
basinc = baro.readPressure(); // Basıncı oku
yukseklik = (1.0 - pow((float)basinc / 101325.0, 0.190284)) * 44330.77; // Yüksekliği hesapla

// Seri monitöre basınç ve yükseklik verilerini yazdır
Serial.print("Pressure: ");
Serial.print(basinc);
Serial.print(" Pa, Yükseklik: ");
Serial.print(yukseklik);
Serial.println(" metre");

// Yükseklik 290 ile 295 metre arasında ise röleyi aç (LOW), değilse kapat (HIGH)
if (yukseklik >= 290 && yukseklik <= 295) {
digitalWrite(relayPin, LOW); // Röleyi aç
} else {
digitalWrite(relayPin, HIGH); // Röleyi kapat
}

delay(750); // Bir sonraki okuma öncesi 750 milisaniye bekle
}
TEENSY 4.1 CODE:
#include <Wire.h>

#include <MS5611.h>

#include <SD.h>



// Röle pinlerini tanımla

int rolePin1 = 6; // X ekseni için röle 1

int rolePin2 = 7; // X ekseni için röle 2

int rolePin3 = 8; // Y ekseni için röle 3

int rolePin4 = 9; // Y ekseni için röle 4

int rolePinBaro = 11; // Barometre için röle (11 numaralı pin kullanılıyor)



// LED ve Buzzer pinlerini tanımla

int ledPin = 13; // LED için pin

int buzzerPin = 10; // Buzzer için pin



// MPU6050 I2C adresi

const int MPU6050_ADDR = 0x68;



// MPU6050 register adresleri

const int ACCEL_XOUT_H = 0x3B;

const int PWR_MGMT_1 = 0x6B;



// MS5611 barometre nesnesi

MS5611 baro;

int32_t basinc;

float yukseklik;



// SD kart için dosya nesnesi

File dataFile;



void setup() {

// Seri iletişimi başlat

Serial.begin(9600);

while (!Serial); // Seri bağlantının başlamasını bekle

Serial.println("MPU6050 ve MS5611 Sensör Verisi");



// Röle pinlerini çıkış olarak ayarla ve başlangıçta açık duruma getir

pinMode(rolePin1, OUTPUT);

digitalWrite(rolePin1, HIGH); // Röle 1 açık

pinMode(rolePin2, OUTPUT);

digitalWrite(rolePin2, HIGH); // Röle 2 açık

pinMode(rolePin3, OUTPUT);

digitalWrite(rolePin3, HIGH); // Röle 3 açık

pinMode(rolePin4, OUTPUT);

digitalWrite(rolePin4, HIGH); // Röle 4 açık

pinMode(rolePinBaro, OUTPUT);

digitalWrite(rolePinBaro, HIGH); // Barometre rölesi açık



// LED ve Buzzer pinlerini çıkış olarak ayarla

pinMode(ledPin, OUTPUT);

pinMode(buzzerPin, OUTPUT);



// LED'i aç ve buzzer'ı 1 saniye çalıştır

digitalWrite(ledPin, HIGH); // LED'i yak

digitalWrite(buzzerPin, HIGH); // Buzzer'ı çalıştır

delay(1000); // 1 saniye bekle

digitalWrite(buzzerPin, LOW); // Buzzer'ı kapat



// I2C bus'ı başlat (Wire1, Pin 16 ve Pin 17)

Wire1.begin();



// MPU6050'yi uyandır (PWR_MGMT_1 register'ını sıfırla)

Wire1.beginTransmission(MPU6050_ADDR);

Wire1.write(PWR_MGMT_1);

Wire1.write(0); // 0 yazmak, uyku modundan çıkarır

Wire1.endTransmission(true);



// MS5611 barometreyi başlat

Wire.begin();

baro = MS5611();

if (baro.begin()) {

Serial.println("MS5611 başlatıldı.");

} else {

Serial.println("MS5611 başlatılamadı!");

}



// SD kartı başlat

if (!SD.begin(BUILTIN_SDCARD)) {

Serial.println("SD kart başlatılamadı!");

return;

} else {

Serial.println("SD kart başlatıldı.");

}



// Verileri kaydetmek için dosyayı aç

dataFile = SD.open("sensor_data.txt", FILE_WRITE);

if (!dataFile) {

Serial.println("Dosya açılamadı!");

} else {

Serial.println("Veri kaydı başlatıldı.");

}

}



void loop() {

int16_t accx, accy, accz;



// MPU6050'den ivme verilerini al

Wire1.beginTransmission(MPU6050_ADDR);

Wire1.write(ACCEL_XOUT_H); // İlk veri register'ını belirt

Wire1.endTransmission(false);

Wire1.requestFrom(MPU6050_ADDR, 6, true); // 6 byte veri iste



// Verileri oku

accx = Wire1.read() << 8 | Wire1.read();

accy = Wire1.read() << 8 | Wire1.read();

accz = Wire1.read() << 8 | Wire1.read();



// X ekseni verilerini eşle

int degerx = map(accx, -17000, 17000, 0, 180);

// Y ekseni verilerini eşle

int degery = map(accy, -17000, 17000, 0, 180);



// Seri monitöre ivme verilerini yazdır

Serial.print("X: ");

Serial.print(degerx);

Serial.print(" Y: ");

Serial.println(degery);



// X ekseni için röle kontrolü

if (degerx < 75) {

digitalWrite(rolePin1, LOW); // X ekseni 75'ten küçükse röle 1 kapalı

digitalWrite(rolePin2, HIGH); // Röle 2 açık

} else if (degerx > 105) {

digitalWrite(rolePin1, HIGH); // Röle 1 açık

digitalWrite(rolePin2, LOW); // X ekseni 105'ten büyükse röle 2 kapalı

} else {

digitalWrite(rolePin1, HIGH); // Diğer durumlarda röle 1 açık

digitalWrite(rolePin2, HIGH); // Diğer durumlarda röle 2 açık

}



// Y ekseni için röle kontrolü

if (degery < 70) {

digitalWrite(rolePin3, LOW); // Y ekseni 70'ten küçükse röle 3 kapalı

digitalWrite(rolePin4, HIGH); // Röle 4 açık

} else if (degery > 96) {

digitalWrite(rolePin3, HIGH); // Röle 3 açık

digitalWrite(rolePin4, LOW); // Y ekseni 96'dan büyükse röle 4 kapalı

} else {

digitalWrite(rolePin3, HIGH); // Diğer durumlarda röle 3 açık

digitalWrite(rolePin4, HIGH); // Diğer durumlarda röle 4 açık

}



// MS5611 barometreden basınç ve yükseklik verilerini al

baro.read(); // Sensörden veri al

basinc = baro.getPressure(); // Basıncı oku

yukseklik = (1.0 - pow((float)basinc / 101325, 0.190284)) * 44330.77; // Yüksekliği hesapla



// Seri monitöre basınç ve yükseklik verilerini yazdır

Serial.print("Pressure: ");

Serial.print(basinc);

Serial.print(" Pa, Yükseklik: ");

Serial.print(yukseklik);

Serial.println(" metre");



// Barometre için röle kontrolü

if (yukseklik >= 290.0 && yukseklik <= 295.0) {

digitalWrite(rolePinBaro, LOW); // Röleyi aç

Serial.println("Röle Açıldı (290 - 295 m)");

} else {

digitalWrite(rolePinBaro, HIGH); // Röleyi kapat

Serial.println("Röle Kapalı (Dışında)");

}



// SD karta verileri yaz

if (dataFile) {

dataFile.print("X: ");

dataFile.print(degerx);

dataFile.print(" Y: ");

dataFile.print(degery);

dataFile.print(" Pressure: ");

dataFile.print(basinc);

dataFile.print(" Pa, Yükseklik: ");

dataFile.print(yukseklik);

dataFile.println(" metre");

dataFile.flush(); // Veriyi hemen SD karta yaz

} else {

Serial.println("Dosya yazılamadı!");

}



delay(1000); // Bir sonraki okuma öncesi bir saniye bekle

}
 
Have you tested only the relay with a simple program, like the LED blink example (File > Examples > 01.Basics > Blink) which simply turns the pin high and low?
 
Code:
#include <Wire.h>
#include <MS5611.h>

// MS5611 barometre nesnesi
MS5611 baro;
int32_t basinc;
float yukseklik;

// Rölenin bağlı olduğu pin numarasını belirtin
int relayPin = 8; // Örneğin, röleyi dijital pin 8'e bağladığınızı varsayalım

void setup() {
    Serial.begin(9600);
    while (!Serial); // Seri bağlantının başlamasını bekle
    Serial.println("MS5611 Sensör Verisi");

    // I2C bus'ı başlat
    Wire.begin();

    // MS5611 barometreyi başlat
    baro = MS5611();
    if (baro.begin()) {
        Serial.println("MS5611 başlatıldı.");
    }
    else {
        Serial.println("MS5611 başlatılamadı!");
    }

    // Röle pinini çıkış olarak ayarlayın
    pinMode(relayPin, OUTPUT);
}

void loop() {
    // MS5611 barometreden basınç ve yükseklik verilerini al
    basinc = baro.readPressure(); // Basıncı oku
    yukseklik = (1.0 - pow((float)basinc / 101325.0, 0.190284)) * 44330.77; // Yüksekliği hesapla

    // Seri monitöre basınç ve yükseklik verilerini yazdır
    Serial.print("Pressure: ");
    Serial.print(basinc);
    Serial.print(" Pa, Yükseklik: ");
    Serial.print(yukseklik);
    Serial.println(" metre");

    // Yükseklik 290 ile 295 metre arasında ise röleyi aç (LOW), değilse kapat (HIGH)
    if (yukseklik >= 290 && yukseklik <= 295) {
        digitalWrite(relayPin, LOW); // Röleyi aç
    }
    else {
        digitalWrite(relayPin, HIGH); // Röleyi kapat
    }

    delay(750); // Bir sonraki okuma öncesi 750 milisaniye bekle
}
TEENSY 4.1 CODE:
#include <Wire.h>

#include <MS5611.h>

#include <SD.h>



// Röle pinlerini tanımla

int rolePin1 = 6; // X ekseni için röle 1

int rolePin2 = 7; // X ekseni için röle 2

int rolePin3 = 8; // Y ekseni için röle 3

int rolePin4 = 9; // Y ekseni için röle 4

int rolePinBaro = 11; // Barometre için röle (11 numaralı pin kullanılıyor)



// LED ve Buzzer pinlerini tanımla

int ledPin = 13; // LED için pin

int buzzerPin = 10; // Buzzer için pin



// MPU6050 I2C adresi

const int MPU6050_ADDR = 0x68;



// MPU6050 register adresleri

const int ACCEL_XOUT_H = 0x3B;

const int PWR_MGMT_1 = 0x6B;



// MS5611 barometre nesnesi

MS5611 baro;

int32_t basinc;

float yukseklik;



// SD kart için dosya nesnesi

File dataFile;



void setup() {

    // Seri iletişimi başlat

    Serial.begin(9600);

    while (!Serial); // Seri bağlantının başlamasını bekle

    Serial.println("MPU6050 ve MS5611 Sensör Verisi");



    // Röle pinlerini çıkış olarak ayarla ve başlangıçta açık duruma getir

    pinMode(rolePin1, OUTPUT);

    digitalWrite(rolePin1, HIGH); // Röle 1 açık

    pinMode(rolePin2, OUTPUT);

    digitalWrite(rolePin2, HIGH); // Röle 2 açık

    pinMode(rolePin3, OUTPUT);

    digitalWrite(rolePin3, HIGH); // Röle 3 açık

    pinMode(rolePin4, OUTPUT);

    digitalWrite(rolePin4, HIGH); // Röle 4 açık

    pinMode(rolePinBaro, OUTPUT);

    digitalWrite(rolePinBaro, HIGH); // Barometre rölesi açık



    // LED ve Buzzer pinlerini çıkış olarak ayarla

    pinMode(ledPin, OUTPUT);

    pinMode(buzzerPin, OUTPUT);



    // LED'i aç ve buzzer'ı 1 saniye çalıştır

    digitalWrite(ledPin, HIGH); // LED'i yak

    digitalWrite(buzzerPin, HIGH); // Buzzer'ı çalıştır

    delay(1000); // 1 saniye bekle

    digitalWrite(buzzerPin, LOW); // Buzzer'ı kapat



    // I2C bus'ı başlat (Wire1, Pin 16 ve Pin 17)

    Wire1.begin();



    // MPU6050'yi uyandır (PWR_MGMT_1 register'ını sıfırla)

    Wire1.beginTransmission(MPU6050_ADDR);

    Wire1.write(PWR_MGMT_1);

    Wire1.write(0); // 0 yazmak, uyku modundan çıkarır

    Wire1.endTransmission(true);



    // MS5611 barometreyi başlat

    Wire.begin();

    baro = MS5611();

    if (baro.begin()) {

        Serial.println("MS5611 başlatıldı.");

    }
    else {

        Serial.println("MS5611 başlatılamadı!");

    }



    // SD kartı başlat

    if (!SD.begin(BUILTIN_SDCARD)) {

        Serial.println("SD kart başlatılamadı!");

        return;

    }
    else {

        Serial.println("SD kart başlatıldı.");

    }



    // Verileri kaydetmek için dosyayı aç

    dataFile = SD.open("sensor_data.txt", FILE_WRITE);

    if (!dataFile) {

        Serial.println("Dosya açılamadı!");

    }
    else {

        Serial.println("Veri kaydı başlatıldı.");

    }

}



void loop() {

    int16_t accx, accy, accz;



    // MPU6050'den ivme verilerini al

    Wire1.beginTransmission(MPU6050_ADDR);

    Wire1.write(ACCEL_XOUT_H); // İlk veri register'ını belirt

    Wire1.endTransmission(false);

    Wire1.requestFrom(MPU6050_ADDR, 6, true); // 6 byte veri iste



    // Verileri oku

    accx = Wire1.read() << 8 | Wire1.read();

    accy = Wire1.read() << 8 | Wire1.read();

    accz = Wire1.read() << 8 | Wire1.read();



    // X ekseni verilerini eşle

    int degerx = map(accx, -17000, 17000, 0, 180);

    // Y ekseni verilerini eşle

    int degery = map(accy, -17000, 17000, 0, 180);



    // Seri monitöre ivme verilerini yazdır

    Serial.print("X: ");

    Serial.print(degerx);

    Serial.print(" Y: ");

    Serial.println(degery);



    // X ekseni için röle kontrolü

    if (degerx < 75) {

        digitalWrite(rolePin1, LOW); // X ekseni 75'ten küçükse röle 1 kapalı

        digitalWrite(rolePin2, HIGH); // Röle 2 açık

    }
    else if (degerx > 105) {

        digitalWrite(rolePin1, HIGH); // Röle 1 açık

        digitalWrite(rolePin2, LOW); // X ekseni 105'ten büyükse röle 2 kapalı

    }
    else {

        digitalWrite(rolePin1, HIGH); // Diğer durumlarda röle 1 açık

        digitalWrite(rolePin2, HIGH); // Diğer durumlarda röle 2 açık

    }



    // Y ekseni için röle kontrolü

    if (degery < 70) {

        digitalWrite(rolePin3, LOW); // Y ekseni 70'ten küçükse röle 3 kapalı

        digitalWrite(rolePin4, HIGH); // Röle 4 açık

    }
    else if (degery > 96) {

        digitalWrite(rolePin3, HIGH); // Röle 3 açık

        digitalWrite(rolePin4, LOW); // Y ekseni 96'dan büyükse röle 4 kapalı

    }
    else {

        digitalWrite(rolePin3, HIGH); // Diğer durumlarda röle 3 açık

        digitalWrite(rolePin4, HIGH); // Diğer durumlarda röle 4 açık

    }



    // MS5611 barometreden basınç ve yükseklik verilerini al

    baro.read(); // Sensörden veri al

    basinc = baro.getPressure(); // Basıncı oku

    yukseklik = (1.0 - pow((float)basinc / 101325, 0.190284)) * 44330.77; // Yüksekliği hesapla



    // Seri monitöre basınç ve yükseklik verilerini yazdır

    Serial.print("Pressure: ");

    Serial.print(basinc);

    Serial.print(" Pa, Yükseklik: ");

    Serial.print(yukseklik);

    Serial.println(" metre");



    // Barometre için röle kontrolü

    if (yukseklik >= 290.0 && yukseklik <= 295.0) {

        digitalWrite(rolePinBaro, LOW); // Röleyi aç

        Serial.println("Röle Açıldı (290 - 295 m)");

    }
    else {

        digitalWrite(rolePinBaro, HIGH); // Röleyi kapat

        Serial.println("Röle Kapalı (Dışında)");

    }



    // SD karta verileri yaz

    if (dataFile) {

        dataFile.print("X: ");

        dataFile.print(degerx);

        dataFile.print(" Y: ");

        dataFile.print(degery);

        dataFile.print(" Pressure: ");

        dataFile.print(basinc);

        dataFile.print(" Pa, Yükseklik: ");

        dataFile.print(yukseklik);

        dataFile.println(" metre");

        dataFile.flush(); // Veriyi hemen SD karta yaz

    }
    else {

        Serial.println("Dosya yazılamadı!");

    }



    delay(1000); // Bir sonraki okuma öncesi bir saniye bekle

}
First of all when you paste your code can you paste it between CODE tags using the </> button. It makes your code so much more readable.

If you are trying to use your code NOT connected to a computer it will hang at this line while (!Serial); // Seri bağlantının başlamasını bekle. It will wait forever for the computer to be available. Better to have something like this while (!Serial && millis()<3000); With this line it will wait for a maximum of 3 seconds for the computer to be available before carrying on.
 
Hi everybody! I'm trying to make a vertical landing rocket but I'm having a problem. I have an ms5611 code designed from Arduino. I open the impulse valve with ms5611 data, but since I made the project in Teensy, the Arduino code does not work. The relay does not turn on with the teensy code with the ms5611 sensor. I have a code where the relay stays on all the time. How to fix this error? here is my teensy code and ı will add arduino code:
arduıno code:
#include <Wire.h>
#include <MS5611.h>

// MS5611 barometre nesnesi
MS5611 baro;
int32_t basinc;
float yukseklik;

// Rölenin bağlı olduğu pin numarasını belirtin
int relayPin = 8; // Örneğin, röleyi dijital pin 8'e bağladığınızı varsayalım

void setup() {
Serial.begin(9600);
while (!Serial); // Seri bağlantının başlamasını bekle
Serial.println("MS5611 Sensör Verisi");

// I2C bus'ı başlat
Wire.begin();

// MS5611 barometreyi başlat
baro = MS5611();
if (baro.begin()) {
Serial.println("MS5611 başlatıldı.");
} else {
Serial.println("MS5611 başlatılamadı!");
}

// Röle pinini çıkış olarak ayarlayın
pinMode(relayPin, OUTPUT);
}

void loop() {
// MS5611 barometreden basınç ve yükseklik verilerini al
basinc = baro.readPressure(); // Basıncı oku
yukseklik = (1.0 - pow((float)basinc / 101325.0, 0.190284)) * 44330.77; // Yüksekliği hesapla

// Seri monitöre basınç ve yükseklik verilerini yazdır
Serial.print("Pressure: ");
Serial.print(basinc);
Serial.print(" Pa, Yükseklik: ");
Serial.print(yukseklik);
Serial.println(" metre");

// Yükseklik 290 ile 295 metre arasında ise röleyi aç (LOW), değilse kapat (HIGH)
if (yukseklik >= 290 && yukseklik <= 295) {
digitalWrite(relayPin, LOW); // Röleyi aç
} else {
digitalWrite(relayPin, HIGH); // Röleyi kapat
}

delay(750); // Bir sonraki okuma öncesi 750 milisaniye bekle
}
TEENSY 4.1 CODE:
#include <Wire.h>

#include <MS5611.h>

#include <SD.h>



// Röle pinlerini tanımla

int rolePin1 = 6; // X ekseni için röle 1

int rolePin2 = 7; // X ekseni için röle 2

int rolePin3 = 8; // Y ekseni için röle 3

int rolePin4 = 9; // Y ekseni için röle 4

int rolePinBaro = 11; // Barometre için röle (11 numaralı pin kullanılıyor)



// LED ve Buzzer pinlerini tanımla

int ledPin = 13; // LED için pin

int buzzerPin = 10; // Buzzer için pin



// MPU6050 I2C adresi

const int MPU6050_ADDR = 0x68;



// MPU6050 register adresleri

const int ACCEL_XOUT_H = 0x3B;

const int PWR_MGMT_1 = 0x6B;



// MS5611 barometre nesnesi

MS5611 baro;

int32_t basinc;

float yukseklik;



// SD kart için dosya nesnesi

File dataFile;



void setup() {

// Seri iletişimi başlat

Serial.begin(9600);

while (!Serial); // Seri bağlantının başlamasını bekle

Serial.println("MPU6050 ve MS5611 Sensör Verisi");



// Röle pinlerini çıkış olarak ayarla ve başlangıçta açık duruma getir

pinMode(rolePin1, OUTPUT);

digitalWrite(rolePin1, HIGH); // Röle 1 açık

pinMode(rolePin2, OUTPUT);

digitalWrite(rolePin2, HIGH); // Röle 2 açık

pinMode(rolePin3, OUTPUT);

digitalWrite(rolePin3, HIGH); // Röle 3 açık

pinMode(rolePin4, OUTPUT);

digitalWrite(rolePin4, HIGH); // Röle 4 açık

pinMode(rolePinBaro, OUTPUT);

digitalWrite(rolePinBaro, HIGH); // Barometre rölesi açık



// LED ve Buzzer pinlerini çıkış olarak ayarla

pinMode(ledPin, OUTPUT);

pinMode(buzzerPin, OUTPUT);



// LED'i aç ve buzzer'ı 1 saniye çalıştır

digitalWrite(ledPin, HIGH); // LED'i yak

digitalWrite(buzzerPin, HIGH); // Buzzer'ı çalıştır

delay(1000); // 1 saniye bekle

digitalWrite(buzzerPin, LOW); // Buzzer'ı kapat



// I2C bus'ı başlat (Wire1, Pin 16 ve Pin 17)

Wire1.begin();



// MPU6050'yi uyandır (PWR_MGMT_1 register'ını sıfırla)

Wire1.beginTransmission(MPU6050_ADDR);

Wire1.write(PWR_MGMT_1);

Wire1.write(0); // 0 yazmak, uyku modundan çıkarır

Wire1.endTransmission(true);



// MS5611 barometreyi başlat

Wire.begin();

baro = MS5611();

if (baro.begin()) {

Serial.println("MS5611 başlatıldı.");

} else {

Serial.println("MS5611 başlatılamadı!");

}



// SD kartı başlat

if (!SD.begin(BUILTIN_SDCARD)) {

Serial.println("SD kart başlatılamadı!");

return;

} else {

Serial.println("SD kart başlatıldı.");

}



// Verileri kaydetmek için dosyayı aç

dataFile = SD.open("sensor_data.txt", FILE_WRITE);

if (!dataFile) {

Serial.println("Dosya açılamadı!");

} else {

Serial.println("Veri kaydı başlatıldı.");

}

}



void loop() {

int16_t accx, accy, accz;



// MPU6050'den ivme verilerini al

Wire1.beginTransmission(MPU6050_ADDR);

Wire1.write(ACCEL_XOUT_H); // İlk veri register'ını belirt

Wire1.endTransmission(false);

Wire1.requestFrom(MPU6050_ADDR, 6, true); // 6 byte veri iste



// Verileri oku

accx = Wire1.read() << 8 | Wire1.read();

accy = Wire1.read() << 8 | Wire1.read();

accz = Wire1.read() << 8 | Wire1.read();



// X ekseni verilerini eşle

int degerx = map(accx, -17000, 17000, 0, 180);

// Y ekseni verilerini eşle

int degery = map(accy, -17000, 17000, 0, 180);



// Seri monitöre ivme verilerini yazdır

Serial.print("X: ");

Serial.print(degerx);

Serial.print(" Y: ");

Serial.println(degery);



// X ekseni için röle kontrolü

if (degerx < 75) {

digitalWrite(rolePin1, LOW); // X ekseni 75'ten küçükse röle 1 kapalı

digitalWrite(rolePin2, HIGH); // Röle 2 açık

} else if (degerx > 105) {

digitalWrite(rolePin1, HIGH); // Röle 1 açık

digitalWrite(rolePin2, LOW); // X ekseni 105'ten büyükse röle 2 kapalı

} else {

digitalWrite(rolePin1, HIGH); // Diğer durumlarda röle 1 açık

digitalWrite(rolePin2, HIGH); // Diğer durumlarda röle 2 açık

}



// Y ekseni için röle kontrolü

if (degery < 70) {

digitalWrite(rolePin3, LOW); // Y ekseni 70'ten küçükse röle 3 kapalı

digitalWrite(rolePin4, HIGH); // Röle 4 açık

} else if (degery > 96) {

digitalWrite(rolePin3, HIGH); // Röle 3 açık

digitalWrite(rolePin4, LOW); // Y ekseni 96'dan büyükse röle 4 kapalı

} else {

digitalWrite(rolePin3, HIGH); // Diğer durumlarda röle 3 açık

digitalWrite(rolePin4, HIGH); // Diğer durumlarda röle 4 açık

}



// MS5611 barometreden basınç ve yükseklik verilerini al

baro.read(); // Sensörden veri al

basinc = baro.getPressure(); // Basıncı oku

yukseklik = (1.0 - pow((float)basinc / 101325, 0.190284)) * 44330.77; // Yüksekliği hesapla



// Seri monitöre basınç ve yükseklik verilerini yazdır

Serial.print("Pressure: ");

Serial.print(basinc);

Serial.print(" Pa, Yükseklik: ");

Serial.print(yukseklik);

Serial.println(" metre");



// Barometre için röle kontrolü

if (yukseklik >= 290.0 && yukseklik <= 295.0) {

digitalWrite(rolePinBaro, LOW); // Röleyi aç

Serial.println("Röle Açıldı (290 - 295 m)");

} else {

digitalWrite(rolePinBaro, HIGH); // Röleyi kapat

Serial.println("Röle Kapalı (Dışında)");

}



// SD karta verileri yaz

if (dataFile) {

dataFile.print("X: ");

dataFile.print(degerx);

dataFile.print(" Y: ");

dataFile.print(degery);

dataFile.print(" Pressure: ");

dataFile.print(basinc);

dataFile.print(" Pa, Yükseklik: ");

dataFile.print(yukseklik);

dataFile.println(" metre");

dataFile.flush(); // Veriyi hemen SD karta yaz

} else {

Serial.println("Dosya yazılamadı!");

}



delay(1000); // Bir sonraki okuma öncesi bir saniye bekle

}
Have you tried running it on an arduino?
 
Back
Top