diff --git a/SPI/slave/slave.ino b/SPI/slave/slave.ino index 3eea426..53586bb 100644 --- a/SPI/slave/slave.ino +++ b/SPI/slave/slave.ino @@ -1,5 +1,6 @@ #include #include +#include #define DDR_SPI DDRB #define DD_MOSI PB3 @@ -7,6 +8,7 @@ #define DD_SCK PB5 #define DD_SS PB2 +GyverOLED oled; static int index = 0; static int arIndex = 0; @@ -34,35 +36,42 @@ ISR(SPI_STC_vect) void setup() { Serial.begin(2000000); + oled.init(); // инициализация + oled.clear(); // очистка + SPI_SlaveInit(); Serial.println(); Serial.println("Initialization "); } void SetCommand(byte *data2){ - byte command = data2[0]; - // Отрезать 1 элемент от оставшихся - byte result[index]; - byte *ptr = &data2[1]; - strcpy(result, ptr); - Serial.print("\nReceived command: "); - Serial.println(command); - switch (command){ - case 6: - AddSymbol(result); - break; + // oled.clear(); + byte command = data2[0]; + // Отрезать 1 элемент от оставшихся + byte result[index]; + byte *ptr = &data2[1]; + strcpy(result, ptr); + Serial.print("\nReceived command: "); + Serial.println(command); + switch (command){ + case 6: + AddSymbol(result); + break; - } + } } void AddSymbol(byte *symbols){ - Serial.print("Received Add: "); - - for(int i = 0; i < index - 1; i++) { - Serial.print(symbols[i]); - Serial.print(" "); - } + Serial.print("Received Add: "); + + // _delay_ms(1000); + for(int i = 0; i < index - 1; i++) { + Serial.print(symbols[i]); + Serial.print(" "); + oled.println(symbols[i]); + } + Serial.println(); } @@ -75,6 +84,7 @@ 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-1); - // byte last = data[index - 1]; - // Serial.println(); - // Serial.println("--------------"); - // Serial.print("\n Last: "); - // Serial.print(last); - // Serial.print("\t Sum: "); - // Serial.println(calculatedChecksum); - - // if (last != calculatedChecksum) - // { - // Serial.println("\n -----Invalid Checksum!---"); - // SPDR = calculatedChecksum; - // index = 0; - // return; - // } - - //SetCommand(data); if (arIndex == 0){ arIndex = 1; memcpy(ar1,data,5); @@ -121,18 +123,74 @@ void loop() { } } 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("Стоп вывода массивов"); + + //arrayOut(ar1,5); + int lenght = 5; + sum = calculateXORChecksum(ar1, lenght); + bool checkNull = false; + //oled.clear(); + byte last_1 = ar1[index - 1]; + if (last_1 == sum) + { + Serial.println(); + Serial.println("Старт вывода массивов"); + Serial.println(sum); + checkNull = checkArray(ar1, lenght); + if(checkNull == true) + { + //oled.home(); // курсор в 0,0 + //oled.setScale(3); // масштаб текста (1..4) + + SetCommand(ar1); + + } + + Serial.println("Стоп вывода массивов"); + index = 0; + return; + } + + //arrayOut(ar2,5); + sum = calculateXORChecksum(ar2, lenght); + + byte last_2 = ar2[index - 1]; + if (last_2 == sum) + { + Serial.println(); + Serial.println("Старт вывода массивов"); + Serial.println(sum); + checkNull = checkArray(ar2, lenght); + if(checkNull == true) + { + SetCommand(ar2); + } + + Serial.println("Стоп вывода массивов"); + index = 0; + return; + } + + //arrayOut(ar3,5); + sum = calculateXORChecksum(ar3, lenght); + + byte last_3 = ar3[index - 1]; + if (last_3 == sum) + { + Serial.println(); + Serial.println("Старт вывода массивов"); + Serial.println(sum); + checkNull = checkArray(ar3, lenght); + if(checkNull == true) + { + SetCommand(ar3); + } + + Serial.println("Стоп вывода массивов"); + index = 0; + return; + } + + Serial.println("Nothing ..."); index=0; } }