From 3827d85437ca6b3608cb9a442d6b6ef89dae205c Mon Sep 17 00:00:00 2001 From: Soundflog Date: Mon, 17 Apr 2023 17:57:11 +0300 Subject: [PATCH] 4 massive sending --- SPI/{ => master}/master.ino | 43 +++++++++++++++++++++++++----- SPI/{ => slave}/slave.ino | 53 ++++++++++++++++++++++++++++++++----- 2 files changed, 82 insertions(+), 14 deletions(-) rename SPI/{ => master}/master.ino (73%) rename SPI/{ => slave}/slave.ino (61%) diff --git a/SPI/master.ino b/SPI/master/master.ino similarity index 73% rename from SPI/master.ino rename to SPI/master/master.ino index 56c9dd2..008dfab 100644 --- a/SPI/master.ino +++ b/SPI/master/master.ino @@ -25,13 +25,26 @@ void Print(byte *data2, int lenght){ void SPI_MasterTransmit(char *data, int length) { + PORTB &= ~(1<<2); + // Serial.println(); + int size = sizeof(data) / sizeof(data[0]); + + if (data[size - 1] == SPDR){ + Serial.println("Privet") ; + } byte check = 0; byte spdr[length]; + Serial.println(); for(int i = 0; i < length; i++) { SPDR = data[i]; // отправляем байт массива + Serial.print(data[i], HEX); + Serial.print(" "); while (!(SPSR & (1 << SPIF))); // ждем, пока байт передастся } + PORTB |= (1<<2); + + // Print(spdr, length); // return check; // //ждем, пока придет контрольная сумма @@ -69,8 +82,8 @@ byte calculateXORChecksum(byte *data, int length) { void loop() { - char data[5] = {6, 1, 2, 8, 0}; - PORTB &= ~(1<<2); + char data[5] = {6, 1, 3, 8, 0}; + int length = sizeof(data); const int last = data [ (sizeof(data) / sizeof(data[0]))-1]; @@ -81,11 +94,27 @@ void loop() // Serial.println(last); SPI_MasterTransmit(data, length); - _delay_ms(200); - PORTB |= (1<<2); - Serial.println("Sent"); - // Serial.print(sum); - _delay_ms(2000); + _delay_ms(1000); + + char data2[5] = {6, 9, 7, 10, 0}; + int length2 = sizeof(data2); + const int last2 = data2 [ (sizeof(data2) / sizeof(data2[0]))-1]; + byte checking2 = calculateXORChecksum(data2, length2); + int size2 = sizeof(data2) / sizeof(data2[0]); + data2[size2 - 1] = checking2; + SPI_MasterTransmit(data2, length2); + + _delay_ms(1000); + + char data3[5] = {6, 11, 12, 13, 0}; + int length3 = sizeof(data3); + const int last3 = data3 [ (sizeof(data3) / sizeof(data3[0]))-1]; + byte checking3 = calculateXORChecksum(data3, length3); + int size3 = sizeof(data3) / sizeof(data3[0]); + data3[size3 - 1] = checking3; + SPI_MasterTransmit(data3, length3); + + _delay_ms(1000); // ожидаем ответа // while (!(SPSR & (1 << SPIF))); // byte response = SPDR; diff --git a/SPI/slave.ino b/SPI/slave/slave.ino similarity index 61% rename from SPI/slave.ino rename to SPI/slave/slave.ino index 27ece8c..3eea426 100644 --- a/SPI/slave.ino +++ b/SPI/slave/slave.ino @@ -9,7 +9,12 @@ static int index = 0; +static int arIndex = 0; static byte data[255]; +static byte ar1[5]; +static byte ar2[5]; +static byte ar3[5]; + void SPI_SlaveInit(void) @@ -28,8 +33,9 @@ ISR(SPI_STC_vect) void setup() { - Serial.begin(9600); + Serial.begin(2000000); SPI_SlaveInit(); + Serial.println(); Serial.println("Initialization "); } @@ -42,7 +48,6 @@ void SetCommand(byte *data2){ Serial.print("\nReceived command: "); Serial.println(command); switch (command){ - case 6: AddSymbol(result); break; @@ -54,7 +59,7 @@ void SetCommand(byte *data2){ void AddSymbol(byte *symbols){ Serial.print("Received Add: "); - for(int i = 0; i < index-1; i++) { + for(int i = 0; i < index - 1; i++) { Serial.print(symbols[i]); Serial.print(" "); } @@ -70,12 +75,21 @@ byte calculateXORChecksum(byte *data, int length) { return checksum; } +void arrayOut(byte *arr,int size){ + Serial.print("Array: "); + for(int i = 0;i 0) { - // byte calculatedChecksum = calculateXORChecksum(data, index); + // byte calculatedChecksum = calculateXORChecksum(data, index-1); // byte last = data[index - 1]; // Serial.println(); // Serial.println("--------------"); @@ -84,16 +98,41 @@ void loop() { // Serial.print("\t Sum: "); // Serial.println(calculatedChecksum); - // // SPDR = calculatedChecksum; + // if (last != calculatedChecksum) // { // Serial.println("\n -----Invalid Checksum!---"); - + // SPDR = calculatedChecksum; // index = 0; // return; // } - SetCommand(data); + //SetCommand(data); + if (arIndex == 0){ + arIndex = 1; + memcpy(ar1,data,5); + }else{ + if(arIndex == 1){ + arIndex = 2; + memcpy(ar2,data,5); + }else{ + arIndex = 0; + memcpy(ar3,data,5); + } + } + byte sum = 0; + Serial.println(); + Serial.println("Старт вывода массивов"); + arrayOut(ar1,5); + sum = calculateXORChecksum(ar1,5); + Serial.println(sum); + arrayOut(ar2,5); + sum = calculateXORChecksum(ar2,5); + Serial.println(sum); + arrayOut(ar3,5); + sum = calculateXORChecksum(ar3,5); + Serial.println(sum); + Serial.println("Стоп вывода массивов"); index=0; } }