Open INA0017 opened 6 months ago
#include <ESP32SPISlave.h>
ESP32SPISlave slave;
static constexpr uint8_t VSPI_SS{ SS };
#define SPI_Delay 15
#define FOC_Delay 300
#define buf 16
uint8_t tx_master_array[buf]{ 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 };
uint8_t rx_master_array[buf]{ 0 };
#define Normalization_buf 8
volatile int16_t array[Normalization_buf]{ 0 };
uint16_t Combbytes(uint16_t MB, uint16_t LB) {
return MB << 8 | LB;
}
int8_t SplitH(int16_t data) {
return highByte(data);
}
int8_t SplitL(int16_t data) {
return lowByte(data);
}
double round_2(double a) {
a *= 100;
a = round(a);
a /= 100;
return a;
}
void setup() {
xTaskCreateUniversal(FOC, "FOC", 8192, NULL, 1, NULL, 0);
Serial.begin(115200);
delay(2000);
slave.setDataMode(SPI_MODE0);
slave.begin(VSPI); // VSPI = CS: 5, CLK: 18, MOSI: 23, MISO: 19
}
void loop() {
slave.queue(rx_master_array, tx_master_array, buf);
Normalization();
while (slave.available()) {
memset(rx_master_array, 0, buf);
slave.pop();
}
delay(SPI_Delay);
// Serial.println(Serial.readStringUntil(' '));
}
void FOC(void* args) {
while (1) {
for (byte i = 0; i < buf; i++) {
Serial.print(rx_master_array[i]);
Serial.print(" ");
}
Serial.println();
for (byte i = 0; i < Normalization_buf; i++) {
Serial.print(array[i]);
Serial.print(" ");
}
Serial.println();
for(byte i = 0; i < Normalization_buf; i++){
FOCwrite('A'+ i, array[i]);
}
//Serial.println(Serial.readStringUntil(' '));
delay(FOC_Delay);
}
}
void Normalization() {
for (byte i = 0; i < Normalization_buf; i++) {
array[i] = Combbytes(rx_master_array[i * 2], rx_master_array[i * 2 + 1]);
}
}
void FOCwrite(byte select, float speed){
Serial.write(select);
Serial.print(speed);
Serial.print("\n");
}