#include // SPI Pins int SS = 12 ; // Active Low Slave Select int SCLK = 11 ; // SPI Clock Signal int DATA = 10 ; // SPI Data Line (Master Out Slave In) int led = 13; // received value byte received[] = {0, 0}; void setup() { // Define D12 , D11 , D10 as Input (SS' CLK MOSI) for software SPI pinMode(SS,INPUT); pinMode(SCLK,INPUT); pinMode(DATA,INPUT); pinMode(led, OUTPUT); digitalWrite(led, LOW ) ; } void loop() { // Master have selected me and initiated SPI communication if( digitalRead(SS) == LOW ) { listen(); // If the received byte is hexadecimal 0xEEFF, the LED at pin 13 should go on. if ((received[0] == byte(0xEE)) && (received[1] == byte(0xFF))) { digitalWrite(led, HIGH); } else if ((received[0] == byte(0x10)) && (received[1] == byte(0x01))) digitalWrite(led, LOW); } } void listen() { byte temp; int i = 0, j = 0; temp = 0; for( i = 0 ; i < 2 ; i++) { // the clock did not start yet so wait while( (digitalRead(SCLK) == HIGH) ) ; for(j = 0 ; j < 8 ; j++) { temp <<= 1; temp &= 0xFE; //Clock is low , wait while( digitalRead(SCLK) == LOW) ; // clock is High : read data if(digitalRead(DATA) == HIGH) temp |= 0x01; while( digitalRead(SCLK) == HIGH && digitalRead(SS) == LOW ) ; } received[i] = temp; } }