Помогите оптимизировать код
- Войдите на сайт для отправки комментариев
Втр, 19/05/2015 - 09:16
Собираю считыватель данных с дисплея магитолы и вывод в инфы в сериал. Протокол 3wire, похож на spi. Инфу выводит но не хватает памяти для еще символов. Я только учусь и мало понимаю в программировании, помогите пожалуйста. Вот код:
#include <SPI.h> #include <SoftwareSerial.h> SoftwareSerial mySerial(8, 9); byte MyBuff [36]; volatile byte pos; volatile boolean process_it; byte t; byte z; long R1; long R2; long R3; long R4; long R5; long R6; long R7; long R8; long R9; long R10; long R11; void setup () { Serial.begin (115200); mySerial.begin(115200); pinMode(MISO, OUTPUT); SPI.setDataMode(SPI_MODE3); SPI.setBitOrder(MSBFIRST); SPI.setClockDivider(SPI_CLOCK_DIV4); SPI.attachInterrupt(); SPCR |= _BV(SPE); pos = 0; process_it = false; } ISR (SPI_STC_vect) { byte c = SPDR; if (pos < sizeof MyBuff) { MyBuff [pos++] = c; process_it = true; } } void loop () { if (process_it) { MyBuff [pos] = 0; for (int i=0; i <= 35; i++) { if (i<=34) { if (MyBuff[i]<=15) { Serial.print("0"); Serial.print(MyBuff[i], HEX); Serial.print(" "); } else { Serial.print(MyBuff[i], HEX); Serial.print(" "); } } else { if (MyBuff[i]<=15) { Serial.print("0"); Serial.println(MyBuff[i], HEX); } else Serial.println(MyBuff[i], HEX); } } DISP (); DATA (); pos = 0; } process_it = false; } void DATA () { bitWrite(t, 1, bitRead(MyBuff[17], 4));// ЗÐÐК " : " МЕЖДУ 4 И 5 Ð ÐЗРЯДОМ bitWrite(t, 0, bitRead(MyBuff[17], 3));// ЗÐÐК " . " МЕЖДУ 4 И 5 Ð ÐЗРЯДОМ bitWrite(z, 1, bitRead(MyBuff[26], 4));// ЗÐÐК " > " Ð’ КОÐЦЕ ПОЛЯ bitWrite(z, 0, bitRead(MyBuff[26], 0)); // ЗÐÐК " z " Ð’ КОÐЦЕ ПОЛЯ bitWrite(R1, 15, bitRead(MyBuff[26], 7)); bitWrite(R1, 14, bitRead(MyBuff[26], 6)); bitWrite(R1, 13, bitRead(MyBuff[26], 5)); // bitWrite(R1, 12, bitRead(MyBuff[26], 4));// ЗÐÐК " > " Ð’ КОÐЦЕ ПОЛЯ bitWrite(R1, 11, bitRead(MyBuff[26], 3)); bitWrite(R1, 10, bitRead(MyBuff[26], 2)); bitWrite(R1, 9, bitRead(MyBuff[26], 1)); // bitWrite(R1, 8, bitRead(MyBuff[26], 0)); // ЗÐÐК " z " Ð’ КОÐЦЕ ПОЛЯ bitWrite(R1, 7, bitRead(MyBuff[25], 3)); bitWrite(R1, 6, bitRead(MyBuff[25], 2)); bitWrite(R1, 5, bitRead(MyBuff[25], 1)); bitWrite(R1, 4, bitRead(MyBuff[25], 0)); bitWrite(R1, 3, bitRead(MyBuff[25], 7)); bitWrite(R1, 2, bitRead(MyBuff[25], 6)); bitWrite(R1, 1, bitRead(MyBuff[25], 5)); // bitWrite(R1, 0, bitRead(MyBuff[25], 4)); bitWrite(R2, 15, bitRead(MyBuff[24], 7)); bitWrite(R2, 14, bitRead(MyBuff[24], 6)); bitWrite(R2, 13, bitRead(MyBuff[24], 5)); // bitWrite(R2, 12, bitRead(MyBuff[24], 4)); bitWrite(R2, 11, bitRead(MyBuff[24], 3)); bitWrite(R2, 10, bitRead(MyBuff[24], 2)); bitWrite(R2, 9, bitRead(MyBuff[24], 1)); // bitWrite(R2, 8, bitRead(MyBuff[24], 0)); bitWrite(R2, 7, bitRead(MyBuff[22], 7)); bitWrite(R2, 6, bitRead(MyBuff[22], 6)); bitWrite(R2, 5, bitRead(MyBuff[22], 5)); bitWrite(R2, 4, bitRead(MyBuff[22], 4)); bitWrite(R2, 3, bitRead(MyBuff[21], 3)); bitWrite(R2, 2, bitRead(MyBuff[21], 2)); bitWrite(R2, 1, bitRead(MyBuff[21], 1)); // bitWrite(R2, 0, bitRead(MyBuff[21], 0)); bitWrite(R3, 15, bitRead(MyBuff[20], 3)); bitWrite(R3, 14, bitRead(MyBuff[20], 2)); bitWrite(R3, 13, bitRead(MyBuff[20], 1)); // bitWrite(R3, 12, bitRead(MyBuff[20], 0));// ÐÐДПИСЬ " LOUD " bitWrite(R3, 11, bitRead(MyBuff[21], 7)); bitWrite(R3, 10, bitRead(MyBuff[21], 6)); bitWrite(R3, 9, bitRead(MyBuff[21], 5)); // bitWrite(R3, 8, bitRead(MyBuff[21], 4)); bitWrite(R3, 7, bitRead(MyBuff[20], 7)); bitWrite(R3, 6, bitRead(MyBuff[20], 6)); bitWrite(R3, 5, bitRead(MyBuff[20], 5)); bitWrite(R3, 4, bitRead(MyBuff[20], 4)); bitWrite(R3, 3, bitRead(MyBuff[19], 3)); bitWrite(R3, 2, bitRead(MyBuff[19], 2)); bitWrite(R3, 1, bitRead(MyBuff[19], 1)); // bitWrite(R3, 0, bitRead(MyBuff[19], 0)); bitWrite(R4, 15, bitRead(MyBuff[18], 3)); bitWrite(R4, 14, bitRead(MyBuff[18], 2)); bitWrite(R4, 13, bitRead(MyBuff[18], 1)); // bitWrite(R4, 12, bitRead(MyBuff[18], 0)); bitWrite(R4, 11, bitRead(MyBuff[19], 7)); bitWrite(R4, 10, bitRead(MyBuff[19], 6)); bitWrite(R4, 9, bitRead(MyBuff[19], 5)); // bitWrite(R4, 8, bitRead(MyBuff[19], 4)); bitWrite(R4, 7, bitRead(MyBuff[18], 7)); bitWrite(R4, 6, bitRead(MyBuff[18], 6)); bitWrite(R4, 5, bitRead(MyBuff[18], 5)); bitWrite(R4, 4, bitRead(MyBuff[18], 4)); bitWrite(R4, 3, bitRead(MyBuff[17], 2)); bitWrite(R4, 2, bitRead(MyBuff[17], 1)); bitWrite(R4, 1, bitRead(MyBuff[17], 0)); // bitWrite(R4, 0, bitRead(MyBuff[17], 3));// ЗÐÐК " . " МЕЖДУ 4 И 5 Ð ÐЗРЯДОМ bitWrite(R5, 15, bitRead(MyBuff[16], 3)); bitWrite(R5, 14, bitRead(MyBuff[16], 2)); bitWrite(R5, 13, bitRead(MyBuff[16], 1)); // bitWrite(R5, 12, bitRead(MyBuff[16], 0)); bitWrite(R5, 11, bitRead(MyBuff[17], 7)); bitWrite(R5, 10, bitRead(MyBuff[17], 6)); bitWrite(R5, 9, bitRead(MyBuff[17], 5)); // bitWrite(R5, 8, bitRead(MyBuff[17], 4));// ЗÐÐК " : " МЕЖДУ 4 И 5 Ð ÐЗРЯДОМ bitWrite(R5, 7, bitRead(MyBuff[16], 7)); bitWrite(R5, 6, bitRead(MyBuff[16], 6)); bitWrite(R5, 5, bitRead(MyBuff[16], 5)); bitWrite(R5, 4, bitRead(MyBuff[16], 4)); bitWrite(R5, 3, bitRead(MyBuff[15], 3)); bitWrite(R5, 2, bitRead(MyBuff[15], 2)); bitWrite(R5, 1, bitRead(MyBuff[15], 1)); // bitWrite(R5, 0, bitRead(MyBuff[15], 0));// ÐÐДПИСЬ " TP " bitWrite(R6, 15, bitRead(MyBuff[14], 3)); bitWrite(R6, 14, bitRead(MyBuff[14], 2)); bitWrite(R6, 13, bitRead(MyBuff[14], 1)); // bitWrite(R6, 12, bitRead(MyBuff[14], 0)); bitWrite(R6, 11, bitRead(MyBuff[15], 7)); bitWrite(R6, 10, bitRead(MyBuff[15], 6)); bitWrite(R6, 9, bitRead(MyBuff[15], 5)); // bitWrite(R6, 8, bitRead(MyBuff[15], 4));// ÐÐДПИСЬ " AF " bitWrite(R6, 7, bitRead(MyBuff[14], 7)); bitWrite(R6, 6, bitRead(MyBuff[14], 6)); bitWrite(R6, 5, bitRead(MyBuff[14], 5)); bitWrite(R6, 4, bitRead(MyBuff[14], 4)); bitWrite(R6, 3, bitRead(MyBuff[13], 3)); bitWrite(R6, 2, bitRead(MyBuff[13], 2)); bitWrite(R6, 1, bitRead(MyBuff[13], 1)); // bitWrite(R6, 0, bitRead(MyBuff[13], 0)); bitWrite(R7, 15, bitRead(MyBuff[12], 3)); bitWrite(R7, 14, bitRead(MyBuff[12], 2)); bitWrite(R7, 13, bitRead(MyBuff[12], 1)); // bitWrite(R7, 12, bitRead(MyBuff[12], 0));// ? bitWrite(R7, 11, bitRead(MyBuff[13], 7)); bitWrite(R7, 10, bitRead(MyBuff[13], 6)); bitWrite(R7, 9, bitRead(MyBuff[13], 5)); // bitWrite(R7, 8, bitRead(MyBuff[13], 4));// ÐÐДПИСЬ " " bitWrite(R7, 7, bitRead(MyBuff[12], 7)); bitWrite(R7, 6, bitRead(MyBuff[12], 6)); bitWrite(R7, 5, bitRead(MyBuff[12], 5)); bitWrite(R7, 4, bitRead(MyBuff[12], 4)); bitWrite(R7, 3, bitRead(MyBuff[8], 3)); bitWrite(R7, 2, bitRead(MyBuff[8], 2)); bitWrite(R7, 1, bitRead(MyBuff[8], 1)); // bitWrite(R7, 0, bitRead(MyBuff[8], 0));// ? bitWrite(R8, 15, bitRead(MyBuff[7], 3)); bitWrite(R8, 14, bitRead(MyBuff[7], 2)); bitWrite(R8, 13, bitRead(MyBuff[7], 1)); // bitWrite(R8, 12, bitRead(MyBuff[7], 0));// ? bitWrite(R8, 11, bitRead(MyBuff[8], 7)); bitWrite(R8, 10, bitRead(MyBuff[8], 6)); bitWrite(R8, 9, bitRead(MyBuff[8], 5)); // bitWrite(R8, 8, bitRead(MyBuff[8], 4));// ÐÐДПИСЬ " ST " bitWrite(R8, 7, bitRead(MyBuff[7], 7)); bitWrite(R8, 6, bitRead(MyBuff[7], 6)); bitWrite(R8, 5, bitRead(MyBuff[7], 5)); bitWrite(R8, 4, bitRead(MyBuff[7], 4)); bitWrite(R8, 3, bitRead(MyBuff[6], 3)); bitWrite(R8, 2, bitRead(MyBuff[6], 2)); bitWrite(R8, 1, bitRead(MyBuff[6], 1)); // bitWrite(R8, 0, bitRead(MyBuff[6], 0));// ? bitWrite(R9, 15, bitRead(MyBuff[5], 3)); bitWrite(R9, 14, bitRead(MyBuff[5], 2)); bitWrite(R9, 13, bitRead(MyBuff[5], 1)); // bitWrite(R9, 12, bitRead(MyBuff[5], 0));// ? bitWrite(R9, 11, bitRead(MyBuff[6], 7)); bitWrite(R9, 10, bitRead(MyBuff[6], 6)); bitWrite(R9, 9, bitRead(MyBuff[6], 5)); // bitWrite(R9, 8, bitRead(MyBuff[6], 4));// ÐÐДПИСЬ " " bitWrite(R9, 7, bitRead(MyBuff[5], 7)); bitWrite(R9, 6, bitRead(MyBuff[5], 6)); bitWrite(R9, 5, bitRead(MyBuff[5], 5)); bitWrite(R9, 4, bitRead(MyBuff[5], 4)); bitWrite(R9, 3, bitRead(MyBuff[4], 3)); bitWrite(R9, 2, bitRead(MyBuff[4], 2)); bitWrite(R9, 1, bitRead(MyBuff[4], 1)); // bitWrite(R9, 0, bitRead(MyBuff[4], 0));// ? bitWrite(R10, 15, bitRead(MyBuff[3], 3)); bitWrite(R10, 14, bitRead(MyBuff[3], 2)); bitWrite(R10, 13, bitRead(MyBuff[3], 1)); // bitWrite(R10, 12, bitRead(MyBuff[3], 0));// ? bitWrite(R10, 11, bitRead(MyBuff[4], 7)); bitWrite(R10, 10, bitRead(MyBuff[4], 6)); bitWrite(R10, 9, bitRead(MyBuff[4], 5)); // bitWrite(R10, 8, bitRead(MyBuff[4], 4));// ÐÐДПИСЬ " " bitWrite(R10, 7, bitRead(MyBuff[3], 7)); bitWrite(R10, 6, bitRead(MyBuff[3], 6)); bitWrite(R10, 5, bitRead(MyBuff[3], 5)); bitWrite(R10, 4, bitRead(MyBuff[3], 4)); bitWrite(R10, 3, bitRead(MyBuff[27], 7)); bitWrite(R10, 2, bitRead(MyBuff[27], 6)); bitWrite(R10, 1, bitRead(MyBuff[27], 5)); // bitWrite(R10, 0, bitRead(MyBuff[27], 4));// ? bitWrite(R11, 15, bitRead(MyBuff[28], 7)); bitWrite(R11, 14, bitRead(MyBuff[28], 6)); bitWrite(R11, 13, bitRead(MyBuff[28], 5)); // bitWrite(R11, 12, bitRead(MyBuff[28], 4));// ? bitWrite(R11, 11, bitRead(MyBuff[27], 3)); bitWrite(R11, 10, bitRead(MyBuff[27], 2)); bitWrite(R11, 9, bitRead(MyBuff[27], 1)); // bitWrite(R11, 8, bitRead(MyBuff[27], 0));// ÐÐДПИСЬ " " bitWrite(R11, 7, bitRead(MyBuff[28], 3)); bitWrite(R11, 6, bitRead(MyBuff[28], 2)); bitWrite(R11, 5, bitRead(MyBuff[28], 1)); bitWrite(R11, 4, bitRead(MyBuff[28], 0)); bitWrite(R11, 3, bitRead(MyBuff[29], 7)); bitWrite(R11, 2, bitRead(MyBuff[29], 6)); bitWrite(R11, 1, bitRead(MyBuff[29], 5)); // bitWrite(R11, 0, bitRead(MyBuff[29], 4));// ? } void T () { if (t == 0x01) mySerial.print("."); if (t == 0x02) mySerial.print(":"); } void Z () { if (z == 0x01) mySerial.print("z"); if (z == 0x02) mySerial.print(">"); } void DATA1 () { if (R1 == 0x8A9A) mySerial.print("Q"); if (R1 == 0x204A) mySerial.print("V"); if (R1 == 0x2040) mySerial.print("/"); if (R1 == 0x61E) mySerial.print("P"); if (R1 == 0xA88) mySerial.print("J"); if (R1 == 0x4E90) mySerial.print("B"); if (R1 == 0xA060) mySerial.print("X"); if (R1 == 0xE86) mySerial.print("Y"); if (R1 == 0xA8A) mySerial.print("U"); if (R1 == 0xCB0) mySerial.print("S"); if (R1 == 0xE0E) mySerial.print("H"); if (R1 == 0xC9A) mySerial.print("G"); if (R1 == 0xE1E) mySerial.print("A"); if (R1 == 0xA9A) mySerial.print("O"); if (R1 == 0xA00E) mySerial.print("K"); if (R1 == 0x9A) mySerial.print("C"); if (R1 == 0x4A90) mySerial.print("D"); if (R1 == 0x2A2A) mySerial.print("M"); if (R1 == 0x4010) mySerial.print("T"); if (R1 == 0x4090) mySerial.print("I"); if (R1 == 0x41E) mySerial.print("F"); if (R1 == 0x861E) mySerial.print("R"); if (R1 == 0x49E) mySerial.print("E"); if (R1 == 0x8A) mySerial.print("L"); if (R1 == 0x8A2A) mySerial.print("N"); if (R1 == 0x8000) mySerial.print(","); if (R1 == 0x404) mySerial.print("-"); if (R1 == 0x2ADA) mySerial.print("0"); if (R1 == 0xA00) mySerial.print("1"); if (R1 == 0x69C) mySerial.print("2"); if (R1 == 0xE94) mySerial.print("3"); if (R1 == 0xE06) mySerial.print("4"); if (R1 == 0xC96) mySerial.print("5"); if (R1 == 0xC9E) mySerial.print("6"); if (R1 == 0xA12) mySerial.print("7"); if (R1 == 0xE9E) mySerial.print("8"); if (R1 == 0xE96) mySerial.print("9"); if (R1 == 0x00) mySerial.print(" "); } void DATA2 () { if (R2 == 0x8A9A) mySerial.print("Q"); if (R2 == 0x204A) mySerial.print("V"); if (R2 == 0x2040) mySerial.print("/"); if (R2 == 0x61E) mySerial.print("P"); if (R2 == 0xA88) mySerial.print("J"); if (R2 == 0x4E90) mySerial.print("B"); if (R2 == 0xA060) mySerial.print("X"); if (R2 == 0xE86) mySerial.print("Y"); if (R2 == 0xA8A) mySerial.print("U"); if (R2 == 0xCB0) mySerial.print("S"); if (R2 == 0xE0E) mySerial.print("H"); if (R2 == 0xC9A) mySerial.print("G"); if (R2 == 0xE1E) mySerial.print("A"); if (R2 == 0xA9A) mySerial.print("O"); if (R2 == 0xA00E) mySerial.print("K"); if (R2 == 0x9A) mySerial.print("C"); if (R2 == 0x4A90) mySerial.print("D"); if (R2 == 0x2A2A) mySerial.print("M"); if (R2 == 0x4010) mySerial.print("T"); if (R2 == 0x4090) mySerial.print("I"); if (R2 == 0x41E) mySerial.print("F"); if (R2 == 0x861E) mySerial.print("R"); if (R2 == 0x49E) mySerial.print("E"); if (R2 == 0x8A) mySerial.print("L"); if (R2 == 0x8A2A) mySerial.print("N"); if (R2 == 0x8000) mySerial.print(","); if (R2 == 0x404) mySerial.print("-"); if (R2 == 0x2ADA) mySerial.print("0"); if (R2 == 0xA00) mySerial.print("1"); if (R2 == 0x69C) mySerial.print("2"); if (R2 == 0xE94) mySerial.print("3"); if (R2 == 0xE06) mySerial.print("4"); if (R2 == 0xC96) mySerial.print("5"); if (R2 == 0xC9E) mySerial.print("6"); if (R2 == 0xA12) mySerial.print("7"); if (R2 == 0xE9E) mySerial.print("8"); if (R2 == 0xE96) mySerial.print("9"); if (R2 == 0x00) mySerial.print(" "); } void DATA3 () { if (R3 == 0x8A9A) mySerial.print("Q"); if (R3 == 0x204A) mySerial.print("V"); if (R3 == 0x2040) mySerial.print("/"); if (R3 == 0x61E) mySerial.print("P"); if (R3 == 0xA88) mySerial.print("J"); if (R3 == 0x4E90) mySerial.print("B"); if (R3 == 0xA060) mySerial.print("X"); if (R3 == 0xE86) mySerial.print("Y"); if (R3 == 0xA8A) mySerial.print("U"); if (R3 == 0xCB0) mySerial.print("S"); if (R3 == 0xE0E) mySerial.print("H"); if (R3 == 0xC9A) mySerial.print("G"); if (R3 == 0xE1E) mySerial.print("A"); if (R3 == 0xA9A) mySerial.print("O"); if (R3 == 0xA00E) mySerial.print("K"); if (R3 == 0x9A) mySerial.print("C"); if (R3 == 0x4A90) mySerial.print("D"); if (R3 == 0x2A2A) mySerial.print("M"); if (R3 == 0x4010) mySerial.print("T"); if (R3 == 0x4090) mySerial.print("I"); if (R3 == 0x41E) mySerial.print("F"); if (R3 == 0x861E) mySerial.print("R"); if (R3 == 0x49E) mySerial.print("E"); if (R3 == 0x8A) mySerial.print("L"); if (R3 == 0x8A2A) mySerial.print("N"); if (R3 == 0x8000) mySerial.print(","); if (R3 == 0x404) mySerial.print("-"); if (R3 == 0x2ADA) mySerial.print("0"); if (R3 == 0xA00) mySerial.print("1"); if (R3 == 0x69C) mySerial.print("2"); if (R3 == 0xE94) mySerial.print("3"); if (R3 == 0xE06) mySerial.print("4"); if (R3 == 0xC96) mySerial.print("5"); if (R3 == 0xC9E) mySerial.print("6"); if (R3 == 0xA12) mySerial.print("7"); if (R3 == 0xE9E) mySerial.print("8"); if (R3 == 0xE96) mySerial.print("9"); if (R3 == 0x00) mySerial.print(" "); } void DATA4 () { if (R4 == 0x8A9A) mySerial.print("Q"); if (R4 == 0x204A) mySerial.print("V"); if (R4 == 0x2040) mySerial.print("/"); if (R4 == 0x61E) mySerial.print("P"); if (R4 == 0xA88) mySerial.print("J"); if (R4 == 0x4E90) mySerial.print("B"); if (R4 == 0xA060) mySerial.print("X"); if (R4 == 0xE86) mySerial.print("Y"); if (R4 == 0xA8A) mySerial.print("U"); if (R4 == 0xCB0) mySerial.print("S"); if (R4 == 0xE0E) mySerial.print("H"); if (R4 == 0xC9A) mySerial.print("G"); if (R4 == 0xE1E) mySerial.print("A"); if (R4 == 0xA9A) mySerial.print("O"); if (R4 == 0xA00E) mySerial.print("K"); if (R4 == 0x9A) mySerial.print("C"); if (R4 == 0x4A90) mySerial.print("D"); if (R4 == 0x2A2A) mySerial.print("M"); if (R4 == 0x4010) mySerial.print("T"); if (R4 == 0x4090) mySerial.print("I"); if (R4 == 0x41E) mySerial.print("F"); if (R4 == 0x861E) mySerial.print("R"); if (R4 == 0x49E) mySerial.print("E"); if (R4 == 0x8A) mySerial.print("L"); if (R4 == 0x8A2A) mySerial.print("N"); if (R4 == 0x8000) mySerial.print(","); if (R4 == 0x404) mySerial.print("-"); if (R4 == 0x2ADA) mySerial.print("0"); if (R4 == 0xA00) mySerial.print("1"); if (R4 == 0x69C) mySerial.print("2"); if (R4 == 0xE94) mySerial.print("3"); if (R4 == 0xE06) mySerial.print("4"); if (R4 == 0xC96) mySerial.print("5"); if (R4 == 0xC9E) mySerial.print("6"); if (R4 == 0xA12) mySerial.print("7"); if (R4 == 0xE9E) mySerial.print("8"); if (R4 == 0xE96) mySerial.print("9"); if (R4 == 0x00) mySerial.print(" "); } void DATA5 () { if (R5 == 0x8A9A) mySerial.print("Q"); if (R5 == 0x204A) mySerial.print("V"); if (R5 == 0x2040) mySerial.print("/"); if (R5 == 0x61E) mySerial.print("P"); if (R5 == 0xA88) mySerial.print("J"); if (R5 == 0x4E90) mySerial.print("B"); if (R5 == 0xA060) mySerial.print("X"); if (R5 == 0xE86) mySerial.print("Y"); if (R5 == 0xA8A) mySerial.print("U"); if (R5 == 0xCB0) mySerial.print("S"); if (R5 == 0xE0E) mySerial.print("H"); if (R5 == 0xC9A) mySerial.print("G"); if (R5 == 0xE1E) mySerial.print("A"); if (R5 == 0xA9A) mySerial.print("O"); if (R5 == 0xA00E) mySerial.print("K"); if (R5 == 0x9A) mySerial.print("C"); if (R5 == 0x4A90) mySerial.print("D"); if (R5 == 0x2A2A) mySerial.print("M"); if (R5 == 0x4010) mySerial.print("T"); if (R5 == 0x4090) mySerial.print("I"); if (R5 == 0x41E) mySerial.print("F"); if (R5 == 0x861E) mySerial.print("R"); if (R5 == 0x49E) mySerial.print("E"); if (R5 == 0x8A) mySerial.print("L"); if (R5 == 0x8A2A) mySerial.print("N"); if (R5 == 0x8000) mySerial.print(","); if (R5 == 0x404) mySerial.print("-"); if (R5 == 0x2ADA) mySerial.print("0"); if (R5 == 0xA00) mySerial.print("1"); if (R5 == 0x69C) mySerial.print("2"); if (R5 == 0xE94) mySerial.print("3"); if (R5 == 0xE06) mySerial.print("4"); if (R5 == 0xC96) mySerial.print("5"); if (R5 == 0xC9E) mySerial.print("6"); if (R5 == 0xA12) mySerial.print("7"); if (R5 == 0xE9E) mySerial.print("8"); if (R5 == 0xE96) mySerial.print("9"); if (R5 == 0x00) mySerial.print(" "); } void DATA6 () { if (R6 == 0x8A9A) mySerial.print("Q"); if (R6 == 0x204A) mySerial.print("V"); if (R6 == 0x2040) mySerial.print("/"); if (R6 == 0x61E) mySerial.print("P"); if (R6 == 0xA88) mySerial.print("J"); if (R6 == 0x4E90) mySerial.print("B"); if (R6 == 0xA060) mySerial.print("X"); if (R6 == 0xE86) mySerial.print("Y"); if (R6 == 0xA8A) mySerial.print("U"); if (R6 == 0xCB0) mySerial.print("S"); if (R6 == 0xE0E) mySerial.print("H"); if (R6 == 0xC9A) mySerial.print("G"); if (R6 == 0xE1E) mySerial.print("A"); if (R6 == 0xA9A) mySerial.print("O"); if (R6 == 0xA00E) mySerial.print("K"); if (R6 == 0x9A) mySerial.print("C"); if (R6 == 0x4A90) mySerial.print("D"); if (R6 == 0x2A2A) mySerial.print("M"); if (R6 == 0x4010) mySerial.print("T"); if (R6 == 0x4090) mySerial.print("I"); if (R6 == 0x41E) mySerial.print("F"); if (R6 == 0x861E) mySerial.print("R"); if (R6 == 0x49E) mySerial.print("E"); if (R6 == 0x8A) mySerial.print("L"); if (R6 == 0x8A2A) mySerial.print("N"); if (R6 == 0x8000) mySerial.print(","); if (R6 == 0x404) mySerial.print("-"); if (R6 == 0x2ADA) mySerial.print("0"); if (R6 == 0xA00) mySerial.print("1"); if (R6 == 0x69C) mySerial.print("2"); if (R6 == 0xE94) mySerial.print("3"); if (R6 == 0xE06) mySerial.print("4"); if (R6 == 0xC96) mySerial.print("5"); if (R6 == 0xC9E) mySerial.print("6"); if (R6 == 0xA12) mySerial.print("7"); if (R6 == 0xE9E) mySerial.print("8"); if (R6 == 0xE96) mySerial.print("9"); if (R6 == 0x00) mySerial.print(" "); } void DATA7 () { if (R7 == 0x8A9A) mySerial.print("Q"); if (R7 == 0x204A) mySerial.print("V"); if (R7 == 0x2040) mySerial.print("/"); if (R7 == 0x61E) mySerial.print("P"); if (R7 == 0xA88) mySerial.print("J"); if (R7 == 0x4E90) mySerial.print("B"); if (R7 == 0xA060) mySerial.print("X"); if (R7 == 0xE86) mySerial.print("Y"); if (R7 == 0xA8A) mySerial.print("U"); if (R7 == 0xCB0) mySerial.print("S"); if (R7 == 0xE0E) mySerial.print("H"); if (R7 == 0xC9A) mySerial.print("G"); if (R7 == 0xE1E) mySerial.print("A"); if (R7 == 0xA9A) mySerial.print("O"); if (R7 == 0xA00E) mySerial.print("K"); if (R7 == 0x9A) mySerial.print("C"); if (R7 == 0x4A90) mySerial.print("D"); if (R7 == 0x2A2A) mySerial.print("M"); if (R7 == 0x4010) mySerial.print("T"); if (R7 == 0x4090) mySerial.print("I"); if (R7 == 0x41E) mySerial.print("F"); if (R7 == 0x861E) mySerial.print("R"); if (R7 == 0x49E) mySerial.print("E"); if (R7 == 0x8A) mySerial.print("L"); if (R7 == 0x8A2A) mySerial.print("N"); if (R7 == 0x8000) mySerial.print(","); if (R7 == 0x404) mySerial.print("-"); if (R7 == 0x2ADA) mySerial.print("0"); if (R7 == 0xA00) mySerial.print("1"); if (R7 == 0x69C) mySerial.print("2"); if (R7 == 0xE94) mySerial.print("3"); if (R7 == 0xE06) mySerial.print("4"); if (R7 == 0xC96) mySerial.print("5"); if (R7 == 0xC9E) mySerial.print("6"); if (R7 == 0xA12) mySerial.print("7"); if (R7 == 0xE9E) mySerial.print("8"); if (R7 == 0xE96) mySerial.print("9"); if (R7 == 0x00) mySerial.print(" "); } void DATA8 () { if (R8 == 0x8A9A) mySerial.print("Q"); if (R8 == 0x204A) mySerial.print("V"); if (R8 == 0x2040) mySerial.print("/"); if (R8 == 0x61E) mySerial.print("P"); if (R8 == 0xA88) mySerial.print("J"); if (R8 == 0x4E90) mySerial.print("B"); if (R8 == 0xA060) mySerial.print("X"); if (R8 == 0xE86) mySerial.print("Y"); if (R8 == 0xA8A) mySerial.print("U"); if (R8 == 0xCB0) mySerial.print("S"); if (R8 == 0xE0E) mySerial.print("H"); if (R8 == 0xC9A) mySerial.print("G"); if (R8 == 0xE1E) mySerial.print("A"); if (R8 == 0xA9A) mySerial.print("O"); if (R8 == 0xA00E) mySerial.print("K"); if (R8 == 0x9A) mySerial.print("C"); if (R8 == 0x4A90) mySerial.print("D"); if (R8 == 0x2A2A) mySerial.print("M"); if (R8 == 0x4010) mySerial.print("T"); if (R8 == 0x4090) mySerial.print("I"); if (R8 == 0x41E) mySerial.print("F"); if (R8 == 0x861E) mySerial.print("R"); if (R8 == 0x49E) mySerial.print("E"); if (R8 == 0x8A) mySerial.print("L"); if (R8 == 0x8A2A) mySerial.print("N"); if (R8 == 0x8000) mySerial.print(","); if (R8 == 0x404) mySerial.print("-"); if (R8 == 0x2ADA) mySerial.print("0"); if (R8 == 0xA00) mySerial.print("1"); if (R8 == 0x69C) mySerial.print("2"); if (R8 == 0xE94) mySerial.print("3"); if (R8 == 0xE06) mySerial.print("4"); if (R8 == 0xC96) mySerial.print("5"); if (R8 == 0xC9E) mySerial.print("6"); if (R8 == 0xA12) mySerial.print("7"); if (R8 == 0xE9E) mySerial.print("8"); if (R8 == 0xE96) mySerial.print("9"); if (R8 == 0x00) mySerial.print(" "); } void DATA9 () { if (R9 == 0x8A9A) mySerial.print("Q"); if (R9 == 0x204A) mySerial.print("V"); if (R9 == 0x2040) mySerial.print("/"); if (R9 == 0x61E) mySerial.print("P"); if (R9 == 0xA88) mySerial.print("J"); if (R9 == 0x4E90) mySerial.print("B"); if (R9 == 0xA060) mySerial.print("X"); if (R9 == 0xE86) mySerial.print("Y"); if (R9 == 0xA8A) mySerial.print("U"); if (R9 == 0xCB0) mySerial.print("S"); if (R9 == 0xE0E) mySerial.print("H"); if (R9 == 0xC9A) mySerial.print("G"); if (R9 == 0xE1E) mySerial.print("A"); if (R9 == 0xA9A) mySerial.print("O"); if (R9 == 0xA00E) mySerial.print("K"); if (R9 == 0x9A) mySerial.print("C"); if (R9 == 0x4A90) mySerial.print("D"); if (R9 == 0x2A2A) mySerial.print("M"); if (R9 == 0x4010) mySerial.print("T"); if (R9 == 0x4090) mySerial.print("I"); if (R9 == 0x41E) mySerial.print("F"); if (R9 == 0x861E) mySerial.print("R"); if (R9 == 0x49E) mySerial.print("E"); if (R9 == 0x8A) mySerial.print("L"); if (R9 == 0x8A2A) mySerial.print("N"); if (R9 == 0x8000) mySerial.print(","); if (R9 == 0x404) mySerial.print("-"); if (R9 == 0x2ADA) mySerial.print("0"); if (R9 == 0xA00) mySerial.print("1"); if (R9 == 0x69C) mySerial.print("2"); if (R9 == 0xE94) mySerial.print("3"); if (R9 == 0xE06) mySerial.print("4"); if (R9 == 0xC96) mySerial.print("5"); if (R9 == 0xC9E) mySerial.print("6"); if (R9 == 0xA12) mySerial.print("7"); if (R9 == 0xE9E) mySerial.print("8"); if (R9 == 0xE96) mySerial.print("9"); if (R9 == 0x00) mySerial.print(" "); } void DATA10 () { if (R10 == 0x8A9A) mySerial.print("Q"); if (R10 == 0x204A) mySerial.print("V"); if (R10 == 0x2040) mySerial.print("/"); if (R10 == 0x61E) mySerial.print("P"); if (R10 == 0xA88) mySerial.print("J"); if (R10 == 0x4E90) mySerial.print("B"); if (R10 == 0xA060) mySerial.print("X"); if (R10 == 0xE86) mySerial.print("Y"); if (R10 == 0xA8A) mySerial.print("U"); if (R10 == 0xCB0) mySerial.print("S"); if (R10 == 0xE0E) mySerial.print("H"); if (R10 == 0xC9A) mySerial.print("G"); if (R10 == 0xE1E) mySerial.print("A"); if (R10 == 0xA9A) mySerial.print("O"); if (R10 == 0xA00E) mySerial.print("K"); if (R10 == 0x9A) mySerial.print("C"); if (R10 == 0x4A90) mySerial.print("D"); if (R10 == 0x2A2A) mySerial.print("M"); if (R10 == 0x4010) mySerial.print("T"); if (R10 == 0x4090) mySerial.print("I"); if (R10 == 0x41E) mySerial.print("F"); if (R10 == 0x861E) mySerial.print("R"); if (R10 == 0x49E) mySerial.print("E"); if (R10 == 0x8A) mySerial.print("L"); if (R10 == 0x8A2A) mySerial.print("N"); if (R10 == 0x8000) mySerial.print(","); if (R10 == 0x404) mySerial.print("-"); if (R10 == 0x2ADA) mySerial.print("0"); if (R10 == 0xA00) mySerial.print("1"); if (R10 == 0x69C) mySerial.print("2"); if (R10 == 0xE94) mySerial.print("3"); if (R10 == 0xE06) mySerial.print("4"); if (R10 == 0xC96) mySerial.print("5"); if (R10 == 0xC9E) mySerial.print("6"); if (R10 == 0xA12) mySerial.print("7"); if (R10 == 0xE9E) mySerial.print("8"); if (R10 == 0xE96) mySerial.print("9"); if (R10 == 0x00) mySerial.print(" "); } void DATA11 () { if (R11 == 0x8A9A) mySerial.print("Q"); if (R11 == 0x204A) mySerial.print("V"); if (R11 == 0x2040) mySerial.print("/"); if (R11 == 0x61E) mySerial.print("P"); if (R11 == 0xA88) mySerial.print("J"); if (R11 == 0x4E90) mySerial.print("B"); if (R11 == 0xA060) mySerial.print("X"); if (R11 == 0xE86) mySerial.print("Y"); if (R11 == 0xA8A) mySerial.print("U"); if (R11 == 0xCB0) mySerial.print("S"); if (R11 == 0xE0E) mySerial.print("H"); if (R11 == 0xC9A) mySerial.print("G"); if (R11 == 0xE1E) mySerial.print("A"); if (R11 == 0xA9A) mySerial.print("O"); if (R11 == 0xA00E) mySerial.print("K"); if (R11 == 0x9A) mySerial.print("C"); if (R11 == 0x4A90) mySerial.print("D"); if (R11 == 0x2A2A) mySerial.print("M"); if (R11 == 0x4010) mySerial.print("T"); if (R11 == 0x4090) mySerial.print("I"); if (R11 == 0x41E) mySerial.print("F"); if (R11 == 0x861E) mySerial.print("R"); if (R11 == 0x49E) mySerial.print("E"); if (R11 == 0x8A) mySerial.print("L"); if (R11 == 0x8A2A) mySerial.print("N"); if (R11 == 0x8000) mySerial.print(","); if (R11 == 0x404) mySerial.print("-"); if (R11 == 0x2ADA) mySerial.print("0"); if (R11 == 0xA00) mySerial.print("1"); if (R11 == 0x69C) mySerial.print("2"); if (R11 == 0xE94) mySerial.print("3"); if (R11 == 0xE06) mySerial.print("4"); if (R11 == 0xC96) mySerial.print("5"); if (R11 == 0xC9E) mySerial.print("6"); if (R11 == 0xA12) mySerial.print("7"); if (R11 == 0xE9E) mySerial.print("8"); if (R11 == 0xE96) mySerial.print("9"); if (R11 == 0x00) mySerial.print(" "); } void DISP () { DATA11 (); DATA10 (); DATA9 (); DATA8 (); DATA7 (); DATA6 (); DATA5 (); T (); DATA4 (); DATA3 (); DATA2 (); DATA1 (); Z (); mySerial.println(" "); }
зачем функции дублируешь?
часть кода можно сделать не повторением, а циклом
сам код писал?
Я же написал что многого не понимаю, подскажи пожалуйста как это сделать, хотя бы пример.
Код писал сам, человек помог только разделить данные которые в обычный сериал выводяться, которые в программный код мой.
железо под рукой проверить?
код рабочий?
Код рабочий данные с магнитолы выводятся. Проверить смогу через часика два, всё на работе. Может по телефону пообщаемся?
заполни остатки массивов code и simb. то есть добавляешь в code и соответствующий в simb в том же порядке
Не работает???
попробуй еще раз свой первоначальный код. работает также или нет
и попробуй это
кстати в массиве не 41, а 40 элементов))
все равно не работает, в mySerial пустоту шлёт, без переноса строки.
а в Serial только один раз и всё.
странно. проверим сначала одну штуку
кинь сюда что в терминал придет
и пожалуйста не переформатируй код. мне так проще
хорошо. теперь этот код и также выложи что в терминал придет
получаеться смещение данных из spi , 4 лишних байта спереди
spi я не трогал. тоже самое. теперь R не должны быть нулями и какой то текст должен получится
текста не будет, если в конечном итоге так и останеться , я сдвину MyBuff на 4 байта и всё будет ок
да убери 4 байта и проверь. посмотрим что получится
Получилось вывести , стабильно ваводится если в MyBuff писать через Serial.print.
Объясни пожалуйста как добавить точку между 4 и 5 символом если считать справа на лево?
вот рабочий код
нифига не понял. где?
точку просто в цикле если i==4 то вывести точку
вот этот кусок мне кажется странный. process_it после каждого байта равен true, значит легко возможно такое что часть массива будет со старыми данными, а часть с новыми, так как вывод работает когда true
и еще pos каждый раз при выводе приравниваем нулю. магнитола выдает например 20й байт, а ты его пишешь в первый например так как в это время выводил и обнулил только что pos. хотя может я не заметил как ты это обходишь и почему работает. работает да и ладно)))
Всё сейчас работает как должно, спасибо! Скетч уменьшился в 2 раза.
Проблема только с MyBuff[3] в нем данные передаються только 1 раз за 8 тактов, выглядит так, пример, только MyBuff[3] :
00
AE
00
00
00
00
00
00
00
AE
00
00
00
00
00
00
00
AE
как сделать так , если в MyBuff[3] 00 больше 7 раз то буферер сбрасываеться на 00, а если меньше 7 то оставлять значение не равное 00 ?
а как же цифры 1 и 4? при которых тоже нули. отсеять легко, но как определить что отсеивать. то что больше нуля не подходит. нужно еще что то
А если счетчик по переносу строки сделать? И если MyBuff[3] = 0 больше 7 раз то сбросить в R[1] биты 4,5,6,7,12,13,14,15 в 0, а если хоть раз какое то другое значение проскакивает то не сбрасывать в 0 ? Цифры 1 и 4 читаются из других буферов.
почему бы и нет. хотя может вообще отсеивать варианты где MyBuff[3] = 0? и без счетчика вообще
разобрался почему если кучу serial.print сделать то нормально работает? дело в задержке?
Нет еще не разобрался, я пока дома. Но мне кажется что я данные беру для записи в R из буфера serial порта
с чего бы)))
Serial
.print(MyBuff[0], HEX);
это просто отправка. а так как таких строк много они создают задержку. возможно нужна просто задержка delay
Я пробовал как ты вчера говорил delay(1) и 10 и 100,не работает. Может надо микросекундные задержки использовать?
хз. надо экспериментировать. ну если работает и так оставь. или быстродействия не хватает?
просто разбирательство может много времени занять
Приветствую. Начал заниматься таким же проектом, но с другой магнитолой. Но возникли проблемы на первом этапе: не могу правильно считать данные по SPI в режиме Slave. Реализую на Arduino Nano.
Вот, что получается: первая строка то, что должно быть
В чем загвоздка?
Заранее спасибо.
Подскажите в каком направлении работать
Что вижу сразу - вы по SPI принимаете каждый раз разное кол-во символов, правильно? А вот в цикле for строка 27 выводите на печать всегда весь буфер целиком.
Это вам еще везет, что у вас печатается "почти то, что надо" - в принципе, мог вообще выводится сплошной мусор...
на драйвер дисплея идут четыре посылки по 9 байт. В двух последних байтах каждой посылки свои служебные данные(протокол ССВ). Они мне не нужны. Дисплей имеет 12 знакомест по 13 сегментов плюс значки(их я определил с помощью логического анализатора). Т.е. Вы предлагаете попробовать выводить частями? Позже попробую.
на драйвер дисплея идут четыре посылки по 9 байт. В двух последних байтах каждой посылки свои служебные данные(протокол ССВ). Они мне не нужны. Дисплей имеет 12 знакомест по 13 сегментов плюс значки(их я определил с помощью логического анализатора). Т.е. Вы предлагаете попробовать выводить частями? Позже попробую.
нет, вы не поняли. Причем тут вообще дисплей и его знакоместа?? Я ничего не предлагаю , я указываю, где у вас ошибка. Прочитайте еще раз ВНИМАТЕЛЬНО мое предыдущее сообщение.
если честно пока не понял. В данном примере , что выше это определенный текст не меняющийся во времени. И этот текст передается в 36 байтах. И мне чтобы работать дальше, нужно добиться стабильного приема этих данных, потом уже буду их обрабатывать. А сейчас по два байта в каждой посылке теряются, а где то появляются в другом месте, а где то идет смещение.
Если можно объясните поподробней. на ардуино пока собирал только элементарные схемы, а с таким проектом впервые.
Во-первых, если у вас в посылке 36 байт, то буфер ровно в 36 байт для нее мал, должно быть минимум 37, так как 36 байт строка + 1 байт терминатор "\0" .
Во-вторых, ваш код будет работать, только если все 36 символов приходят одной посылкой. Если же они приходят частями - то есть два варианта:
а) дождаться, пока придут все 36 байт, а только потом выводить
б) сразу выводить то, что пришло (менее 36 байт)
В вашем же коде - "ни вашим ни нашим" - вы принимаете часть пакета, записываете в буфер, даже запоминаете длину строки в переменной pos - но почему-то выводите на печать не принятый пакет, а весь буфер целиком, хотя может быть приняли всего пару байт, а остальное в буфере - "мусор"
попробуйте пока два маленьких исправления
1. В строке 2 установите длину MyBuff не 36, а 37 или более (я бы, на время тестов, поставил побольше - 64)
2. Строку 20 запишите так:
if (pos == 36) process_it = true;
при 37 байт первый байт показывает правильно потом нули и билибирда потом. При 64 см. выше
11 40, 03 FD, 03 FE, 0B FF это как раз служебные данные. И по прежнему 2 байта вообще теряется в посылке.
И по прежнему 2 байта вообще теряется в посылке.
какие? - последние?
посмотрите выше во вложении . Первая строка то что должно быть. Третий и шестой. а в конце всей передачи начинают повторяться данные из первой посылки. иногда проскакивают и пропадащие байты , но не на своем месте
Посмотрел внимательно на то, что у вас принимается - мне кажется. что на потери не похоже.
Взгляните - только в первой строке у вас посылки по 9 байт. Потом 5 строк - все пакеты идут по строго 7 байт. Потом строка по 6 байт в посылке. Потом опять по 7....
Если что-то теряется - оно теряется слишком стабильно, так при ошибках не бывает. Думаю, вам нужно получше изучить протокол.
иногда проскакивают и пропадащие байты , но не на своем месте
где пропадающие байты?
в первой строке я Вам ставлю что должно быть сто процентов. Это данные с логического анализатора
в десятой строке появился 6 байт(48). но там и какоето смещение
кстати, MyBuff тоже должен быть volatile
то же самое
Вот и я всю голову сломал. По всякому скетч правил. Даже ставил как int MyBuff. Появлялись пропавшие байты, но исчезали другие. А посылка также была и3 7 байт
В setup() еще можно попробовать явно разрешить прием по прерыванию:
SPCR |= _BV(SPIE);
Это делал. Без изменений
Собираю считыватель данных с дисплея магитолы и вывод в инфы в сериал. Протокол 3wire, похож на spi. Инфу выводит но не хватает памяти для еще символов. Я только учусь и мало понимаю в программировании, помогите пожалуйста.
Можно так попробовать сократить
Юлиан все в том же стиле :)
Вы ответили на вопрос, заданный 2.5 года назад. Код давно уже переписали - в сообщ #14 - причем почти на 100 строк лучше, чем у вас.
Бесконечные bitWrite тоже можно переписать покороче. выиграв еще строк 100-150...
Не понял что сократить. Его код и был взят за основу. Только первая часть. С следующей частью, кодировкой символов еще предстоит работать