/*
IR_remote_detector sketch
An IR remote receiver is connected to pin 11. Have tried 2-6 & 11.
Decode problem when using tone function. Always returns 0 after first time.
The LED on pin 13 toggles each time a button on the remote is pressed.
*/
#include <IRremote.h> //adds the library code to the sketch
const int irReceiverPin = 11; //pin the receiver is connected to
const int ledPin = 13;
IRrecv irrecv(irReceiverPin); //create an IRrecv object
decode_results decodedSignal; //stores results from IR detectorvoid setup()
unsigned long value;
void setup ()
{
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
irrecv.enableIRIn(); // Start the receiver object
}
boolean lightState = false; //keep track of whether the LED is on
unsigned long last = millis(); //remember when we last received an IR message
void loop()
{
if (irrecv.decode(&decodedSignal) == true) //this is true if a message has
//been received
{
value = decodedSignal.value;
delay(200); // extra debounce
Serial.print(value);
Serial.print(" ");
tone(8,600,100); // comment out this line and the IR receiver works as expected!
if (millis() - last > 250) { //has it been 1/4 sec since last message? debounce?
lightState = !lightState; //Yes: toggle the LED
digitalWrite(ledPin, lightState);
}
last = millis();
irrecv.resume(); // watch out for another message
}
}
// Send message by remote control
// Tested with Philips remote. Will not work with other protocols!
// interrupt problem avoided by removal of 'tone' function
// replaced by providing a 555 oscillator and switching pin 13
// 28-4-15 19:00 GMT+1
#include <Arduino.h>
byte signalPin = 13; // will control oscillator speaker
int wpm = 20; // to start with
int wpm_step = 5;
int elementWait = 1200 / wpm; //dit time
boolean signal_state = LOW;
int randNumber = 0;
#include <IRremote.h>
int IRpin = 11;
IRrecv irrecv(IRpin);
decode_results results;
unsigned long value;
String call = "WB6CPR"; // customize this
void setup() {
pinMode(signalPin, OUTPUT);
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
menu(); // show options on terminal screen
}
void loop() {
if (irrecv.decode(&results))
{
delay(200); //debounce further key speak
//Serial.println(results.value, DEC); // Print to terminal 'results.value' of key pressed for testing
value = (results.value);
whatToDo(value); // pass on to case statements
irrecv.resume(); // Receive the next value
}
}
void whatToDo(unsigned long)
{
//Serial.println(value); // TEST - find codes for key of interest
switch (value) {
case 65: case 2113: //1 Philips remote control key
send_hi_k();
break;
case 66: case 2114: //2
send_cq();
break;
case 67: case 2115: //3
send_73();
break;
case 68: case 2116: //4
send_599();
break;
case 69: case 2117: //5
send_qth();
break;
case 70: case 2118: //6
send_equipment();
break;
case 71: case 2119: //7
send_QRM();
break;
case 72: case 2120: //8
send_DX();
break;
case 73: case 2121: //9
send_name();
break;
case 64: case 2112: //0
send_all_messages();
break;
case 84: case 2132: //up arrow
faster();
break;
case 83: case 2131: //down arrow
slower();
break;
case 117: case 2165: //ok
menu();
break;
case 74: case 2122: //go back arrow - clear screen on real terminal screens
screen_refresh();
break;
case 77: case 2125: //mute key - toggle long tone
pitch_adj();
break;
case 102: case 2150: // list key - send a long string of random characters for code pratice
random_code();
break;
case 115: case 2163: // toggle wpm increment (1 or 5). default 5
wpm_increment();
break;
case 0: // unknown key press - error
send_e(); send_r(); send_r();
}
}
void menu() {
Serial.println();
Serial.println("| Morse & I by Barry B |");
Serial.println("|Remote control options|");
Serial.println("|----------------------|");
//Serial.println();
Serial.print(" Speed is ");
Serial.print(wpm);
Serial.println("wpm");
Serial.println();
Serial.println("Up Arrow> Send Morse faster");
Serial.println("Dn Arrow> Send Morse slower");
Serial.println("Adjust> Toggle wpm increment (1 or 5)");
Serial.println("BackArrow> Clear terminal screen");
Serial.println("Mute> To toggle long tone to adjust pitch of osc.");
Serial.println("OK> Show this menu");
Serial.println("List> Send a random group of characters for Morse practice");
Serial.println();
Serial.println("1> Hi Hi");
Serial.print("2> CQ CQ CQ "); Serial.println(call);
Serial.println("3> 73");
Serial.println("4> 599");
Serial.println("5> QTH");
Serial.println("6> My Equipment");
Serial.println("7> QRM");
Serial.print("8> CQ DX "); Serial.println(call);
Serial.println("9> My name is Barry"); // customize this
Serial.println("0> Go Crazy. Send all messages");
Serial.println();
}
void send_hi_k() {
Serial.println("HI HI K");
send_h(); send_i();
word_space();
send_h(); send_i();
word_space();
send_k();
word_space();
}
void send_cq() {
Serial.print("CQ CQ CQ DE "); Serial.print(call); Serial.print(" "); Serial.println(call);
for (int i = 0; i < 3; i++) {
send_c(); send_q();
word_space();
}
send_de();
word_space();
send_call();
word_space();
send_call();
word_space();
}
void send_de() {
send_d(); send_e();
word_space();
}
void send_call() { // enter YOUR call here
send_w(); send_b(); send_6(); send_c(); send_p(); send_r();
word_space();
}
void send_73() {
Serial.println("73 73 K");
send_7(); send_3();
word_space();
send_7(); send_3();
word_space();
send_k();
word_space();
}
void send_599() {
Serial.println("599 599 K");
send_5(); send_9(); send_9();
word_space();
send_5(); send_9(); send_9();
word_space();
send_k();
word_space();
}
void send_qth() {
Serial.println("QTH QTH AMSTERDAM AMSTERDAM"); // customize this
send_q(); send_t(); send_h();
word_space();
send_q(); send_t(); send_h();
word_space();
send_location();
word_space();
send_location();
word_space();
}
void send_location() {
send_a(); send_m(); send_s(); send_t(); send_e(); send_r(); send_d(); send_a(); send_m(); // customize this
word_space();
}
void send_equipment() { // customize this
Serial.println("ARUDINO UNO, RECEIVER R5000");
send_a(); send_r(); send_d(); send_u(); send_i(); send_n(); send_o();
word_space();
send_u(); send_n(); send_o();
send_comma();
word_space();
send_r(); send_e(); send_c(); send_e(); send_i(); send_v(); send_e(); send_r();
word_space();
send_r(); send_5(); send_0(); send_0(); send_0();
word_space();
}
void send_QRM() {
Serial.println("QRM QRM, AGAIN PLEASE ");
send_q(); send_r(); send_m();
word_space();
send_q(); send_r(); send_m();
send_comma();
word_space();
send_a(); send_g(); send_a(); send_i(); send_n();
word_space();
send_p(); send_l(); send_e(); send_a(); send_s(); send_e();
word_space();
}
void send_DX() {
Serial.print("CQ DX CQ DX CQ DX DE "); Serial.println(call);
send_c(); send_q();
word_space();
send_d(); send_x();
word_space();
send_c(); send_q();
word_space();
send_d(); send_x();
word_space();
send_c(); send_q();
word_space();
send_d(); send_x();
word_space();
send_d(); send_e();
word_space();
send_call();
word_space();
}
void send_name() { // customize this
Serial.println("MY NAME IS BARRY");
send_m(); send_y();
word_space();
send_n(); send_a(); send_m(); send_e();
word_space();
send_i(); send_s();
word_space();
send_b(); send_a(); send_r(); send_r(); send_y();
word_space();
}
void send_all_messages() {
send_hi_k();
Serial.println();
send_cq();
Serial.println();
send_73();
Serial.println();
send_599();
Serial.println();
send_qth();
send_location();
Serial.println();
send_equipment();
Serial.println();
send_QRM();
Serial.println();
send_DX();
Serial.println();
send_name();
Serial.println();
}
void screen_refresh() {
Serial.write(27); // ESC
Serial.write("[2J"); // clear screen
Serial.write(27); // ESC
Serial.write("[H"); // cursor to home
}
void pitch_adj() {
Serial.println("Click 'Mute' again to start/stop long tone.");
signal_state = digitalRead(signalPin);
if (signal_state == LOW) {
digitalWrite(signalPin, HIGH);
}
else {
digitalWrite(signalPin, LOW);
}
delay(5);
}
void send_a() {
dit(); dah();
letter_space();
}
void send_b() {
dah(); dit(); dit(); dit();
letter_space();
}
void send_c() {
dah(); dit(); dah(); dit();
letter_space();
}
void send_d() {
dah(); dit(); dit();
letter_space();
}
void send_e() {
dit();
letter_space();
}
void send_f() {
dit(); dit(); dah(); dit();
letter_space();
}
void send_g() {
dah(); dah(); dit();
letter_space();
}
void send_h() {
dit(); dit(); dit(); dit();
letter_space();
}
void send_i() {
dit(); dit();
letter_space();
}
void send_j() {
dit(); dah(); dah(); dah();
letter_space();
}
void send_k() {
dah(); dit(); dah();
letter_space();
}
void send_l() {
dit(); dah(); dit(); dit();
letter_space();
}
void send_m() {
dah(); dah();
letter_space();
}
void send_n() {
dah(); dit();
letter_space();
}
void send_o() {
dah(); dah(); dah();
letter_space();
}
void send_p() {
dit(); dah(); dah(); dit();
letter_space();
}
void send_q() {
dah(); dah(); dit(); dah();
letter_space();
}
void send_r() {
dit(); dah(); dit();
letter_space();
}
void send_s() {
dit(); dit(); dit();
letter_space();
}
void send_t() {
dah();
letter_space();
}
void send_u() {
dit(); dit(); dah();
letter_space();
}
void send_v() {
dit(); dit(); dit(); dah();
letter_space();
}
void send_w() {
dit(); dah(); dah();
letter_space();
}
void send_x() {
dah(); dit(); dit(); dah();
letter_space();
}
void send_y() {
dah(); dit(); dah(); dah();
letter_space();
}
void send_z() {
dah(); dah(); dit(); dit();
letter_space();
}
void send_comma() {
dah(); dah(); dit(); dit(); dah(); dah();
letter_space();
}
void send_period() {
dit(); dah(); dit(); dah(); dit(); dah();
letter_space();
}
void send_0() {
dah(); dah(); dah(); dah(); dah();
letter_space();
}
void send_1() {
dit(); dah(); dah(); dah(); dah();
letter_space();
}
void send_2() {
dit(); dit(); dah(); dah(); dah();
letter_space();
}
void send_3() {
dit(); dit(); dit(); dah(); dah();
letter_space();
}
void send_4() {
dit(); dit(); dit(); dit(); dah();
letter_space();
}
void send_5() {
dit(); dit(); dit(); dit(); dit();
letter_space();
}
void send_6() {
dah(); dit(); dit(); dit(); dit();
letter_space();
}
void send_7() {
dah(); dah(); dit(); dit(); dit();
letter_space();
}
void send_8() {
dah(); dah(); dah(); dit(); dit();
letter_space();
}
void send_9() {
dah(); dah(); dah(); dah(); dit();
letter_space();
}
void dit() {
digitalWrite(signalPin, HIGH);
delay(elementWait); // milliseconds - one dit
digitalWrite(signalPin, LOW);
delay(elementWait);
}
void dah() {
digitalWrite(signalPin, HIGH);
delay(elementWait * 3);
digitalWrite(signalPin, LOW);
delay(elementWait);
}
void letter_space() {
delay(elementWait * 2);
}
void word_space() {
delay(elementWait * 6);
}
void faster() {
wpm = wpm + wpm_step; // increment by 5 till 120
if (wpm > 200)
{
wpm = 200;
Serial.println("200 max");
}
elementWait = 1200 / wpm;
show_wpm();
}
void slower() {
wpm = wpm - wpm_step; // decrement by 5 till 5
if (wpm < 5)
{
wpm = 5;
Serial.println("5 minimum");
}
elementWait = 1200 / wpm;
show_wpm();
}
void show_wpm() {
Serial.print("wpm: ");
Serial.println(wpm);
}
void wpm_increment() {
if (wpm_step == 5)
{
wpm_step = 1;
}
else
{
wpm_step = 5;
}
Serial.print("Speed increment: ");
Serial.println(wpm_step);
}
void random_code() {
// send a random characters Morse equivlent
char* code_char[] = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
",", ".", "?", "!", ":", "\"", "'", "="
};
char* codes[] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--",
"-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", // 26 letters
"-----", ".----", "..---", "...--", "....-", ".....", "-....", "--...", "---..", "----.", // 10 numbers
"--..--", ".-.-.-", "..--..", "..--.", "---...", ".-..-.", ".----.", "-...-" // 8 punctuation
};
String send_char;
String answers;
randomSeed(analogRead(0));
for (int t = 0; t < 70 ; t++) {
randNumber = random(43);
send_char = codes[randNumber];
String x;
for (int i = 0; i < send_char.length(); i++) {
x = send_char.substring(i, i + 1);
if (x == ".") {
dit();
}
else {
dah();
}
}
letter_space();
letter_space();
answers.concat(code_char[randNumber]);
answers.concat(" ");
}
Serial.println(answers);
}
// send random Morse code
#include <Arduino.h>
byte signalPin = 13; // will control oscillator speaker
int wpm = 30; // to start with
int elementWait = 1200 / wpm;
boolean signal_state = LOW;
#include <IRremote.h>
int IRpin = 11;
IRrecv irrecv(IRpin);
decode_results results;
unsigned long value;
void setup() {
pinMode(signalPin, OUTPUT);
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
menu(); // show options on terminal screen
}
void loop() {
if (irrecv.decode(&results))
{
delay(200); //debounce further key speak
value = (results.value);
whatToDo(value); // pass on to case statements
irrecv.resume(); // Receive the next value
}
}
void whatToDo(unsigned long)
{
switch (value) {
case 102: case 2150: // list key - send a long string of random characters for code pratice
random_code();
break;
}
}
void menu() {
Serial.println("List> Send a random group of characters for Morse practice");
}
void random_code() {
// send a random character's Morse equivlent
char* code_char[] =
{"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
",", ".", "?", "!", ":", "\"", "'", "="
};
char* codes[] =
{".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--",
"-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", // 26 letters
"-----", ".----", "..---", "...--", "....-", ".....", "-....", "--...", "---..", "----.", // 10 numbers
"--..--", ".-.-.-", "..--..", "..--.", "---...", ".-..-.", ".----.", "-...-" // 8 punctuation
};
String send_char; String answers;
for (unsigned int t = 0; t < 70 ; t++) // each run will be 70 characters and 69 spaces, one line on my screen
{
randomSeed(analogRead(0));
unsigned int randNumber = random(43); // 0 - 43, all characters
//unsigned int randNumber = 43;
send_char = codes[randNumber];
String x;
for (unsigned int i = 0; i < send_char.length(); i++)
{
x = send_char.substring(i, i + 1);
if (x == ".") dit(); else dah();
}
letter_space(); letter_space(); // this is legal when practicing code
answers.concat(code_char[randNumber]); answers.concat(" ");
//delay(15);
}
Serial.println(answers);
Serial.print(answers.length() / 2); // space between characters
Serial.println(" characters");
}
void dit() {
digitalWrite(signalPin, HIGH);
delay(elementWait); // milliseconds - one dit
digitalWrite(signalPin, LOW);
delay(elementWait);
}
void dah() {
digitalWrite(signalPin, HIGH);
delay(elementWait * 3);
digitalWrite(signalPin, LOW);
delay(elementWait);
}
void letter_space() {
delay(elementWait * 2);
}
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?