mirror of
https://github.com/PotentiaRobotics/engine-software.git
synced 2025-04-09 23:00:21 -04:00
56 lines
1001 B
C++
56 lines
1001 B
C++
#include <SPI.h>
|
|
|
|
char buf [100];
|
|
volatile byte pos;
|
|
volatile bool process_it;
|
|
|
|
void setup (void)
|
|
{
|
|
Serial.begin (115200); // debugging
|
|
|
|
// turn on SPI in slave mode
|
|
SPCR |= bit (SPE);
|
|
|
|
// have to send on master in, *slave out*
|
|
pinMode (MISO, OUTPUT);
|
|
|
|
// get ready for an interrupt
|
|
pos = 0; // buffer empty
|
|
process_it = false;
|
|
|
|
// now turn on interrupts
|
|
SPI.attachInterrupt();
|
|
|
|
} // end of setup
|
|
|
|
|
|
// SPI interrupt routine
|
|
ISR (SPI_STC_vect)
|
|
{
|
|
byte c = SPDR; // grab byte from SPI Data Register
|
|
|
|
// add to buffer if room
|
|
if (pos < sizeof buf)
|
|
{
|
|
buf [pos++] = c;
|
|
|
|
// example: newline means time to process buffer
|
|
if (c == '\n')
|
|
process_it = true;
|
|
|
|
} // end of room available
|
|
} // end of interrupt routine SPI_STC_vect
|
|
|
|
// main loop - wait for flag set in interrupt routine
|
|
void loop (void)
|
|
{
|
|
if (process_it)
|
|
{
|
|
buf [pos] = 0;
|
|
Serial.println (buf);
|
|
pos = 0;
|
|
process_it = false;
|
|
} // end of flag set
|
|
|
|
} // end of loop
|