From [[http://www.gammon.com.au/spi|SPI - Serial Peripheral Interface - for Arduino]] by Nick Gammon. Modified to use the newish and preferred ''SPI.beginTransaction()'' and ''SPI.endTransaction()''. // Written by Nick Gammon // April 2011 // With Mithat Mods -- July 2023 #include void setup (void) { Serial.begin (115200); Serial.println (); digitalWrite(SS, HIGH); // ensure SS stays high for now // Put SCK, MOSI, SS pins into output mode // also put SCK, MOSI into LOW state, and SS into HIGH state. // Then put SPI hardware into Master mode and turn SPI on SPI.begin (); // Slow down the master a bit // SPI.setClockDivider(SPI_CLOCK_DIV8); // mithat: let's do this the preferred way } // end of setup byte transferAndWait (const byte what) { byte a = SPI.transfer (what); delayMicroseconds (20); return a; } // end of transferAndWait void loop (void) { byte a, b, c, d; SPI.beginTransaction(SPISettings(400000, MSBFIRST, SPI_MODE0)); // mithat: this is the preferred way // enable Slave Select digitalWrite(SS, LOW); transferAndWait ('a'); // add command transferAndWait (10); a = transferAndWait (17); b = transferAndWait (33); c = transferAndWait (42); d = transferAndWait (0); // disable Slave Select digitalWrite(SS, HIGH); SPI.endTransaction(); // mithat: finish preferred way Serial.println ("Adding results:"); Serial.println (a, DEC); Serial.println (b, DEC); Serial.println (c, DEC); Serial.println (d, DEC); // enable Slave Select digitalWrite(SS, LOW); transferAndWait ('s'); // subtract command transferAndWait (10); a = transferAndWait (17); b = transferAndWait (33); c = transferAndWait (42); d = transferAndWait (0); // disable Slave Select digitalWrite(SS, HIGH); Serial.println ("Subtracting results:"); Serial.println (a, DEC); Serial.println (b, DEC); Serial.println (c, DEC); Serial.println (d, DEC); delay (1000); // 1 second delay } // end of loop