[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Просмотр файлов на SD карте
marss70Дата: Суббота, 10.09.2016, 19:46 | Сообщение # 1
Группа: Проверенные
Сообщений: 80

Статус: Offline
Привет, всем! Нужна помощь в организации просмотра файлов на SD карте. Рабочий код позволяет читать построчно текстовую переменную К из файла "Mach2mm.cnc" и выводить на дисплей. Но проблема в том, что нужно точно указать с какого файла читать. А мне нужно организовать прокрутку файлов на дисплее и выбор с какого читать.

Код
$regfile = "m32def.dat"
$crystal = 16000000
$hwstack = 100
$swstack = 100
$framesize = 100

$include "Config_MMCSD_HC.bas"
$include "Config_AVR-DOS.BAS"

Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.4 , Rs = Portc.5
Cursor Off
Cls

Config Serialin = Buffered , Size = 20
Config Clock = Soft
Enable Interrupts
Config Date = Dmy , Separator = .

Dim K As String * 24

Lcd "Test_Dos_Drive compiled at " ; Version()

Wait 1
Cls
'Dim Btemp1 As Byte
Lcd "Wait for Drive"
Wait 1
Cls
If Gbdriveerror = 0 Then
' Include AVR-DOS Configuration and library

Lcd "Init File System ... ";
Wait 1
Cls
Btemp1 = Initfilesystem(1)                    ' Partition 1
' use 0 for drive without Master boot record
If Btemp1 <> 0 Then
Lcd "Error: " ; Btemp1 ; " at Init file system"
Wait 2
Cls

Else
Lcd " OK!"
Wait 1
Cls
End If
Else
Lcd "Error during Drive Init: " ;
Lowerline
Lcd Gbdriveerror
Wait 2
Cls
End If

Do

Open "Mach2mm.cnc" For Input As #1
Input #1 , K
' write is also supported
'Close #1

Lcd "Read Mach2mm.cnc"
Lowerline
Lcd K
Waitms 200
Cls
Loop
End




Сообщение отредактировал marss70 - Суббота, 10.09.2016, 19:48
 
exersizzeДата: Воскресенье, 11.09.2016, 17:56 | Сообщение # 2
Группа: Администраторы
Сообщений: 723

Статус: Offline
В avr-dos есть команда Dir, которая возвращает имя файла по маске. Подробнее http://roboforum.ru/wiki....DOS#Dir

 
marss70Дата: Понедельник, 12.09.2016, 22:24 | Сообщение # 3
Группа: Проверенные
Сообщений: 80

Статус: Offline
Спасибо!
Сделал так:

Do

Chdir "TEMP"                                               'Меняем директорию на "TEMP"
Max_file = 0
Str_temp = Dir( "*.cnc")                           'выбираем имя первого файла на в корневом каталоге с расширением *.cnc
'If Len(str_temp) > 0 Then Index = 1                'если файл существует устанавливаем номер текущего файла 1
While Len(str_temp) > 0                            'запускаем цикл пока имя файла не станет равным 0 - файлы кончатся
Max_file = Max_file + 1                            'увеличиваем значение переменной количества файлов

Lcd "Read Str_temp" ; " " ; Index
Lowerline
Lcd Str_temp
Waitms 2000
Cls

'выводим на экран имя файла

Lcd "Read Max_file "
Lowerline
Lcd Max_file
Waitms 2000                                                 'выводим общее число файлов
Cls
Str_temp = Dir()                                            'получаем имя следующего вайла в каталоге
Wend

Loop
End

помог ещё один хороший человек. Тогда ещё один вопрос: как организовать просмотр папок на карте? Как основать папку понятно(MkDir). Как открыть папку тоже понятно.




Сообщение отредактировал marss70 - Понедельник, 12.09.2016, 22:27
 
exersizzeДата: Понедельник, 12.09.2016, 23:48 | Сообщение # 4
Группа: Администраторы
Сообщений: 723

Статус: Offline
Нужно создать типа буфера в котором будут сохраняться имена найденных папок. По сути надо завести дополнительные переменные и после обнаружения новой папки записывать имя в одну из переменных.
например
dim A(10) as string*5
dim N as byte
каждую новую итерацию в цикле увеличиваем переменную N, и записываем имя найденной папки в переменную A(n)=Str_temp
получим в итоге некоторое количество N найденных папок, имена которых хранятся в диапазоне A(1) - A(N). А дальше останется только считывать значения этих переменных


 
marss70Дата: Вторник, 13.09.2016, 20:22 | Сообщение # 5
Группа: Проверенные
Сообщений: 80

Статус: Offline
А какие команды "отвечают" за название папки?



Сообщение отредактировал marss70 - Вторник, 13.09.2016, 20:23
 
exersizzeДата: Вторник, 13.09.2016, 23:48 | Сообщение # 6
Группа: Администраторы
Сообщений: 723

Статус: Offline
команда Str_temp = Dir( "*.cnc")  что возвращает в Str_temp?

 
marss70Дата: Среда, 14.09.2016, 14:40 | Сообщение # 7
Группа: Проверенные
Сообщений: 80

Статус: Offline
Str_temp = Dir( "*.cnc")                           'выбираем имя первого файла на в корневом каталоге с расширением *.cnc

Это сам файл с расширением *.cnc А вот название самой папки где лежит этот сам файл как прочитать?




Сообщение отредактировал marss70 - Среда, 14.09.2016, 14:49
 
exersizzeДата: Среда, 14.09.2016, 22:19 | Сообщение # 8
Группа: Администраторы
Сообщений: 723

Статус: Offline
А, речь же о папках, извиняюсь, спутал.  Есть команда которой можно выбрать директорию на диске, но при этом путь должен быть известен заранее (http://avrhelp.mcselec.com/index.html?chdir.htm). А вот считать названия папок на диске как не нашел. Подозреваю что просто не поддерживается такое sad   Хотя задумка интересная, если получится создать полноценную навигацию по диску, держи нас  в курсе smile

 
marss70Дата: Четверг, 15.09.2016, 13:08 | Сообщение # 9
Группа: Проверенные
Сообщений: 80

Статус: Offline
Ну вроде как уважаемый Radan посоветовал вот так:
'В одной папке не более 512 файлов!
Chdir "\"                                                   'Идём в корень диска
Chdir "Speech"                                          'Меняем директорию карты памяти на "Speech"
Chdir "."                                                   'На директорию выше
Chdir "Mine"                                              'Меняем директорию карты памяти на "Mine"
File_name = Str(mine) + "m.wav"               'полное имя файла из директории и краткого имени

Будем пробовать.




Сообщение отредактировал marss70 - Четверг, 15.09.2016, 13:09
 
marss70Дата: Четверг, 15.09.2016, 23:31 | Сообщение # 10
Группа: Проверенные
Сообщений: 80

Статус: Offline
Ну как-бы так... В цикле выводятся названия папок.

Код
$regfile = "m32def.dat"
$crystal = 16000000
$hwstack = 100
$swstack = 100
$framesize = 100

$include "Config_MMCSD_HC.bas"
$include "Config_AVR-DOS.BAS"

Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.4 , Rs = Portc.5
Cursor Off
Cls

Config Serialin = Buffered , Size = 20
Config Clock = Soft
Enable Interrupts
Config Date = Dmy , Separator = .

  Dim Имя_файла_str As String * 12
  Dim Имя_директории_str As String * 12
  Dim Счетчик_файлов As Word
  Dim Количество_найденных_файлов As Word
  Dim Количество_найденных_директорий As Word

Lcd "Test_Dos_Drive " ; Version()

Wait 1
Cls
'Dim Btemp1 As Byte
Lcd "Wait for Drive"
Wait 1
Cls
If Gbdriveerror = 0 Then
  ' Include AVR-DOS Configuration and library

Lcd "Init File System ... ";
Wait 1
Cls
  Btemp1 = Initfilesystem(1)                    ' Partition 1
                    ' use 0 for drive without Master boot record
  If Btemp1 <> 0 Then
Lcd "Error: " ; Btemp1 ; " at Init file system"
Wait 2
Cls

Else
Lcd " OK!"
Wait 1
Cls
End If
Else
   Lcd "Error during Drive Init: " ;
   Lowerline
   Lcd Gbdriveerror
   Wait 2
Cls
End If
Do
Имя_директории_str = Dir( "*.")                             ' Выбираем имя первого файла в каталоге
While Len(имя_директории_str) > 0                           ' Пока длина названия папки больше 0
' Выводим: имя файла
Lcd "Name Dir" ; " " ; Имя_директории_str
Waitms 2000
Cls
Имя_директории_str = Dir()                    ' Ищем дальше
Wend

Loop
End




Сообщение отредактировал marss70 - Четверг, 15.09.2016, 23:34
 
exersizzeДата: Пятница, 16.09.2016, 00:20 | Сообщение # 11
Группа: Администраторы
Сообщений: 723

Статус: Offline
тоесть Dir( "*.") возвращает имя первой папки?

 
marss70Дата: Пятница, 16.09.2016, 09:00 | Сообщение # 12
Группа: Проверенные
Сообщений: 80

Статус: Offline
Получается, что так. 
Сейчас буду думать, как выводить список папок на многострочном дисплее с функцией выбора папки и соответственно выбора файлов с выбранной папки. Добрые люди посоветовали посмотреть в сторону http://elektron.ucoz.ua/load....1-0-57 


 
  • Страница 1 из 1
  • 1
Поиск: