How do I stop the previous code and restart it by a Bluetooth command?

Hi. I am making a code but... dont want to be the previous code looped again and restarting the code by the bluetooth command "/K?:restart" by the command line.
The code is simple:

#include <SPI.h> // SPI kütüphanesi eklendi
#include <SD.h> // SD kart kütüphanesi eklendi
#include <SdFat.h> // SDFat kütüphanesi eklendi 32G+ destekler
#include <SoftwareSerial.h>

SoftwareSerial bt_iletisim(7,6);

File dosya; // dosya adında bir File nesnesi oluşturuldu
long number9999 = 2147483647LL;

void setup() 
{
  Serial.begin(115200); // SD karttan okunan verileri Serial monitöre daha hızlı aktarmak için 115200baud hızı seçildi
                        // aynı değişikliği Serial monitörünüzde önceden yapmayı unutmayın
  bt_iletisim.begin(15200);

  Serial.println("SD kart hazirlaniyor..."); 
  if(!SD.begin(4)) // SD kart CS bacağı 4 nolu dijital pine bağlı, SD kart takılı değilse
  {
    Serial.println("SD kart takili degil!!!");
    Serial.println("Lutfen SD kartinizi takiniz!!!");
    while(!SD.begin(4)); // kart takılana kadar beklenir
    Serial.println("SD kart kullanima hazir!!!"); // kart takılınca program devam eder
    delay(1000); // 1 saniye isteğe bağlı bekleme 
  }
  else
  {
    Serial.println("SD kart kullanima hazir!!!"); // kart takılı ise program devam eder
    delay(1000); // 1 saniye isteğe bağlı bekleme 
  }
  
}

void loop()
{
    Serial.println("-----------------LRT SD KART TEST-----------------");
    
    char okunan[100]; // 100 karakterlik char tipinde boş bir dizi tanımlandı
    int i=0; // okunacak karakter sayısı için sınır değişken başlangıçta sıfır

    // Attempt to create folders
    Serial.println("Folder olusturma testleri basliyor...");
    if (SD.mkdir("/Empty_Flashable_Zip")) {
    Serial.println("The Empty_Flashable_Zip in root was sucsessfully created.");
    }
    else {
    Serial.println("The Empty_Flashable_Zip in root was NOT sucsessfully created!");
    }

    
    dosya = SD.open("LRT.txt",FILE_WRITE); // LRT.txt adlı bir dosya üzerine veri yazılmak üzere oluşturulup açılıyor.
    dosya.println(123.456789,6); // açılan dosyaya 123.456789 sayısı yazılıyor dondaki 6 ondalıklı 
                                 // kısmın kaç basamağının yazılacağını belirtiyor
    dosya.close(); // yazma işlemi bitti dosya kapatılıyor

    Serial.println("123.456789 sayisi SD Karta Yazildi...");
    
    dosya = SD.open("LRT.txt",FILE_READ); // aynı dosya bu sefer okunmak için açılıyor
    while (dosya.available()) // dosyada karakter olduğu sürece while döngüsü devam ediyor
    {
       okunan[i] = dosya.read(); // ilk karakterden başlayıp her döngüde bir sonraki karakteri 
                                 // boş dizi değişkenine aktarıyoruz
       i++; 
       if(i==number9999) // 12 karakter sınırı koyduk bundan fazla karakter okunmayacak dosyadan
       {
        break; // okunmaya kalkışılırsa while döngüsü sonlandırılır programa devam edilir
       }
    }
    dosya.close(); // dosya kapatılıyor
    
    float okunan_rakam = atof (okunan); // okunan karakter dizisi float tipinde tam sayıya dönüştürülüyor
    Serial.println(okunan_rakam,6); // ekrana dosyadan okunan ve float tipinde tam sayıya çevrilmiş hali
                                    // Serial monitöre yazdırılıyor, ondalıklı kısım 6 basamaklı olacak şekilde.
                                    //  çıktı 123.456771 oluyor gerçekte kaydedilen değer ise 123.456787 oluyor
    Serial.println("Yazdınız. Şimdi Bluetooth ile deneyin!");
    if (bt_iletisim.available()) {
      char data = bt_iletisim.read();
    dosya.println(data);
    Serial.println(data);
  }
    while(1); // program sonu loop tekrarını istemiyorum şimdilik
}

How do I do it?
Second: stop the code command is "/K?:stop"

web gore/servers had one job:
image

Create a "stack" (a file on SD card?), monitor input for "stop", push data to stack, wait for "continue" or "restart" input.

Can you please explain in more detail what is your issue.

Can you do the stop and restart that you want with Serial input from the monitor?

This does not look correct, appears to overrun the boundaries of an array.
From the comment, number9999 should be equal to 11 if you want to read 12 characters at index 0-11.

long number9999 = 2147483647LL;

char okunan[100]; // 100 karakterlik char tipinde boş bir dizi tanımlandı
    
while (dosya.available()) // dosyada karakter olduğu sürece while döngüsü devam ediyor
    {
       okunan[i] = dosya.read(); // ilk karakterden başlayıp her döngüde bir sonraki karakteri 
                                 // boş dizi değişkenine aktarıyoruz
       i++; 
       if(i==number9999) // 12 karakter sınırı koyduk bundan fazla karakter okunmayacak dosyadan
       {
        break; // okunmaya kalkışılırsa while döngüsü sonlandırılır programa devam edilir
       }
    }

The posted code reads one character from BT (if one is available) then hangs in an infinite loop.

So, you first need to learn how to input and interpret entire commands from the BT module. See the Serial Input Basics tutorial for some ideas.

    if (bt_iletisim.available()) {
      char data = bt_iletisim.read();
    dosya.println(data);
    Serial.println(data);
  }
    while(1); // program sonu loop tekrarını istemiyorum şimdilik

Well while(1) worked And it loops bluetooth.


(Reminder that chatgpt is not arduino request its other)
it did not work stops code :stuck_out_tongue:

Now i need a loop.
code:

#include <SPI.h> // SPI kütüphanesi eklendi
#include <SD.h> // SD kart kütüphanesi eklendi
#include <SdFat.h> // SDFat kütüphanesi eklendi 32G+ destekler
#include <SoftwareSerial.h>

SoftwareSerial bt_iletisim(7,6);
int reset = 2;

File dosya; // dosya adında bir File nesnesi oluşturuldu
long number9999 = 2147483647LL;

void setup() 
{
  Serial.begin(115200); // SD karttan okunan verileri Serial monitöre daha hızlı aktarmak için 115200baud hızı seçildi
                        // aynı değişikliği Serial monitörünüzde önceden yapmayı unutmayın
  bt_iletisim.begin(15200);

  Serial.println("SD kart hazirlaniyor..."); 
  if(!SD.begin(4)) // SD kart CS bacağı 4 nolu dijital pine bağlı, SD kart takılı değilse
  {
    Serial.println("SD kart takili degil!!!");
    Serial.println("Lutfen SD kartinizi takiniz!!!");
    while(!SD.begin(4)); // kart takılana kadar beklenir
    Serial.println("SD kart kullanima hazir!!!"); // kart takılınca program devam eder
    delay(1000); // 1 saniye isteğe bağlı bekleme 
  }
  else
  {
    Serial.println("SD kart kullanima hazir!!!"); // kart takılı ise program devam eder
    delay(1000); // 1 saniye isteğe bağlı bekleme 
  }
  digitalWrite(reset, HIGH);
  
}

void loop()
{
    Serial.println("-----------------LRT SD KART TEST-----------------");
    
    char okunan[100]; // 100 karakterlik char tipinde boş bir dizi tanımlandı
    int i=0; // okunacak karakter sayısı için sınır değişken başlangıçta sıfır

    // Attempt to create folders
    Serial.println("Folder olusturma testleri basliyor...");
    if (SD.mkdir("/Empty_Flashable_Zip")) {
    Serial.println("The Empty_Flashable_Zip in root was sucsessfully created.");
    }
    else {
    Serial.println("The Empty_Flashable_Zip in root was NOT sucsessfully created!");
    }

    
    dosya = SD.open("LRT.txt",FILE_WRITE); // LRT.txt adlı bir dosya üzerine veri yazılmak üzere oluşturulup açılıyor.
    dosya.println(123.456789,6); // açılan dosyaya 123.456789 sayısı yazılıyor dondaki 6 ondalıklı 
                                 // kısmın kaç basamağının yazılacağını belirtiyor
    dosya.close(); // yazma işlemi bitti dosya kapatılıyor

    Serial.println("123.456789 sayisi SD Karta Yazildi...");
    
    dosya = SD.open("LRT.txt",FILE_READ); // aynı dosya bu sefer okunmak için açılıyor
    while (dosya.available()) // dosyada karakter olduğu sürece while döngüsü devam ediyor
    {
       okunan[i] = dosya.read(); // ilk karakterden başlayıp her döngüde bir sonraki karakteri 
                                 // boş dizi değişkenine aktarıyoruz
       i++; 
       if(i==number9999) // 12 karakter sınırı koyduk bundan fazla karakter okunmayacak dosyadan
       {
        break; // okunmaya kalkışılırsa while döngüsü sonlandırılır programa devam edilir
       }
    }
    dosya.close(); // dosya kapatılıyor
    
    float okunan_rakam = atof (okunan); // okunan karakter dizisi float tipinde tam sayıya dönüştürülüyor
    Serial.println(okunan_rakam,6); // ekrana dosyadan okunan ve float tipinde tam sayıya çevrilmiş hali
                                    // Serial monitöre yazdırılıyor, ondalıklı kısım 6 basamaklı olacak şekilde.
                                    //  çıktı 123.456771 oluyor gerçekte kaydedilen değer ise 123.456787 oluyor
    Serial.println("Yazdınız. Şimdi Bluetooth ile deneyin!");

  if {
      if (bt_iletisim.available()) {
        char data = bt_iletisim.read();
      dosya = SD.open("LRT.txt",FILE_WRITE);
      dosya.println(data);
      Serial.println(data);
      if (data = "/K?:restart") {
        Serial.println("restart");
        break;
      }
      if (data = "/K?:exit") {
        Serial.println("exit");
        while(1);
      } 
    }
  }
}
  • if what?
  • data is a char so it can't ever be more than one character long.
  • if (data = "/K?:restart") { overwrites data with something (because it uses the assignment operator = rather than the comparison operator ==).

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.