sd card модуль и lcd

vankenshtein
Offline
Зарегистрирован: 15.04.2014

myFile.read считывает файл

buffer, sizeof(buffer) вычитал что высчитывает размер переменной

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Мммм...
читает. В переменную. Блок длинной в переменную!
тоесть если simvol равем 20 байтам. То он будет читать блоки по 20 байтов. Помещая результат каждого чтения в simvol ( затирая предыдущее чтение)
While пока файл не кончится.

vankenshtein
Offline
Зарегистрирован: 15.04.2014

так и знал что фигню наколбасил

vankenshtein
Offline
Зарегистрирован: 15.04.2014
if (myFile) {
    while (myFile.available()) {
    myFile.read(simvol, sizeof(simvol));
    // stroka++;
        myFile.close();
      }

 

vankenshtein
Offline
Зарегистрирован: 15.04.2014

ага уже что начало получаться в сериал выводится первая строка постоянно

 myFile = SD.open("test.txt");
  if (myFile) {
    while (myFile.available()) {
    myFile.read(simvol, sizeof(simvol));
    // stroka++;
        myFile.close();
      }
      Serial.println(simvol);

 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Угу. Так и будет. Если файл закрывать внутри while, дальше первой строки и не прочитает.

vankenshtein
Offline
Зарегистрирован: 15.04.2014

тааак понял, исправил 

в сериале следущее:

0---18:26:27---test 
 
 
1---18:26:28---test 
 
2---18:26:28---test
 
0---18:45:40---tes
1---18:45:41---te
st 
---18:45:41---te
0---18:26:27---test 
 
 
1---18:26:28---test 
 
2---18:26:28---test
 
0---18:45:40---tes
1---18:45:41---te
st 
---18:45:41---te
0---18:26:27---test 
 
 
1---18:26:28---test 
 
2---18:26:28---test
 
Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Замечательно, дальше как обычно. Количество строк известно. Отсчитываем нужную и выводим на дисплей.

vankenshtein
Offline
Зарегистрирован: 15.04.2014

эмммм..... а обычно это как? и не пойму откуда известно количество строк?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

vankenshtein пишет:

эмммм..... а обычно это как? и не пойму откуда известно количество строк?


// stroka++;
если раскоментить? Что будет считаться?
Особенно если процесс подсчета строк вынести в setup. Ибо нужно это 1 раз при включении

vankenshtein
Offline
Зарегистрирован: 15.04.2014

таааак, ага заработало!!! Большое вам спасибо! Можно еще вопрос, для вывода строк на дисплей отдельную переменную заводить?

vankenshtein
Offline
Зарегистрирован: 15.04.2014

как вы и сказали подсчет строк вынес в setup, теперь в loop файл надо считывать заново в другую переменную?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

vankenshtein пишет:

как вы и сказали подсчет строк вынес в setup, теперь в loop файл надо считывать заново в другую переменную?


Зачем?

vankenshtein
Offline
Зарегистрирован: 15.04.2014

эм..... а как по строкам ходить?

 

 if(digitalRead(readbt) == HIGH){ 
      lcd.setCursor(0,0);
      lcd.print(simvol);
      
 if(digitalRead(podacha10bt3 == HIGH){ 
   lcd.clear();
    stroka++;
 }
 
 if(digitalRead(podacha1bt3 == HIGH){ 
   lcd.clear();
    stroka--;
 }
    }

чет помоему не то получается

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Аммм вы типа когда строки по экрану двигаете у вас общее количество строк меняется? О.о

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Puhlyaviy пишет:
Мдааа, я уж думал вот сообразительный ученик попался. :(
Предположим что при включении наверное мы можем читать блоки по 20 символов и считать сколько прочитали блоков?
Предположим что мы можем завести переменную которая будет обозначать строку на экоане ...
Дальше догадаетесь?

Повтор.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Puhlyaviy пишет:
vankenshtein пишет:

на экране четиыре строки, не могу понять как


Бааальшой список... рамочка в 4 строки движется вверх или вниз по списку. ..

vankenshtein
Offline
Зарегистрирован: 15.04.2014
if(digitalRead(readbt) == HIGH){ 
      stroka_disp=stroka;
      lcd.setCursor(0,0);
      lcd.print(simvol);
      
 if(digitalRead(podacha10bt3 == HIGH)){ 
   lcd.clear();
    stroka_disp++;
 }
 
 if(digitalRead(podacha1bt3 == HIGH)){ 
   lcd.clear();
    stroka_disp--;
 }
    }

наверно опять не так, не могу понять как повлиять на перемещение строк на дисплее

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Ок. Зайдем с другой стороны.
Берем листик, пишем строчки.
берем вырезаем рамку высотой что бы помещалось 4 строчки.
двигаем рамку по строчкам вверх вниз.
Тоесть номер 1 строчки на экране +3
И рамочка не может двигаться дальше чем общее количество строк - 4.

vankenshtein
Offline
Зарегистрирован: 15.04.2014

да пока хотя б с одной разобраться

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Ну так теперь отсчитываем нужную строчку из файла и печатаем на экран.

vankenshtein
Offline
Зарегистрирован: 15.04.2014

блин чето совсем уже не соображаю, простите

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

vankenshtein пишет:

блин чето совсем уже не соображаю, простите


Значит нужно отложить все га время пока не придет понимание.

vankenshtein
Offline
Зарегистрирован: 15.04.2014

хорошо, спасибо еще раз за помощь. мало того что помогли еще и кое что понял, хотя ученик из меня безтолковый

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Вы же можете считать строки?
Тоесть если из подсчета строк сделать функцию, на входе даете ей номер нужной строки stroka_disp
она считает строки. А когда номер совпадает то возращает строку для печати.

vankenshtein
Offline
Зарегистрирован: 15.04.2014

чет не выходит, вы имели ввиду использовать функцию myFile.position()

vankenshtein
Offline
Зарегистрирован: 15.04.2014

Кто-нибудь пожалуйста подскахите что дальше делать, совсем застрял

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013
vankenshtein
Offline
Зарегистрирован: 15.04.2014

спасибо, щас попробую разобраться

vankenshtein
Offline
Зарегистрирован: 15.04.2014
  
  int PodschetStrok(){
  int i;
  
 
  for (i = 0; i < stroka; i++){
   myFile.read(simvol, sizeof(simvol));
     stroka_disp++;
  }

  return stroka_disp;
}
  
  if (myFile)
{
  int str;
  str = PodschetStrok();
     
    lcd.setCursor(0,1);
    lcd.print(str);
    myFile.close();
}

сделал вот так, но опять не то что то(((

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

мне так думается что вам нужно научиться составлять алгоритмы...

типа

1. взял

2. принес на кассу

3. достал кошылек

4. вынул карту

5. оплатил

6. убрал карту

и тд

вы не понимаете что и зачем делаете

карандаш, листик и рисуйте что и зачем у вас происходит.

vankenshtein
Offline
Зарегистрирован: 15.04.2014

вы абсолютно правы мало что понимаю в том что делаю, надо исправляться

vankenshtein
Offline
Зарегистрирован: 15.04.2014

1, При запуске посчитали общее количество строк в файле

2, Если нажимаем кнопку "записать", то добавляется еще одна строка

3. Если нажата кнопка "показать статистику" на дисплее отображаются первые четыре строчки

4. Если нажать кнопку"вперед" будут отображаться следущие четыре строчки

5. Если нажать кнопку "назад" будут отображаться предыдущие 4 строчки

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

vankenshtein пишет:

1, При запуске посчитали общее количество строк в файле

2, Если нажимаем кнопку "записать", то добавляется еще одна строка

3. Если нажата кнопка "показать статистику" на дисплее отображаются первые четыре строчки

4. Если нажать кнопку"вперед" будут отображаться следущие четыре строчки

5. Если нажать кнопку "назад" будут отображаться предыдущие 4 строчки

у меня впечатление что я с валенком беседую... это не алгоритм.. это ваши сексуальные фантазии..

алгоритм будет как то так

завели переменные

СТРОКА - хранит общее количество строк
СтрокаНаПечать - хранит номер первой строку на дисплее. при запуске равно 1

ТекущаяСтрока - хранит строчку которую печатаем

открыли файл

сделали цикл по общему подсчету строк

закрыли файл

 процедура по извлечению нужной строки

получили номер строки в переменной Строка_на_печать

открыли файл

отсчитали до нужной переменной

вернули переменную ТекущаяСтрока 

начали луп

...

...

 

vankenshtein
Offline
Зарегистрирован: 15.04.2014

 процедура по извлечению нужной строки

получили номер строки в переменной Строка_на_печать

 

отсчитали до нужной переменной

вернули переменную ТекущаяСтрока

 

не подскажете как это сделать?

 

 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

vankenshtein пишет:

  
  int PodschetStrok(){
  int i;
  
 
  for (i = 0; i < stroka; i++){
   myFile.read(simvol, sizeof(simvol));
     stroka_disp++;
  }

  return stroka_disp;
}
  
  if (myFile)
{
  int str;
  str = PodschetStrok();
     
    lcd.setCursor(0,1);
    lcd.print(str);
    myFile.close();
}

сделал вот так, но опять не то что то(((

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

процедура = функция 

я так понимаю вы издеваетесь...

 

vankenshtein
Offline
Зарегистрирован: 15.04.2014

походу вы издеваетесь. Вы профи для вас все легко и просто, а мне впервой и все кажется сложным и непонятным

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

vankenshtein пишет:

походу вы издеваетесь. Вы профи для вас все легко и просто, а мне впервой и все кажется сложным и непонятным

отличный заход...

вы если машина глохнет что делаете?

достаете ключи и разбираете двигатель судя по всему, хотя ничего в этом не понимаете..

ибо я бы сначала посмотрел а вдруг топливо кончилось...

vankenshtein
Offline
Зарегистрирован: 15.04.2014

т.е. функция правильная? ее из лооп в сетуп перенести просто?

 

 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

vankenshtein пишет:

  
  int PodschetStrok(){
  int i;
  
 
  for (i = 0; i < stroka; i++){
   myFile.read(simvol, sizeof(simvol));
     stroka_disp++;
  }

  return stroka_disp;
}
  
  if (myFile)
{
  int str;
  str = PodschetStrok();
     
    lcd.setCursor(0,1);
    lcd.print(str);
    myFile.close();
}

сделал вот так, но опять не то что то(((

обьясните что вы сделали тут?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

vankenshtein пишет:

т.е. функция правильная? ее из лооп в сетуп перенести просто?

НЕТ!

vankenshtein
Offline
Зарегистрирован: 15.04.2014

 for (i = 0; i < stroka; i++){  \\пока i меньше общего кол-ва строк

   myFile.read(simvol, sizeof(simvol)); 

     stroka_disp++; \\ считаем строки для отображения

  }

  return stroka_disp; \\ возвращаем кол-во строк для отображения

}

  if (myFile)

{

  int str;

  str = PodschetStrok(); \\ вызываем фуекцию

    lcd.setCursor(0,1);

    lcd.print(str); \\ печатаем строку

    myFile.close();

 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

возвращаем кол-во строк для отображения??????

ЗАЧЕМ? не логично ли было возращать строку для печати на экране?

vankenshtein
Offline
Зарегистрирован: 15.04.2014

ну да....., а как это сделать?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

vankenshtein пишет:

ну да....., а как это сделать?

вы каким образом считаете количество строк? 

vankenshtein
Offline
Зарегистрирован: 15.04.2014
ьyFile = SD.open("test.txt");

 if (myFile) {

   while (myFile.available()) {

   myFile.read(simvol, sizeof(simvol));

 stroka++;

       myFile.close();

     }

 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

ненене

вы мне словами это обьясните как оно там подсчет происходит

vankenshtein
Offline
Зарегистрирован: 15.04.2014

отсчитывает двадцать символов строка добавляется отсчитывает следущие двадцать строка добавляется

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

 myFile.read(simvol, sizeof(simvol));

ЭТО ОТСЧИТЫВАЕТ 20 СИМВОЛОВ?