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
7,231
Mesajlar
122,395
Üyeler
2,922
Son üye
Spacetr

Son kaynaklar

Son profil mesajları

Freemont2.0 herbokolog Freemont2.0 wrote on herbokolog's profile.
nick iniz yakıyor
:D
Freemont2.0 posta Freemont2.0 wrote on posta's profile.
Merhabalar :)
az bilgili çok meraklı
Prooffy semih_s Prooffy wrote on semih_s's profile.
Merhaba, sizden DSO2C10 hakkında bilgi rica ettim. Yanıtlarsanız sevinirim...
Unal taydin Unal wrote on taydin's profile.
Timur Bey, Arduino kontrollü bir akü şarj cihazı yapmaya çalışıyorum. Aklımdaki fikri basit bir çizim olarak konu açmıştım. Özellikle sizin fikirlerinizi çok önemsiyorum.
Back
Top