#include <ESP32SPISlave.h>
/** Custom test. The function will be called many times during the test, till You issue "x" menu-command.
*/
void RobotMaze::loop() {
static ESP32SPISlave slave;
static constexpr uint32_t BUFFER_SIZE {32};
static uint8_t txBuffer[BUFFER_SIZE];
static uint8_t rxBuffer[BUFFER_SIZE];
if (setup()){
slave.setDataMode(SPI_MODE0);
slave.begin();
}
// block until the transaction comes from master
slave.wait(rxBuffer, txBuffer, BUFFER_SIZE);
// if transaction has completed from master,
// available() returns size of results of transaction,
// and buffer is automatically updated
while (slave.available()) {
// show received data
print("Received: %i\n\r", rxBuffer[0]);
slave.pop();
}
}
Slave dio čeka poruku koju šalje master.
"txBuffer" i "rxBuffer" su polja koja šalju i primaju podatke.
Trebaju 2 jer slave istovremeno šalje i prima podatke.
U ovom se primjeru koristi samo primanje.
Prilikom prvog prolaza kroz funkciju, postavljamo tip prijenosa putem "setDataMode".
Postoje 4 načina, ali nije bitno koji izaberemo, sve dok isti koriste i master i slave.
"begin" pokreće SPI slave.
Nakon toga dolazi dio koji se izvršava u svakom prolazu, počevši s "wait".
Riječ je o "polling" načinu rada, gdje program stane i čeka dolazak poruke.
Ovo je najneefikasniji način rada, ali za naš primjer je dovoljno dobar.
Nakon što stigne SPI poruka, "wait" prestane blokirati izvršavanje i program krene dalje.
Sve dok je "available", znači ima podataka, ispisujemo prvi bajt i izbacujemo ga ulaznog repa pomoću "pop".