Untitled

 avatar
unknown
plain_text
25 days ago
1.6 kB
5
Indexable
Master

#include <SPI.h>

#define CS_PIN 5 // Chip Select pin

void setup() {
  Serial.begin(115200);

  // Initialize SPI as master
  SPI.begin();

  // Configure CS pin
  pinMode(CS_PIN, OUTPUT);
  digitalWrite(CS_PIN, HIGH);

  Serial.println("SPI Master Ready");
}

void loop() {
  byte dataToSend = 0x55; // Test data to send

  // Begin SPI transaction
  digitalWrite(CS_PIN, LOW); // Select the slave
  SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0)); // Match settings with slave

  byte receivedData = SPI.transfer(dataToSend); // Send and receive one byte

  SPI.endTransaction();
  digitalWrite(CS_PIN, HIGH); // Deselect the slave

  Serial.print("Sent: 0x");
  Serial.print(dataToSend, HEX);
  Serial.print(", Received: 0x");
  Serial.println(receivedData, HEX);

  delay(1000); // Send every second
}


Slave 


#include <SPI.h>

#define MISO_PIN 19
#define MOSI_PIN 23
#define SCLK_PIN 18
#define CS_PIN 5

volatile byte receivedData = 0; // Store received byte
volatile byte dataToSend = 0xAA; // Data to send back to master

void setup() {
  Serial.begin(115200);

  // Initialize SPI as a slave
  SPI.begin(MISO_PIN, SCLK_PIN, MOSI_PIN, CS_PIN);

  Serial.println("SPI Slave Ready");
}

void loop() {
  if (digitalRead(CS_PIN) == LOW) { // Check if CS is active
    while (digitalRead(CS_PIN) == LOW) { // While CS is low
      receivedData = SPI.transfer(dataToSend); // Exchange data with master
    }

    // Print received data after CS goes high
    Serial.print("Received: 0x");
    Serial.println(receivedData, HEX);
  }
}
Leave a Comment