Untitled
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