/************************************************* RTTY DECODER for GR-SAKURA v1.0 2014.07.04 Kazuhiro Iwasa (JI3BNB) 5BIT-BAUDOT-CODE, 45.45baud LCD 16x2 /*************************************************/ #include <rxduino.h> #include <liquidcrystal.h> LiquidCrystal lcd(4,5,6,7,8,9,10); #define INPUT_PIN 2 byte i = 0; byte j = 0; byte k = 0; byte l; byte sq = 0; byte d1 = 0; byte d2 = 0; byte d3 = 0; byte d4 = 0; byte d5 = 0; byte dsp = 0; byte fig = 0; char ch; char c[17]; void timer_interrupt(void) { i++; if(sq == 0 && digitalRead(INPUT_PIN) == 0) { sq = 1; i = 0; } if(sq == 1 && i == 10) { if(digitalRead(INPUT_PIN) == 0) { sq = 2; i = 0; } else { sq = 0; } } if(sq == 2 && i == 22) { d1 = digitalRead(INPUT_PIN); } if(sq == 2 && i == 44) { d2 = digitalRead(INPUT_PIN); } if(sq == 2 && i == 66) { d3 = digitalRead(INPUT_PIN); } if(sq == 2 && i == 88) { d4 = digitalRead(INPUT_PIN); } if(sq == 2 && i == 110) { d5 = digitalRead(INPUT_PIN); dsp = 1; } if(sq == 2 && i == 135) { sq = 0; } } void setup() { lcd.begin(16, 2); lcd.clear(); pinMode(PIN_LED0, OUTPUT); timer_regist_userfunc(timer_interrupt); } void loop() { if(dsp == 1) { ch = '\0'; if(d1 == 1 && d2 == 1 && d3 == 1 && d4 == 1 && d5 == 1) //LETTERS { fig = 0; digitalWrite(PIN_LED0, LOW); } if(d1 == 1 && d2 == 1 && d3 == 0 && d4 == 1 && d5 == 1) //FIGURES { fig = 1; digitalWrite(PIN_LED0, HIGH); } if(d1 == 0 && d2 == 0 && d3 == 0 && d4 == 1 && d5 == 0){ } //CR if(d1 == 0 && d2 == 1 && d3 == 0 && d4 == 0 && d5 == 0){ch = ' ';} //LF if(d1 == 0 && d2 == 0 && d3 == 1 && d4 == 0 && d5 == 0){ch = ' ';} //SPACE if(fig == 0) { if(d1 == 1 && d2 == 1 && d3 == 0 && d4 == 0 && d5 == 0){ch = 'A';} if(d1 == 1 && d2 == 0 && d3 == 0 && d4 == 1 && d5 == 1){ch = 'B';} if(d1 == 0 && d2 == 1 && d3 == 1 && d4 == 1 && d5 == 0){ch = 'C';} if(d1 == 1 && d2 == 0 && d3 == 0 && d4 == 1 && d5 == 0){ch = 'D';} if(d1 == 1 && d2 == 0 && d3 == 0 && d4 == 0 && d5 == 0){ch = 'E';} if(d1 == 1 && d2 == 0 && d3 == 1 && d4 == 1 && d5 == 0){ch = 'F';} if(d1 == 0 && d2 == 1 && d3 == 0 && d4 == 1 && d5 == 1){ch = 'G';} if(d1 == 0 && d2 == 0 && d3 == 1 && d4 == 0 && d5 == 1){ch = 'H';} if(d1 == 0 && d2 == 1 && d3 == 1 && d4 == 0 && d5 == 0){ch = 'I';} if(d1 == 1 && d2 == 1 && d3 == 0 && d4 == 1 && d5 == 0){ch = 'J';} if(d1 == 1 && d2 == 1 && d3 == 1 && d4 == 1 && d5 == 0){ch = 'K';} if(d1 == 0 && d2 == 1 && d3 == 0 && d4 == 0 && d5 == 1){ch = 'L';} if(d1 == 0 && d2 == 0 && d3 == 1 && d4 == 1 && d5 == 1){ch = 'M';} if(d1 == 0 && d2 == 0 && d3 == 1 && d4 == 1 && d5 == 0){ch = 'N';} if(d1 == 0 && d2 == 0 && d3 == 0 && d4 == 1 && d5 == 1){ch = 'O';} if(d1 == 0 && d2 == 1 && d3 == 1 && d4 == 0 && d5 == 1){ch = 'P';} if(d1 == 1 && d2 == 1 && d3 == 1 && d4 == 0 && d5 == 1){ch = 'Q';} if(d1 == 0 && d2 == 1 && d3 == 0 && d4 == 1 && d5 == 0){ch = 'R';} if(d1 == 1 && d2 == 0 && d3 == 1 && d4 == 0 && d5 == 0){ch = 'S';} if(d1 == 0 && d2 == 0 && d3 == 0 && d4 == 0 && d5 == 1){ch = 'T';} if(d1 == 1 && d2 == 1 && d3 == 1 && d4 == 0 && d5 == 0){ch = 'U';} if(d1 == 0 && d2 == 1 && d3 == 1 && d4 == 1 && d5 == 1){ch = 'V';} if(d1 == 1 && d2 == 1 && d3 == 0 && d4 == 0 && d5 == 1){ch = 'W';} if(d1 == 1 && d2 == 0 && d3 == 1 && d4 == 1 && d5 == 1){ch = 'X';} if(d1 == 1 && d2 == 0 && d3 == 1 && d4 == 0 && d5 == 1){ch = 'Y';} if(d1 == 1 && d2 == 0 && d3 == 0 && d4 == 0 && d5 == 1){ch = 'Z';} } if(fig == 1) { if(d1 == 1 && d2 == 1 && d3 == 0 && d4 == 0 && d5 == 0){ch = '-';} if(d1 == 1 && d2 == 0 && d3 == 0 && d4 == 1 && d5 == 1){ch = '?';} if(d1 == 0 && d2 == 1 && d3 == 1 && d4 == 1 && d5 == 0){ch = ':';} if(d1 == 1 && d2 == 0 && d3 == 0 && d4 == 1 && d5 == 0){ } if(d1 == 1 && d2 == 0 && d3 == 0 && d4 == 0 && d5 == 0){ch = '3';} if(d1 == 1 && d2 == 0 && d3 == 1 && d4 == 1 && d5 == 0){ } if(d1 == 0 && d2 == 1 && d3 == 0 && d4 == 1 && d5 == 1){ } if(d1 == 0 && d2 == 0 && d3 == 1 && d4 == 0 && d5 == 1){ } if(d1 == 0 && d2 == 1 && d3 == 1 && d4 == 0 && d5 == 0){ch = '8';} if(d1 == 1 && d2 == 1 && d3 == 0 && d4 == 1 && d5 == 0){ } if(d1 == 1 && d2 == 1 && d3 == 1 && d4 == 1 && d5 == 0){ch = '(';} if(d1 == 0 && d2 == 1 && d3 == 0 && d4 == 0 && d5 == 1){ch = ')';} if(d1 == 0 && d2 == 0 && d3 == 1 && d4 == 1 && d5 == 1){ch = '.';} if(d1 == 0 && d2 == 0 && d3 == 1 && d4 == 1 && d5 == 0){ch = ',';} if(d1 == 0 && d2 == 0 && d3 == 0 && d4 == 1 && d5 == 1){ch = '9';} if(d1 == 0 && d2 == 1 && d3 == 1 && d4 == 0 && d5 == 1){ch = '0';} if(d1 == 1 && d2 == 1 && d3 == 1 && d4 == 0 && d5 == 1){ch = '1';} if(d1 == 0 && d2 == 1 && d3 == 0 && d4 == 1 && d5 == 0){ch = '4';} if(d1 == 1 && d2 == 0 && d3 == 1 && d4 == 0 && d5 == 0){ } if(d1 == 0 && d2 == 0 && d3 == 0 && d4 == 0 && d5 == 1){ch = '5';} if(d1 == 1 && d2 == 1 && d3 == 1 && d4 == 0 && d5 == 0){ch = '7';} if(d1 == 0 && d2 == 1 && d3 == 1 && d4 == 1 && d5 == 1){ } if(d1 == 1 && d2 == 1 && d3 == 0 && d4 == 0 && d5 == 1){ch = '2';} if(d1 == 1 && d2 == 0 && d3 == 1 && d4 == 1 && d5 == 1){ch = '/';} if(d1 == 1 && d2 == 0 && d3 == 1 && d4 == 0 && d5 == 1){ch = '6';} if(d1 == 1 && d2 == 0 && d3 == 0 && d4 == 0 && d5 == 1){ } } if(ch != '\0') { lcd.setCursor(j, k); lcd.print(ch); c[j] = ch; j++; if(j == 16 && k == 0) { j = 0; k = 1; } if(j == 16 && k == 1) { lcd.clear(); for(l = 0; l < 16; l++) { lcd.print(c[l]); } j = 0; k = 1; } } dsp = 0; } delay(5); }