I recently read two great tutorials from gadget gangster on how to write to and read from SD card. Now this is great if you want to write pre-set text. But doesn't work out so well if you want to send text that is writen as the chip is running. This code shows a simple "word processer" that can write to, append, read and delete a single file using the Parallax Serial Terminal. Please comment with any questions.
Instructions:
- My DO, CLK, DI and CS are set for the Gadget Gangster Propeller Platform USB, you may need to set them to modify them
- the byte "text" is set to 1000 characters. You may need to add more for your desired document length
- You may want to read up on the object it uses before modifying the code
For now, I have to type out the code (It can't be attatched). Any other sugestions are welcome. Enjoy:
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CON
_clkmode = xtal1 + pll16x
_xinfreq = 5_000_000
DO = 0
CLK = 1
DI = 2
CS = 3
VAR
byte text[1000]
OBJ
sdfat : "fsrw"
pst : "parallax serial terminal"
PUB Initiate | mount
pst.start(115_200)
waitcnt(clkfreq*4 + cnt)
mount := \sdfat.mount_explicit(DO, CLK, DI, CS)
if mount < 0
pst.str(string("Failed to mount", 13))
abort
pst.str(string("SD card was found and mounted successfully!", 13))
pst.str(string("you have four basic options to edit the file - test.txt:", 13, 13, "write", 13, "append", 13, "read", 13, "delete", 13, 13))
getcode
PUB getcode
bytefill(@text, 0, 1000)
pst.newline
pst.StrIn(@text)
RW
PUB RW | counter, r
if strcomp(@text, string("write"))
bytefill(@text, 0, 1000)
sdfat.popen(string("test.txt"), "w")
pst.str(string("Text to write:", 13))
pst.strin(@text)
sdfat.pputs(@text)
sdfat.pputs(string(13, 10))
sdfat.pclose
pst.str(string("you wrote: "))
pst.str(@text)
pst.newline
getcode
if strcomp(@text, string("append"))
bytefill(@text, 0, 1000)
sdfat.popen(string("test.txt"), "a")
pst.str(string("Text to add:", 13))
pst.strin(@text)
sdfat.pputs(@text)
sdfat.pputs(string(13, 10))
sdfat.pclose
pst.str(string("you added: "))
pst.str(@text)
pst.newline
getcode
if strcomp(@text, string("delete"))
bytefill(@text, 0, 1000)
sdfat.popen(string("test.txt"), "d")
pst.str(string("File has been deleted", 13))
sdfat.pclose
getcode
if strcomp(@text, string("read"))
bytefill(@text, 0, 1000)
pst.str(string("Text from file:", 13))
sdfat.popen(string("test.txt"), "r")
counter := 0
repeat
r := sdfat.pgetc
if r < 0
pst.newline
quit
if r == 44 or r == 13
pst.str(@text)
pst.newline
bytefill(@text, 0, 1000)
counter := 0
if r > 44
text[counter] := text[counter] + r
counter++
sdfat.pclose
pst.str(string("end of file has been reached, now closing", 13))
getcode
if strcomp(@text, string("end"))
pst.str(string(13, "now terminating program"))
sdfat.unmount
abort
getcode