• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Karta sd i szukanie w pliku
#41
(01-11-2018, 00:49)wchpikus napisał(a): Nie wiem jakie jest ograniczenie, nie sadze ze pliki ze srednia ok 40 znakow zapelniaja  caly flash 3M...
Aby odpowiedzieć na to pytanie trzeba wiedzieć jak działa system plików i jakiej wielkości jest sektor. Typowo, ARM mają sektory po 1..2kB. 146plików o wielkości od 1..2kB zajmie więc max 300kB,ale jesli sektory sa po 16kB to blisko 2,4MB. Do tego dochodzi pojemność zajmowana przez katalogi.
 
Odpowiedź
#42
W jakim formacie masz te dane?
vcard, json itp...
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#43
format zapisywany na spiffs juz jest obrobiony z vcard,
wycięte niepotrzebne rzeczy, zostaje tylko numer i nazwa,oddzielone:
String x = (">");
String y = ("<");
String z = ("$");
link= (z+contact_phone+x+contact_name+y);
phonebook_memory += (link); //zapis do pliku, po zakonczonej transmisji zapis do spiffs (utylizacja phonebook_memory)
zaczyna sie od $,numer,>, nazwa,< .
taki ciag jest dla kazdego kontaktu.

Wystarczy zczytac od 1 do 2 "$" i mamy jeden kontakt.
 
Odpowiedź
#44
Rekordy zakańczaj przez CRLF. W Arduino, zdaje się jest funkcja czytająca jedną linie tekstu,w tym wypadku rekord. Jeśli nie ma to sobie ją napiszesz. Plik możesz czytać od dowolnego miejsca, dowolną liczbę znaków.

Jeśli chcesz przyspieszyć operacje na bazie (raczej nie widzę tu takiej potrzeby), to tworzysz dodatkowy plik z indeksami, lub indeksy umieszczasz na początku pliku bazy,
 
Odpowiedź
#45
Czyli powinno byc:
f.print("xxx"); // bez konca linii
f.println("xxx"); // z koncem lini i nastepna zapisze w nowej linii?

Jesli tak to temat sie szybko rozwiazeWink
Czytanie linia po linii gdzies widzialem.



Wysłane z mojego SM-G950F przy użyciu Tapatalka
 
Odpowiedź
#46
(02-11-2018, 00:43)wchpikus napisał(a): Czyli powinno byc:
   f.print("xxx"); // bez konca linii
   f.println("xxx"); // z koncem lini i nastepna zapisze w nowej linii?

Dokładnie o to chodzi.


PS
Jedyny kumaty na tym forum. Aż przyjemnie pomagać.


PS2
Z pewnych powodów nie jestem wykładowcom (na nauczyciela nie mam wykształcenia - nawet się rymuje). Klauzula sumienia, nie pozwalał by mi promować leserów, a jak bym oblewał 90% uczniów, to by mnie ze szkoły wywalili, bo za każdego łebka jest kasa (nawet w podstawówce). Nie łudzicie się wiec uczniowie, że nauczyciele was kochają, kochają kasę. Ci nauczyciele (przeważnie nauczycielki, one są głupsze) co wybiegają przed szereg, szybko kończą karierę i zasilają szeregi ......agencji towarzyskich. Dobrze sprawdzają się w roli domin (nie chodzi o grę w domino).
 
Odpowiedź
#47
Spoko, sprawdze w wolnej chwili, jak nie to zawsze moze byc petla until(/n) lub (/r/n).
Na razie dziala to tak.
Sorry za jakosc filmu;(

https://youtu.be/tsryMfCF5-Y

A tak w aucie.

https://youtu.be/asDjpRdpDUc

Wysłane z mojego SM-G950F przy użyciu Tapatalka
 
Odpowiedź
#48
Działa, już jakiś sukces.
Teraz zadbaj o kontrolę błędów. 99,9% programów Arduinowych "rozwalam" właśnie na braku ich kontroli.
Poważnie zastanów się nad porzuceniem Arduino. Potrafisz logicznie myśleć (w przeciwieństwie to 90% Aduinowców), szkoda Cie na ten chłam Ardunio.
Gdy zaczniesz używać debugera, programy będziesz pisał kilka razy szybciej niż teraz.
 
Odpowiedź
#49
Ardiuno tylko dlatego, ze ma najlepszy stos ip do esp (odchudzony ze zbednych rzeczy), ( oczywiscie nie biore calego expressif), i dziala stabilnie.
Dawno bym to kopnal, ale tutaj jakos dziala to najbardziej stabilnie..
Zalezalo mi na szybkim uruchomieniu wifi, skonczylo sie na duzym projekcieWink

Jednak juz mysle nad przesiadka..

Wysłane z mojego SM-G950F przy użyciu Tapatalka
 
Odpowiedź
#50
ok udało się to ogarnąć.


String read_contact_campare(String file_name,String callerid_number){
 
  String file = ("/"+ (String)file_name+".txt");
 
//  int heap = ESP.getFreeHeap();
//  Serial.print("memory enable przed ");Serial.println(heap);

//  Serial.print("file name = ");Serial.println(file);
  File myfile = SPIFFS.open(file, "r");
  if (!myfile) {
    Serial.println("file open failed");
  }
  else
  {
    Serial.println("file campare ok!");
    Serial.println("reading data..searching contact..");

    while (myfile.available()){   
      String campare =myfile.readString();                                    // czytam plik
      int numer_start = campare.indexOf(callerid_number);                     //pozycja numer start
//      Serial.print("contact start on "); Serial.println(numer_start);
      int nazwa_start = campare.indexOf('>',numer_start);                     //pozycja nazwa start
      int nazwa_koniec = campare.indexOf('<',numer_start);                    //pozycja nazwa stop
      int numer_stop = campare.indexOf('>',numer_start);                      //pozycja numer stop        
      String number_phonebook = campare.substring(numer_start,numer_stop);    // numer od znaku > do <
      int number_phonebook_leng = (number_phonebook.length()-1);                  //dlugosc numeru w ksiazce -1
      int callerid_number_leng = callerid_number.length();                    //dlugosc przychodzacego numeru
      
      if ( (nazwa_start != -1) && (nazwa_koniec != -1) && (callerid_number_leng == number_phonebook_leng)){ //jesli znajdzie miejsce w ksiazce oraz dlugosc jest taka sama
        callerid_name = campare.substring(nazwa_start+1,nazwa_koniec); // nazwa od znaku > do <      
        Serial.println("phone_name finded");
      }
      else
      {
        Serial.println("phone_name not finded");
        callerid_name = callerid_number;
      }
      campare="";
      file="";
      myfile.close();
      
    }
  }
  return (callerid_name);


Poprawiłem kilka rzeczy, teraz działa od strzała.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości