#include "SPI.h"
#define LED 13
#define ipbutton 2
int buttonvalue;
int x;
void setup () {
pinMode(ipbutton, INPUT);
pinMode(LED, OUTPUT);
SPI.begin();
SPI.setClockDivider(SPI_CLOCK_DIV8);
digitalWrite(SS, HIGH);
}
void loop() {
byte Mastersend, Mastereceive;
buttonvalue = digitalRead(ipbutton);
if(buttonvalue == HIGH) { x = 1; }
else { x = 0; }
digitalWrite(SS, LOW);
Mastersend = x;
Mastereceive = SPI.transfer(Mastersend);
if(Mastereceive == 1) { digitalWrite(LED, HIGH); }
else { digitalWrite(LED, LOW); }
delay(100);
}
Скетч для ведомой платы SPI Arduino Uno (slave)
#include "SPI.h"
#define LEDpin 13
#define buttonpin 2
volatile boolean received;
volatile byte Slavereceived,Slavesend;
int buttonvalue;
int x;
void setup() {
pinMode(buttonpin, INPUT);
pinMode(LEDpin, OUTPUT);
pinMode(MISO, OUTPUT);
SPCR |= _BV(SPE);
received = false;
SPI.attachInterrupt();
}
ISR (SPI_STC_vect) {
Slavereceived = SPDR;
received = true;
}
void loop() {
if(received) {
if (Slavereceived==1) { digitalWrite(LEDpin, HIGH); }
else { digitalWrite(LEDpin, LOW); }
buttonvalue = digitalRead(buttonpin);
if (buttonvalue == HIGH) { x=1; }
else { x=0; }
Slavesend=x;
SPDR = Slavesend;
delay(100);
}
}