• 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 problem z odczytem
#1
jak odczytać z karty na przykład do zmiennej tablicowej
Kod:
/*
  SD card read/write

This example shows how to read and write data to and from an SD card file
The circuit:
* SD card attached to SPI bus as follows:
** MOSI - pin 11
** MISO - pin 12
** CLK - pin 13
** CS - pin 4

created   Nov 2010
by David A. Mellis
modified 9 Apr 2012
by Tom Igoe

This example code is in the public domain.

*/

#include <SPI.h>
#include <SD.h>


File myFile;
char dana;
void setup()
{
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }


  Serial.print("Initializing SD card...");

  pinMode(10, OUTPUT);
zapis();

}

void loop()
{

     Serial.println(dana);
      odczyt();
}












void zapis(){
    if (!SD.begin(4)) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");

  myFile = SD.open("test.txt", FILE_WRITE);


  if (myFile) {
    Serial.print("Writing to test.txt...");
    myFile.println("elllllllo");

    myFile.close();
    Serial.println("done.");
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
  }
}
void odczyt(){
  

  // re-open the file for reading:
  myFile = SD.open("test.txt");
  if (myFile) {
    Serial.println("test.txt:");

    // read from the file until there's nothing else in it:

      dana=myFile.read();
    
    // close the file:
    myFile.close();
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
  }
}
 
Odpowiedź
#2
Na początek to namieszałeś z samym odczytem powinno być tak jak na końcu . Inna sprawa to sczytywanie danych z karty , nie ukrywam że jeżeli chcesz mieć dostęp do konkretnej linijki czy kilku danych to nie wiem czy ci atmega 328 w uno czy mini wystarczy na same algorytmy ;( . Bardzo fajnym rozwiązaniem jest kostka eeprom 24c512 którą przy pomocy bibliotek <E24C1024.h> i <EDB.h> możesz bardzo precyzyjnie wypełnić danymi i odwołać się do konkretnych danych w dowolnym momencie . Struktura wygląda mniej więcej tak:

Kod:
struct LogEvent {
  
  byte maszyna;
  byte stat;
  word zmiana;
  word licz;
  unsigned long overal;
  byte godzina;
  byte minuta;
  byte dzien;
  byte miesiac;
  word rok;
  byte dzielnik;
  char ac;  
  byte timing;
}

Pozwala ona na zapis w tej formie około 4000 logów a wyciągnięcie pojedynczej zmiennej jest banalnie proste , poza tym pomijam fakt że różnica w wielkości biblioteki to 14000 dla sd i 6000 dla eeprom , wskazujesz numer rekordu i zmienną do odczytu coś w ten deseń

Kod:
db.readRec(recno, EDB_REC logEvent); //wywołanie odczytu
recno = 1326 // numer rekordu
godzina = logEvent.godzina // dane do wstawienia w zmiennej godzina

Kod:
#include <SD.h>
const int cs = 9; // pin załączający u ciebie inny w setup inny w begin
File myFile;

void setup(){

  Serial.begin(9600);
  Serial.print("Initializing SD card...");
  pinMode(cs, OUTPUT);
  
  if (!SD.begin(cs)) {
    Serial.println("initialization failed!");return;}
    Serial.println("initialization done.");
    zapis();
    odczyt();
}

void loop(){}

void zapis(){
  
myFile = SD.open("test.txt", FILE_WRITE);
  if (myFile) {
    Serial.print("Writing to test.txt...");
    myFile.println("testing 1, 2, 3.");
    myFile.close();
    Serial.println("done.");}
  else {Serial.println("error opening test.txt");}
  
}

void odczyt(){

myFile = SD.open("test.txt");
  if (myFile) {
    Serial.println("test.txt:");
    while (myFile.available()) {Serial.write(myFile.read());}
    myFile.close();}
  else {Serial.println("error opening test.txt");}

}
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#3
słuchaj mam arduino mega i due wiec uwierz wystarczy a co do uno dla mnie za małe sa taka atmega bawiłem sie w gimnazjum i na początku technikum gdy ztworzywem pokój inteligenty i zaczęło atmegi 32 brakować to się zastanowiłem nad czymś konkretnym co do pamięci właśnie zacząłem kombinować tylko ze ta pamięć ma 24k a nie wiem ile maj pamięci flasch w kasie fiskalnej jest ich 8 i muszę je skopiować
 
Odpowiedź
#4
24c512 ma 64kb pamięci możesz pod tą biblioteką zrobić macierz 4x64kb 256kb chyba wystarczy na epprom a flash musisz wiedzieć jaki na pewno pisze i zapewne jet kilku megowy jak nie większy . Tutaj ja bym przerwał dalsze rozwodzenie się nad kwestią naprawy home-made i nie bawił w takie rzeczy tylko kupił programator do tego ( a tak w sumie to pomijamy aspekt prawny grzebania w kasie fiskalnej no chyba że córce i koleżankom do zabawy chcesz je dać )

Tak na marginesie nie sztuką jest napisać program potwora na 256-512kb sztuką jest wcisnąć go nie tracąc na funkcjonalności na 32kb i jeszcze mieć miejsce na dalsze dodatki Wink
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#5
ja jestem serwisantem kas i pracownikiem serwisu komputerowego i tam tez jestem elektronikiem niema żadnych podstaw prawnych posiadam papiery upoważniające mnie do napraw udzielonych mnie wydanych firmę produkująca dana kasę (a jak nie naprawie to będę zmuszony zapłacić za jej naprawę w serwisie a to kosztuje)
i dlatego muszę to zrobić "najlepszym uda się coś uszkodzić"
 
Odpowiedź
#6
Jak masz papiery to ok nie pisałeś co robisz Wink
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#7
spoko ale muszę jakoś to uruchomić bo cena mnie przeraza
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości