Kodum bilgisayar olmadan çalışmıyor?

dsquad

Yeni Üye
Katılım
28 Ocak 2024
Mesajlar
1
Garip bir şekilde bilgisayardayken sistemi başlatınca bir problem olmuyor, hatta bilgisayardan çalıştırdıktan sonra usb bağlantısını çekince sistem çalışmaya devam ediyor.

Güç bağlantıları vb. yapıldı çalışıor.


Kod:
#include <SoftwareSerial.h>
#define rxPin 3
#define txPin 2
SoftwareSerial sim800L(rxPin, txPin);

const int ldrPin = A0; // LDR pini
String buff;
bool ldrWorking = true;
bool systemRunning = false;
unsigned long lastLDRCheckTime = 0;
String testullah;
const unsigned long LDR_CHECK_INTERVAL = 2000; // 2 saniyede bir kontrol et

void setup() {
  pinMode(9, OUTPUT); // Role 1 pin
  pinMode(10, OUTPUT); // Role 2 pin
  pinMode(11, OUTPUT); // Role 3 pin
  pinMode(12, OUTPUT); // Role 4 pin
  pinMode(13, OUTPUT); // test led pin
  pinMode(ldrPin, INPUT); // LDR pinini giriş

  digitalWrite(9, HIGH);
  digitalWrite(10, HIGH);
  digitalWrite(11, HIGH);
  digitalWrite(12, HIGH);
  digitalWrite(13, LOW);

  Serial.begin(115200);
  digitalWrite(13, HIGH);
 




  sim800L.begin(9600);
  Serial.println("Initializing...");

  sim800L.println("AT");
  waitForResponse();
  sim800L.println("ATE1");
  waitForResponse();
  sim800L.println("AT+CMGF=1");
  waitForResponse();
  sim800L.println("AT+CNMI=1,2,0,0,0");
  waitForResponse();
}

void loop() {
  // LDR durumunu kontrol et
  if (millis() - lastLDRCheckTime >= LDR_CHECK_INTERVAL) {
    ldrWorking = checkLDRStatus();
    Serial.println("LDR Status: " + String(ldrWorking ? "Light Detected" : "No Light Detected"));
    lastLDRCheckTime = millis();
  }

  while (sim800L.available()) {
    buff = sim800L.readString();
    Serial.println(buff);

    if (buff.indexOf("basla") != -1) {
      digitalWrite(9, LOW);
      delay(2000); // 2 saniye bekle
      digitalWrite(10, LOW);
      delay(5000); // 5 saniye boyunca 10 LOW
      digitalWrite(10, HIGH);
      if (ldrWorking) {
        // ........
        systemRunning = true;

        // Dur komutu gelene kadar devam et
        while (buff.indexOf("dur") == -1) {
          delay(5000); // 5 saniye bekle
          digitalWrite(9, HIGH);
          digitalWrite(10, HIGH);
          delay(2000); // 2 saniye bekle
          digitalWrite(9, LOW);
          delay(2000); // 2 saniye bekle
          digitalWrite(10, LOW);
          delay(3000); // 3 saniye sonra 10 HIGH
          digitalWrite(10, HIGH);
          checkNewSMS(); // Yeni SMS'leri kontrol et
        }

        // Sistem durduğunda
        digitalWrite(9, HIGH);
        digitalWrite(10, HIGH);
        systemRunning = false;
      }
    } else if (systemRunning && buff.indexOf("stop") != -1) {
      digitalWrite(9, HIGH);
      digitalWrite(10, HIGH);
      systemRunning = false;
    } else if (systemRunning && buff.indexOf("test") != -1) {
      digitalWrite(9, LOW);
      delay(2000);
      digitalWrite(10, HIGH);
      delay(2000);
      digitalWrite(9, HIGH);
      delay(2000);
      digitalWrite(11, LOW);
      Serial.println("test SMS received");
    }
    sim800L.println("AT+CMGDA=\"DEL ALL\"");
    waitForResponse();
  }

  while (Serial.available()) {
    buff = Serial.readString();
    buff.trim();
    if (buff == "s") {
      sendSMS("SMS testi");
    } else {
      sim800L.println(buff);
    }
  }
}

bool checkLDRStatus() {
  int ldrValue = analogRead(ldrPin);
  return ldrValue <= 500; // LDR
}

void sendSMS(String message) {
  sim800L.print("AT+CMGS=\"+90xxxxxxxx\"\r"); // Alıcı telefon numarası
  waitForResponse();
  sim800L.print(message);
  sim800L.write(0x1A);
  waitForResponse();
}

void checkNewSMS() {
  sim800L.println("AT+CMGL=\"REC UNREAD\"");
  delay(500);

  while (sim800L.available()) {
    buff = sim800L.readString();
    Serial.println(buff);

    if (buff.indexOf("+CMGL:") != -1) {
      // Yeni SMS bulundu
      if (buff.indexOf("basla") != -1) {
        // ........
        // ........
      } else if (buff.indexOf("dur") != -1) {
        // "dur" SMS'i geldi
        digitalWrite(9, HIGH);
        digitalWrite(10, HIGH);
        Serial.println("Dur SMS received");
        systemRunning = false; // Sistem durmasını sağla
      } else if (buff.indexOf("stop") != -1) {
        // ........
        // ........
      } else if (buff.indexOf("test") != -1) {
        // ......
        // ........
      }
    }
  }
}

void waitForResponse() {
  delay(1000);
  while (sim800L.available()) {
    Serial.println(sim800L.readString());
  }
  sim800L.read();
}
 
Debug etmek için bir LED kullan. LED'yi kodun değişik yerlerinde yak ve kod oraya ulaşıyor mu ulaşmıyor mu dene.

Veya daha iyisi, eğer dijital osiloskobun varsa, ayrı bir pinden, programın değişik yerlerinde seri data gönder. Böylece program nerelere uğradı anlarsın.

Bundan da iyisi, bir PicKit al ve doğrudan MPLAB debugger altında çalıştır. Takılınca da programı durdur ve incelemelerini yap.
 

Forum istatistikleri

Konular
5,844
Mesajlar
99,710
Üyeler
2,481
Son üye
rfdog12

Son kaynaklar

Son profil mesajları

gruptaki arkadaşlara selamlar. sıteyi bu gün fark ettim. Asansör için 2x7 segment LCD gösterge üretmek istiyorum. acaba bu sayfadaki arkadaşlardan destek alabilirmiyim. LCD nin mantık açılımı ektedir.
deneyci wrote on TA3UIS's profile.
Selam.
Amatör telsiz lisansı nasıl alınıyor?
Lisansı olmayanı forumlarına almıyorlar. :)
Bilgi alamıyoruz.
cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Back
Top