nightfury commited on
Commit
2cc62f6
·
verified ·
1 Parent(s): a04cd9f

Create Index.html

Browse files
Files changed (1) hide show
  1. Index.html +237 -0
Index.html ADDED
@@ -0,0 +1,237 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Morse Code Decoder</title>
5
+ <style>
6
+ body {
7
+ font-family: sans-serif;
8
+ display: flex;
9
+ flex-direction: column;
10
+ align-items: center;
11
+ padding: 20px;
12
+ }
13
+
14
+ .container {
15
+ width: 80%;
16
+ max-width: 600px;
17
+ }
18
+
19
+ textarea, input {
20
+ width: 100%;
21
+ padding: 8px;
22
+ margin-bottom: 10px;
23
+ box-sizing: border-box;
24
+ }
25
+
26
+ button {
27
+ padding: 10px 20px;
28
+ background-color: #4CAF50;
29
+ color: white;
30
+ border: none;
31
+ cursor: pointer;
32
+ }
33
+
34
+ button:hover {
35
+ background-color: #3e8e41;
36
+ }
37
+
38
+ #led {
39
+ width: 50px;
40
+ height: 50px;
41
+ border-radius: 50%;
42
+ background-color: gray;
43
+ margin-top: 10px;
44
+ }
45
+
46
+ .alphabet-container {
47
+ display: flex;
48
+ flex-wrap: wrap;
49
+ justify-content: center;
50
+ margin-top: 20px;
51
+ }
52
+
53
+ .alphabet-letter {
54
+ width: 30px;
55
+ height: 30px;
56
+ display: flex;
57
+ align-items: center;
58
+ justify-content: center;
59
+ border: 1px solid #ccc;
60
+ margin: 5px;
61
+ cursor: pointer;
62
+ user-select: none; /* Prevent text selection on click */
63
+ }
64
+
65
+ .alphabet-letter:hover {
66
+ background-color: #f0f0f0;
67
+ }
68
+ #status {
69
+ margin-top: 10px;
70
+ font-style: italic;
71
+ }
72
+
73
+ </style>
74
+ </head>
75
+ <body>
76
+
77
+ <div class="container">
78
+ <h1>Morse Code Decoder</h1>
79
+
80
+ <label for="morseInput">Morse Code Input:</label>
81
+ <textarea id="morseInput" rows="4"></textarea>
82
+
83
+ <button onclick="decodeMorse()">Decode</button>
84
+
85
+ <label for="decodedText">Decoded Text:</label>
86
+ <textarea id="decodedText" rows="4" readonly></textarea>
87
+
88
+ <h2>LED Output</h2>
89
+ <div id="led"></div>
90
+
91
+ <h2>Alphabet Input</h2>
92
+ <div class="alphabet-container" id="alphabetContainer">
93
+ </div>
94
+
95
+ <p id="status">Ready</p>
96
+ </div>
97
+
98
+ <script>
99
+ const MORSE_CODE_DICT = {
100
+ 'A': '.-', 'B': '-...', 'C': '-.-.', 'D': '-..', 'E': '.', 'F': '..-.',
101
+ 'G': '--.', 'H': '....', 'I': '..', 'J': '.---', 'K': '-.-', 'L': '.-..',
102
+ 'M': '--', 'N': '-.', 'O': '---', 'P': '.--.', 'Q': '--.-', 'R': '.-.',
103
+ 'S': '...', 'T': '-', 'U': '..-', 'V': '...-', 'W': '.--', 'X': '-..-',
104
+ 'Y': '-.--', 'Z': '--..', '1': '.----', '2': '..---', '3': '...--',
105
+ '4': '....-', '5': '.....', '6': '-....', '7': '--...', '8': '---..',
106
+ '9': '----.', '0': '-----', ', ': '--..--', '.': '.-.-.-', '?': '..--..',
107
+ '/': '-..-.', '-': '-....-', '(': '-.--.', ')': '-.--.-'
108
+ };
109
+
110
+ const dotDuration = 200; // milliseconds
111
+ const dashDuration = dotDuration * 3;
112
+ const spaceDuration = dotDuration * 7;
113
+ const letterSpaceDuration = dotDuration * 3;
114
+
115
+ const morseInput = document.getElementById("morseInput");
116
+ const decodedText = document.getElementById("decodedText");
117
+ const led = document.getElementById("led");
118
+ const alphabetContainer = document.getElementById("alphabetContainer");
119
+ const status = document.getElementById("status");
120
+
121
+ // Generate alphabet buttons
122
+ const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
123
+ for (let i = 0; i < alphabet.length; i++) {
124
+ const letter = alphabet[i];
125
+ const letterDiv = document.createElement("div");
126
+ letterDiv.classList.add("alphabet-letter");
127
+ letterDiv.textContent = letter;
128
+ letterDiv.addEventListener("click", function() {
129
+ if (MORSE_CODE_DICT[letter]) {
130
+ morseInput.value += MORSE_CODE_DICT[letter] + " "; // Add space after each letter
131
+ } else {
132
+ alert("Morse Code not found for this Character")
133
+ }
134
+ });
135
+ alphabetContainer.appendChild(letterDiv);
136
+ }
137
+
138
+ function decodeMorse() {
139
+ const morseCode = morseInput.value.toUpperCase().trim();
140
+ status.textContent = "Decoding..."; // Start decoding
141
+
142
+ if (!morseCode) {
143
+ status.textContent = "Please enter Morse code.";
144
+ return;
145
+ }
146
+
147
+ try {
148
+ const decoded = morseToText(morseCode);
149
+ decodedText.value = decoded;
150
+ status.textContent = "Decoding Complete" // Success!
151
+ displayLED(morseCode);
152
+ } catch (error) {
153
+ decodedText.value = error; // Display Error
154
+ status.textContent = `Error: ${error}`;
155
+ turnOffLED(); // Turn off led
156
+ }
157
+
158
+ }
159
+
160
+ function morseToText(morseCode) {
161
+ morseCode = morseCode.replace("/", " / "); // Handle word separators
162
+ const words = morseCode.split(" / ");
163
+ let text = "";
164
+ for (const word of words) {
165
+ const letters = word.split(" ");
166
+ for (const letter of letters) {
167
+ let found = false;
168
+ for (const key in MORSE_CODE_DICT) {
169
+ if (MORSE_CODE_DICT[key] === letter) {
170
+ text += key;
171
+ found = true;
172
+ break;
173
+ }
174
+ }
175
+ if (!found && letter) {
176
+ throw `Invalid Morse code: ${letter}`; // Throw exception for non found letters
177
+ }
178
+ }
179
+ text += " ";
180
+ }
181
+ return text.trim();
182
+ }
183
+
184
+ function displayLED(morseCode) {
185
+ let i = 0;
186
+ function animate() {
187
+ if (i < morseCode.length) {
188
+ const symbol = morseCode[i];
189
+ if (symbol === '.') {
190
+ turnOnLED();
191
+ setTimeout(() => {
192
+ turnOffLED();
193
+ setTimeout(() => {
194
+ i++;
195
+ animate();
196
+ }, dotDuration);
197
+ }, dotDuration);
198
+ } else if (symbol === '-') {
199
+ turnOnLED();
200
+ setTimeout(() => {
201
+ turnOffLED();
202
+ setTimeout(() => {
203
+ i++;
204
+ animate();
205
+ }, dotDuration);
206
+ }, dashDuration);
207
+ } else if (symbol === ' ') {
208
+ setTimeout(() => {
209
+ i++;
210
+ animate();
211
+ }, letterSpaceDuration);
212
+ }
213
+ else if (symbol === '/') {
214
+ setTimeout(() => {
215
+ i++;
216
+ animate();
217
+ }, spaceDuration);
218
+ }
219
+
220
+ } else {
221
+ turnOffLED();
222
+ }
223
+ }
224
+ animate();
225
+ }
226
+
227
+ function turnOnLED() {
228
+ led.style.backgroundColor = "yellow";
229
+ }
230
+
231
+ function turnOffLED() {
232
+ led.style.backgroundColor = "gray";
233
+ }
234
+ </script>
235
+
236
+ </body>
237
+ </html>