Skip to content

Instantly share code, notes, and snippets.

@arpanghosh8453
Last active May 2, 2024 03:19
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save arpanghosh8453/9537cdbf692aaeaf7fb26fd3cf3f3130 to your computer and use it in GitHub Desktop.
Save arpanghosh8453/9537cdbf692aaeaf7fb26fd3cf3f3130 to your computer and use it in GitHub Desktop.
A script for sending arbitrary message as morse code signals using a LED light with flipper zero GPIO
let keyboard = require("keyboard");
let submenu = require("submenu");
let storage = require("storage");
let notify = require("notification");
let gpio = require("gpio"); // remove this if you are not using any GPIO (only using internal LED)
function blink_morse_code(morse_letter, morse_led_pin, time_delay) {
for (let i = 0; i < morse_letter.length; i++) {
if (chr(morse_letter.at(i)) === '.'){
if (morse_led_pin === 'INTERNAL'){
notify.blink("red", "short");
} else {
gpio.write(morse_led_pin, true); // high
delay(time_delay)
gpio.write(morse_led_pin, false); // low
}
} else if (chr(morse_letter.at(i)) === '-') {
if (morse_led_pin === 'INTERNAL'){
notify.blink("red", "long");
} else {
gpio.write(morse_led_pin, true); // high
delay(time_delay*3)
gpio.write(morse_led_pin, false); // low
}
} else {
delay(time_delay*7);
};
delay(time_delay);
};
};
function arraybuf_to_string(arraybuf) {
let string = "";
let data_view = Uint8Array(arraybuf);
for (let i = 0; i < data_view.length; i++) {
string += chr(data_view[i]);
}
return string;
}
let alphabet = {
'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': '--..', ' ': ' ',
'1': '.----', '2': '..---', '3': '...--', '4': '....-',
'5': '.....', '6': '-....', '7': '--...', '8': '---..',
'9': '----.', '0': '-----',
};
if (storage.exists( __dirpath + "/morse_led_pin.txt")){
print("LED pin configured");
} else {
storage.write( __dirpath + "/morse_led_pin.txt", "INTERNAL");
};
if (storage.exists( __dirpath + "/morse_message.txt")){
print("Morse message configured");
} else {
storage.write( __dirpath + "/morse_message.txt", "sos");
};
if (storage.exists( __dirpath + "/morse_delay.txt")){
print("Morse delay configured");
} else {
storage.write( __dirpath + "/morse_delay.txt", "60");
};
if (storage.exists( __dirpath + "/morse_repeat.txt")){
print("Morse repeat configured");
} else {
storage.write( __dirpath + "/morse_repeat.txt", "0");
};
submenu.addItem("Send signal", 0);
submenu.addItem("Configure LED pin", 1);
submenu.addItem("Configure message", 2);
submenu.addItem("Configure delay", 3);
submenu.addItem("Repeat forever?", 4);
submenu.setHeader("Select an option:");
let result = submenu.show();
// Returns undefined when pressing back
if (result === 0){
let morse_led_pin = to_upper_case(arraybuf_to_string(storage.read(__dirpath + "/morse_led_pin.txt")));
let message = arraybuf_to_string(storage.read(__dirpath + "/morse_message.txt"));
let time_delay = parse_int(arraybuf_to_string(storage.read(__dirpath + "/morse_delay.txt")));
let repeat = parse_int(arraybuf_to_string(storage.read(__dirpath + "/morse_repeat.txt")));
// initialize pins
if (morse_led_pin !== 'INTERNAL'){
gpio.init(morse_led_pin, "outputPushPull", "up"); // pin, mode, pull
gpio.write(morse_led_pin, false); // low
}
for (let i = 0; i < message.length; i++) {
print("Sending", chr(message.at(i)), ">>>", alphabet[chr(message.at(i))]);
blink_morse_code(alphabet[chr(message.at(i))], morse_led_pin, time_delay)
delay(time_delay*3)
};
if (repeat) {
delay(time_delay*7)
};
while (repeat) {
for (let i = 0; i < message.length; i++) {
print("Sending", chr(message.at(i)), ">>>", alphabet[chr(message.at(i))]);
blink_morse_code(alphabet[chr(message.at(i))], morse_led_pin, time_delay)
delay(time_delay*3)
};
delay(time_delay*7)
};
};
if (result === 1){
keyboard.setHeader("Enter LED pin name");
let text = to_lower_case(keyboard.text(10, "INTERNAL", true));
// Returns undefined when pressing back
if (text){
let success = storage.write( __dirpath + "/morse_led_pin.txt", text);
print("Writing to file : ", success);
};
};
if (result === 2){
keyboard.setHeader("Enter your message");
let text = to_lower_case(keyboard.text(100, "SOS", true));
// Returns undefined when pressing back
if (text){
let success = storage.write( __dirpath + "/morse_message.txt", text);
print("Writing to file : ", success);
};
};
if (result === 3){
keyboard.setHeader("Enter your delay in ms");
let text = to_lower_case(keyboard.text(5, "60", true));
// Returns undefined when pressing back
if (text){
let success = storage.write( __dirpath + "/morse_delay.txt", text);
print("Writing to file : ", success);
};
};
if (result === 4){
keyboard.setHeader("Enter 0 (false) or 1 (true) ");
let text = to_lower_case(keyboard.text(5, "0", true));
// Returns undefined when pressing back
if (text){
let success = storage.write( __dirpath + "/morse_repeat.txt", text);
print("Writing to file : ", success);
};
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment