-
Notifications
You must be signed in to change notification settings - Fork 0
/
arduino_color_morse_transmitter.c
77 lines (64 loc) · 1.71 KB
/
arduino_color_morse_transmitter.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
const char *codes[] = {
// letters
".-","-...","-.-.","-..", ".", "..-.", "--.",
"....", "..", ".---", "-.-", ".-..", "--",
"-.", "---", ".--.", "--.-", ".-.", "...", "-",
"..-", "...-", ".--", "-..-", "-.--", "--..",
// numbers
"-----", ".----", "..---", "...--", "....-",
".....", "-....", "--...", "---..", "----."
};
const int redPin = 11;
const int greenPin = 9;
const int bluePin = 10;
const int morseDelay = 200;
void setup() {
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
digitalWrite(redPin, LOW);
digitalWrite(greenPin, LOW);
digitalWrite(bluePin, LOW);
}
void loop() {
morse("sos", 255, 0, 0); // red 'sos'
morse("arduino", 100, 255, 100); // light green 'arduino'
}
void morse(char *text, int r, int g, int b) {
int c = 0;
char ch = text[0];
int pos = 0;
while (ch != 0) {
if (ch == ' ') {
delay(morseDelay * 7);
} else {
if (ch >= 'A' && ch <= 'Z') {
ch -= 'A';
ch += 'a';
}
if ((ch >= 'a' && ch <= 'z')) {
pos = ch - 'a';
} else if (ch >= '0' && ch <= '9') {
pos = ch - '0' + 26;
} else {
pos = -1;
}
if (pos >= 0) {
for (int i=0; i<strlen(codes[pos]); i++) {
int dd = codes[pos][i] == '.' ? morseDelay : (morseDelay*3);
analogWrite(redPin, r);
analogWrite(greenPin, g);
analogWrite(bluePin, b);
delay(dd);
digitalWrite(redPin, LOW);
digitalWrite(greenPin, LOW);
digitalWrite(bluePin, LOW);
delay(morseDelay);
}
delay(morseDelay * 3);
}
}
ch = text[++c];
}
delay(morseDelay * 7);
}