• 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
Problem z odczytem/zapisem na/z karty SD
#1
Hej, mam pewien problem. Pisałam dość prosty, lecz rozbudowany program na Leonardo. Miał on wyświetlać menu, i zależnie od naciśniętej opcji,umożliwiać rysowanie (i na karcie sd zapisywac współrzędne naciśniecia), zapisywać na karcie sd, w pliku napis testowy, lub odczytywać z karty sd i wyświetlac na ekraniku tekst zapisany w pliku.

Na arduino Leonardo wszystko pięknie działało, ale niestety brak miejsca zmusił mnie do zakupu zamiennika arduino Mega 2560. Wszystko podpięłam dobrze, ale niestety pojawił się problem z zapisem/odczytem z/na karte sd (biblioteka SD.h). Czy ktoś jest mi w stanie pomóc?

Płytka: RobotDyn MEGA CH340/A Tmega 2560
   
Biblioteka: SD.h
Wyświetlacz (z portem na karte SD): TJCTM24024-SPI ( 2.4". 240x 320)
   

Podłączenie:
 T_IRQ -> 7
 T_DO -> 6
 T_DIN -> 5 
 T_CS -> 4
 T_CLK -> 3
 MISO -> 50
 MOSI > 51
 LED > 5v
 SCK > 52
 D/C > 46
 RST > 48
 CS > 53 
 SD_SCK > 22

(ICSP)
SD_MISO > 1
SD_MOSI > 4
SD_CS > 3

Ps. Obawiam się że może to być kwestia źle zdefiniowanych pinów, ale nie wiem jak sobie z tym poradzić przy tej bibliotece 

Ps2. Funkcja guz() jest przezemnie napisana, i po prostu wyświetla guziczek w odpowiednim miejscu na ekranie
   

Kod:
#include "SD.h"

#include "Adafruit_ILI9341.h" 

#include "URTouch.h"          



#define TFT_DC 46             

#define TFT_CS 53           

#define TFT_RST 48

#define TFT_MISO 50       

#define TFT_MOSI 51         

#define TFT_CLK 52          


Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);


#define T_CLK 3              

#define T_CS 4                

#define T_DIN 5              

#define T_DOUT 6             

#define T_IRQ 7  




File myFile;

URTouch ts(T_CLK, T_CS, T_DIN, T_DOUT, T_IRQ);


[...]


void zczytajPiksele(int x, int y)

{

        myFile.print(x);

        myFile.print(",");

        myFile.print(y);

        myFile.print(";  ");

        myFile.println();

}


void wyswietlSD()

{

  int x,y;

      tft.setTextSize(1);

      tft.setTextColor(ILI9341_BLACK);  

      tft.setCursor(10,80);

      tft.print("wywołano funkcje wyswietl");

      

    SD.begin(22);

    myFile = SD.open("kord.txt");

    if (myFile) 

    {

      tft.setCursor(10,20);

     tft.println("kord.txt:");

      while (myFile.available()) 

      {

        tft.write(myFile.read());

      }

      myFile.close();

    } 

    else 

    {

       tft.setCursor(10,20);

      tft.println("error opening kordynaty.txt");

    }


}


void zapisz()

{

      tft.setTextSize(1);

      tft.setTextColor(ILI9341_BLACK);  

      tft.setCursor(10,80);

      tft.print("wywołano funkcje zapisz");

      tft.setCursor(10,18);

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

      SD.begin(22);

      /*if (!SD.begin(22)) 

      {

        tft.println("initialization failed!");

        return;

      }*/

      tft.println("initialization done.");

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

      tft.setCursor(10,28);

      if (myFile) 

      {

        tft.print("Writing to test.txt...");

        myFile.println("testing 1, 2, 3.");

        myFile.close();

        tft.setCursor(10,38);

        tft.println("done.");  //Wysyłanie i wyświetlanie koordynat   178 lin  

      } 

      else 

      {

        tft.println("error opening test.txt");

      }

}

[...]


void rysowanie()

{

     int x, y;

      

      tft.setTextSize(1);

      tft.setTextColor(ILI9341_BLACK);  

      tft.setCursor(10,10);

      tft.print("Naciśnięto pierwszy przycisk. Rysowanie");

      guz(240,190,80,50,2,270,210,"BACK");

      //SD.begin(22);

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

      while(!(x>240&&y>190&&x<320&&y<240))

      {

        ts.read();                      

        x = ts.getX();                 

        y = ts.getY();  

        x += 13;                      

        y += 4;                       

        int radius = 2;               

        tft.fillCircle(x, y, radius, ILI9341_BLACK);

        //zczytajPiksele(x,y);

      }

      //myFile.close();

}


void przyc2()

{

      int x,y;

      

      tft.setTextSize(1);

      tft.setTextColor(ILI9341_BLACK);  

      tft.setCursor(10,10);

      tft.print("Naciśnięto Drugi przycisk");

      guz(240,190,80,50,2,270,210,"BACK");

       zapisz();

      

      while(!(x>240&&y>190&&x<320&&y<240))

      {

        ts.read();                      

        x = ts.getX();                 

        y = ts.getY(); 

      }

     

      

}


void przyc3()

{

      int x,y;

      tft.setTextSize(1);

      tft.setTextColor(ILI9341_BLACK);  

      tft.setCursor(10,10);

      tft.print("Naciśnięto trzeci przycisk");

     guz(240,190,80,50,2,270,210,"BACK");

      wyswietlSD();

      while(!(x>240&&y>190&&x<320&&y<240))

      {ts.read();                      

        x = ts.getX();                 

        y = ts.getY(); 

      }

      

      

}

[...]

Void setup(){

  tft.begin();                     

  tft.setRotation(1);           

 

  ts.InitTouch();                   

  ts.setPrecision(PREC_MEDIUM);

  tft.fillScreen(ILI9341_BLACK);


  guz(0,0,320,80,3,100,40,"rysowanie");

  guz(0,81,160,80,2,40,100,"tesZap");

  guz(161,81,160,80,2,220,100,"wysw");

  guz(0,161,80,65,1,40,190,"nFol");

  

  tft.setTextColor(ILI9341_GREEN);  

  tft.setTextSize(2);

  tft.setCursor(20,220);           

  tft.print("By Kinga Snuszka");

}

 

void loop()

{

  int x, y; 

  String nazFol;

                         

 

  while(ts.dataAvailable())        

  {

    ts.read();    //Wysyłanie i wyświetlanie koordynat   178 lin                

    x = ts.getX();                 

    y = ts.getY();    

    Serial.print(x); Serial.print(','); Serial.println(y);// + " " + Y); 

    if (y<80&&x<320&&x>0&&y>0)

    {

      czysc();

      rysowanie();

      setup();

    }

   

        if(x>0&&y>81&&x<160&&y<160)

        {

          czysc();

          przyc2();

          setup();

        }

        else

        {

          if(x>160&&y>80&&x<320&&y<160)

          {

            czysc();

            przyc3();

            setup();

          }
Z góry dziękuje za pomoc i pozdrawiam
 
Odpowiedź
  


Wiadomości w tym wątku
Problem z odczytem/zapisem na/z karty SD - przez Kanra - 08-04-2019, 14:58

Skocz do:


Przeglądający: 1 gości