Hello everyone,
So I have recently started using an external SRAM chip (23LC1024) which connects via SPI. Anyway i wanted to make my life a bit simpler as i intend on using it within a lot of projects and would like methods for easily storing integers and integer arrays (initially).
I thought I had struck gold when i managed to write the functions for reading and writing a single int
Additional lines in header fle
int read_int(long address);
int write_int(long address, int data_int);
Additional lines in cpp file
int SpiRAM::write_int(long address, int data_int)
{
_prepare(STREAM_MODE,WRITE,address);
SPI.transfer(data_int/256);
SPI.transfer(data_int%256);
disable();
return data_int;
}
int SpiRAM::read_int(long address)
{
int read_int;
_prepare(STREAM_MODE,READ,address);
read_int = SPI.transfer(0xFF)*256+SPI.transfer(0xFF);
disable();
return read_int;
}
Boom this works big pat on the back (First time ever trying to even modify a library never mind update one)
Anyway there is a big advantage time wise to put the device in stream mode once and then write a whole array so i thought i'll just modify it to accept an array... and this is where i am stuck.
header code
void read_ints(long address,int *data_int, long length);
void write_ints(long address,int *data_int, long length);
cpp code
void SpiRAM::write_ints(long address,int *data_int,long length)
{
long i;
_prepare(STREAM_MODE,WRITE,address);
for (i=0;i<length;i++){
SPI.transfer(data_int[i]/256);
SPI.transfer(data_int[i]%256);
}
disable();
}
void SpiRAM::read_ints(long address,int *data_int, long length)
{
int read_int;
long i;
_prepare(STREAM_MODE,READ,address);
for (i=0;i<length;i++){
read_int[i] = SPI.transfer(0xFF)*256+SPI.transfer(0xFF);
}
disable();
}
I followed the same principle as for the char arrays but I can't get it to work.
void SpiRAM::write_stream(long address, char *buffer, long length)
{
long i;
_prepare(STREAM_MODE,WRITE,address);
for (i = 0; i < length; i++) {
SPI.transfer(buffer[i]);
}
disable();
}
I always get this sort of errors
D:\Users\Dropbox\Arduino\libraries\SpiRAM\SpiRAM.cpp: In member function 'void SpiRAM::read_ints(long int, int*, long int)':
D:\Users\Dropbox\Arduino\libraries\SpiRAM\SpiRAM.cpp:167:15: error: invalid types 'int[long int]' for array subscript
Any suggestions?? (i'm sure i have been stumped by this problem before, or one similar but can never get my head round how to solve it)
note - be kind I only learnt c programming through messing around with arduinos. Mechanical Engineering student hah.
SpiRAM.zip (10.4 KB)