/************************************************************** RTTY DECODER for ARDUINO UNO 2014.09.15 v2.2 5BIT-BAUDOT-CODE, 45.45BAUD LCD 20x4 (UC-204) /**************************************************************/ #include <LiquidCrystal.h> #include <FlexiTimer2.h> LiquidCrystal lcd(4,5,6,7,8,9,10); boolean dsp; byte ti; uint8_t baudot; void timer_interrupt(void) { static byte rSq; ti++; if(rSq == 0 && digitalRead(19) == 0) { rSq = 1; ti = 0; } if(rSq == 1 && ti == 10) { if(digitalRead(19) == 0) { rSq = 2; ti = 0; } else { rSq = 0; } } if(rSq == 2 && ti == 22) { bitWrite(baudot, 0, digitalRead(19)); } if(rSq == 2 && ti == 44) { bitWrite(baudot, 1, digitalRead(19)); } if(rSq == 2 && ti == 66) { bitWrite(baudot, 2, digitalRead(19)); } if(rSq == 2 && ti == 88) { bitWrite(baudot, 3, digitalRead(19)); } if(rSq == 2 && ti == 110) { bitWrite(baudot, 4, digitalRead(19)); dsp = 1; } if(rSq == 2 && ti == 135) { rSq = 0; } } void setup() { lcd.begin(20, 4); lcd.clear(); FlexiTimer2::set(1, timer_interrupt); FlexiTimer2::start(); } void loop() { static boolean fig; static byte x; static byte y; static char ch; static char c[61]; int i; if(dsp == 1) { ch = '\0'; if(baudot == B11111){fig = 0; } //LETTERS else if(baudot == B11011){fig = 1; } //FIGURES else if(baudot == B01000){ } //CR else if(baudot == B00010){ch = ' ';} //LF else if(baudot == B00100){ch = ' ';} //SPACE if(fig == 0) { if(baudot == B00011){ch = 'A';} else if(baudot == B11001){ch = 'B';} else if(baudot == B01110){ch = 'C';} else if(baudot == B01001){ch = 'D';} else if(baudot == B00001){ch = 'E';} else if(baudot == B01101){ch = 'F';} else if(baudot == B11010){ch = 'G';} else if(baudot == B10100){ch = 'H';} else if(baudot == B00110){ch = 'I';} else if(baudot == B01011){ch = 'J';} else if(baudot == B01111){ch = 'K';} else if(baudot == B10010){ch = 'L';} else if(baudot == B11100){ch = 'M';} else if(baudot == B01100){ch = 'N';} else if(baudot == B11000){ch = 'O';} else if(baudot == B10110){ch = 'P';} else if(baudot == B10111){ch = 'Q';} else if(baudot == B01010){ch = 'R';} else if(baudot == B00101){ch = 'S';} else if(baudot == B10000){ch = 'T';} else if(baudot == B00111){ch = 'U';} else if(baudot == B11110){ch = 'V';} else if(baudot == B10011){ch = 'W';} else if(baudot == B11101){ch = 'X';} else if(baudot == B10101){ch = 'Y';} else if(baudot == B10001){ch = 'Z';} } if(fig == 1) { if(baudot == B00011){ch = '-';} else if(baudot == B11001){ch = '?';} else if(baudot == B01110){ch = ':';} else if(baudot == B01001){ } else if(baudot == B00001){ch = '3';} else if(baudot == B01101){ } else if(baudot == B11010){ } else if(baudot == B10100){ } else if(baudot == B00110){ch = '8';} else if(baudot == B01011){ } else if(baudot == B01111){ch = '(';} else if(baudot == B10010){ch = ')';} else if(baudot == B11100){ch = '.';} else if(baudot == B01100){ch = ',';} else if(baudot == B11000){ch = '9';} else if(baudot == B10110){ch = '0';} else if(baudot == B10111){ch = '1';} else if(baudot == B01010){ch = '4';} else if(baudot == B00101){ } else if(baudot == B10000){ch = '5';} else if(baudot == B00111){ch = '7';} else if(baudot == B11110){ } else if(baudot == B10011){ch = '2';} else if(baudot == B11101){ch = '/';} else if(baudot == B10101){ch = '6';} else if(baudot == B10001){ } } if(ch != '\0') { lcd.print(ch); if(y == 1){c[ x] = ch;} if(y == 2){c[20 + x] = ch;} if(y == 3){c[40 + x] = ch;} x++; if(x == 20 && y == 0){x = 0, y = 1;} if(x == 20 && y == 1){x = 0, y = 2;} if(x == 20 && y == 2){x = 0, y = 3;} if(x == 20 && y == 3) { lcd.clear(); lcd.setCursor(0, 0); for(i = 0; i < 20; i++){lcd.print(c[ i]);} lcd.setCursor(0, 1); for(i = 0; i < 20; i++){lcd.print(c[20 + i]);} lcd.setCursor(0, 2); for(i = 0; i < 20; i++){lcd.print(c[40 + i]);} x = 0, y = 3; for(i = 0; i < 20; i++){c[ i] = c[20 + i];} for(i = 0; i < 20; i++){c[20 + i] = c[40 + i];} } lcd.setCursor(x, y); } dsp = 0; } delay(5); }