#include <SPI.h> // dołączenie biblioteki SPI dla urządzenia master
byte dataToSend;
byte dataToReceive;
boolean blink = LOW;
void setup() {
  pinMode(8,OUTPUT); // miganie diody
  pinMode(10,OUTPUT); // ustawienie pinu wyboru urządzenia slave jako wyjścia na urządzeniu master
  digitalWrite(10, HIGH); // ustawienie wysokiego stanu na pinie wyboru urządzenia slave
  SPI.begin(); // uruchomienie komunikacji SPI
  Serial.begin(115200);
  delay(500); // zwłoka na inicjalizację dołączonych urządzeń
} // koniec setup
void loop() {
  while (Serial.available() > 0) {
    dataToSend = Serial.read(); // odczyt danych z portu szeregowego
    transferSPI(dataToSend); // wysłanie odebranego bajtu
  }
  digitalWrite(8, (blink = !blink));   // miganie diody LED oznaczające trwające połączenie
  delay(1000);  
} // koniec loop
byte transferSPI(byte dataToSend) {
  digitalWrite(10, LOW); // włączenie wyboru urządzenia slave
  delay(1); // urządzenie slave potrzebuje chwili na reakcję na spadek sygnału
  dataToReceive = SPI.transfer(dataToSend); // początek transmisji w pełnym dupleksie
  digitalWrite(10, HIGH); // wyłączenie wyboru urządzenia slave
   Serial.write(dataToSend); // wyświetlenie wysłanych danych
  Serial.println();
  Serial.write(dataToReceive); // wyświetlenie odebranego bajtu
  Serial.println();
} // koniec transferSPI
