sd karttan veri okuma hata!

murattt

Yeni Üye
Katılım
23 Ocak 2023
Mesajlar
1
Merhabalar. SD karttan veri okuyup okuduğu veriyle de 2 adet motor süren bir kod yazmaya çalışıyorum. fakat sd karttan verileri okurken 70. satırda veriler bir anda hatalı gelmeye başlıyor ama sonra tekrar düzeliyor. Şuanda sd kart içinde 81 satır veri var test için. ama planladığım son halinde 3000 satır veri olacak. sd kartın içinde veriler.txt adında bir dosyam var bu dosyada her satırda iki adet veri var bu veriler ile çalışıyorum. For döngüsünün içindeki ikinci if bloğunu kaldırınca hata olmadan veriler serial monitöre yazılıyor. hatta ikinci if bloğunun içinden sadece analogWrite komutlarını silince bile düzeliyor ama bu mokutlara ihtiyacım var. ne yapsam bir çare bulamadım yardımlarınızı bekliyorum.
PWM.h kütüp hanesini kullanıyorum çünkü endüstriyel ac servo süremeye çalışıyorum bu motorlar pwm sinyalinin frekansına göre hızlanıp yavaşlıyorlar. bu kütüphane de pwm sinyallerinin frekanslarını arttırıyor.

Kodum bu:
kodum:
#include <SD.h>
#include <PWM.h>
File dosya;
int satir_sayisi = 0;
int32_t x, y;
int pwm_pin1 = 9; // Pwm pinlerinden 9 numarali pin atanmistir.
int pwm_pin2 = 10; // Pwm pinlerinden 10 numarali pin atanmistir.
int yon_pin1 = 2; // Yön değiştirme pinlerinden 2 numarali pin atanmistir.
int yon_pin2 = 3; // Yön değiştirme pinlerinden 3 numarali pin atanmistir.
void setup() {
  InitTimersSafe();
  pinMode(yon_pin1, OUTPUT);
  pinMode(yon_pin2, OUTPUT);
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  if (!SD.begin(4)) {
    Serial.println("initialization failed!");
    while (1);
  }

  dosya = SD.open("veriler.txt");
  if (dosya) {
    Serial.println("veriler.txt:");

    while (dosya.available()) {
      String satir = dosya.readStringUntil('\n');
      satir_sayisi++;
    }
    Serial.println(satir_sayisi);

    dosya.seek(0);

    if (dosya.available()) {
      int x = dosya.parseInt();
      int y = dosya.parseInt();
      /* Serial.print("yeni x ");
        Serial.println(x);
        Serial.print("yeni y ");
        Serial.println(y); */
    }



    for (int j = 0; j < satir_sayisi; j++) {
      Serial.println(j);
      int32_t veri1 = dosya.parseInt();
      int32_t veri2 = dosya.parseInt();
        Serial.print("veri1 ");
        Serial.print(veri1);
        Serial.print(": veri2 ");
        Serial.println(veri2);
      int32_t snc = (veri1 - x) * 200000 / 32767;
      int32_t snc2 = (veri2 - y) * 200000 / 32767;
      Serial.print("snc:");
      Serial.print(snc);
      Serial.print(" snc2:");
      Serial.println(snc2);
      x = veri1;
      y = veri2;


      if (snc != 0) {
        SetPinFrequencySafe(pwm_pin1, abs(snc));
        digitalWrite(yon_pin1, snc < 0 ? LOW : HIGH);
        analogWrite(pwm_pin1, 200);
      }
      else {
        analogWrite(pwm_pin1, 0);
      }

      if (snc2 != 0) {
        SetPinFrequencySafe(pwm_pin2, abs(snc2));
        digitalWrite(yon_pin2, snc2 < 0 ? LOW : HIGH);
        analogWrite(pwm_pin2, 200);
      }
      else {
        analogWrite(pwm_pin2, 0);
      }
      delay(250);
      Serial.println("--------------------------------------------------------------");
    }
    dosya.close();
    pwmWrite(pwm_pin1, 0);
    pwmWrite(pwm_pin2, 0);
  } else {
    Serial.println("error opening file");
  }
}

void loop() {
  // your code here
}

veriler.txt bu:
Kod:
12816, -12816
17089, -17089
25633, -25633
32767, -32767
25633, -25633
17089, -17089
12816, -12816
10253, -10253
13615, -13615
12901, -12901
12605, -12605
12668, -12668
13094, -13094
13956, -13956
11154, -11154
13943, -13943
18591, -18591
27887, -27887
32767, -32767
27887, -27887
18591, -18591
13943, -13943
11154, -11154
9295, -9295
7967, -7967
2311, -2311
1070, -1070
-118, 118
-1338, 1338
-7323, 7323
-8544, 8544
-10253, 10253
-12816, 12816
-17089, 17089
-25633, 25633
-32767, 32767
-25633, 25633
-17089, 17089
-12816, 12816
-10253, 10253
-1118, 1118
845, -845
2668, -2668
4514, -4514
6543, -6543
8954, -8954
16338, -16338
20422, -20422
27230, -27230
32767, -32767
32767, -32767
32767, -32767
27230, -27230
20422, -20422
16338, -16338
13615, -13615
11670, -11670
10211, -10211
9076, -9076
8169, -8169
25608, -25608
20000, -20000
22222, -22222
25000, -25000
28571, -28571
32767, -32767
32767, -32767
32767, -32767
32767, -32767
32767, -32767
32767, -32767
32767, -32767
32767, -32767
32767, -32767
32767, -32767
32767, -32767
28571, -28571
25000, -25000
22222, -22222
20000, -20000
18181, -18181

hata aldığım çıktı bu şekilde, kırmızı ile işaretlediğim yerlerdeki gibi eksik veri dönüyor sonra düzelip devam ediyor.
Adsız.png


bahsettiğim for döngüsü içindeki if bloğu, kırmızı ile işaretli yerleri silince hata almıyorum.
Screenshot_3.png


Şuanda parseInt() ile verileri sd karttan okuyorum. Öncesinde satır satır okuyup parçalıyordum, o haldeyken de aynı sorun var.
Satır satır okuduğum hali:
Screenshot_4.png
 

Çevrimiçi personel

Forum istatistikleri

Konular
5,653
Mesajlar
97,274
Üyeler
2,438
Son üye
İbrahimSönmez

Son kaynaklar

Son profil mesajları

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)
Kesici/Spindle hızı hesaplamak için SpreadSheet UDF'leri kullanın, hesap makinesi çok eski kalan bir yöntem :)
Dr. Bülent Başaran,
Elektrik ve Elektronik Mühendisi
Yonga Tasarım Özdevinimcisi
Üç güzel "çocuk" babası
Ortahisar/Ürgüp/Konya/Ankara/Pittsburgh/San Francisco/Atlanta/Alaçatı/Taşucu...

Back
Top