@name Morse Out
@inputs Color:wirelink Start KB:wirelink Reset
@outputs Char Send String:string StringClk MorseString:string Keyboard
@persist Morse:string LastKeyboard
# 13 32 97 122
if (!Send) {
interval(10)
Keyboard=KB:readCell(1)
if (Keyboard & Keyboard!=LastKeyboard & !Send) {
if ((Keyboard>=97 & Keyboard<=122)|Keyboard==32) {
String=String+toChar(Keyboard)
}
if (Keyboard==127 & String) {
String=String:left(String:length()-1)
}
if (Keyboard==13) {
Enter=1
}
StringClk=1
LastKeyboard=Keyboard
}
}
if (!Keyboard) {
StringClk=0
}
if (Send==2) {
interval(100)
if (Char<MorseString:length() & clk()) {
Char++
Color:setNumber("Fire",0)
if (MorseString:index(Char)=="=") {
Color:setNumber("R",254)
}
if (MorseString:index(Char)==".") {
Color:setNumber("R",0)
}
Color:setNumber("Fire",1)
}
if (Char>=MorseString:length()) {
Send=0
String=""
}
}
if (Send==1) {
interval(20)
if (Char<String:length() & clk()) {
Char++
if (String:index(Char)=="a") {Morse="=.===..."}
if (String:index(Char)=="b") {Morse="===.=.=.=..."}
if (String:index(Char)=="c") {Morse="===.=.===.=..."}
if (String:index(Char)=="d") {Morse="===.=.=..."}
if (String:index(Char)=="e") {Morse="=..."}
if (String:index(Char)=="f") {Morse="=.=.===.=..."}
if (String:index(Char)=="g") {Morse="===.===.=..."}
if (String:index(Char)=="h") {Morse="=.=.=.=..."}
if (String:index(Char)=="i") {Morse="=.=..."}
if (String:index(Char)=="j") {Morse="=.===.===.===..."}
if (String:index(Char)=="k") {Morse="===.=.===..."}
if (String:index(Char)=="l") {Morse="=.===.=.=..."}
if (String:index(Char)=="m") {Morse="===.===..."}
if (String:index(Char)=="n") {Morse="===.=..."}
if (String:index(Char)=="o") {Morse="===.===.===..."}
if (String:index(Char)=="p") {Morse="=.===.===.=..."}
if (String:index(Char)=="q") {Morse="===.===.=.===..."}
if (String:index(Char)=="r") {Morse="=.===.=..."}
if (String:index(Char)=="s") {Morse="=.=.=..."}
if (String:index(Char)=="t") {Morse="===..."}
if (String:index(Char)=="u") {Morse="=.=.===..."}
if (String:index(Char)=="v") {Morse="=.=.=.===..."}
if (String:index(Char)=="w") {Morse="=.===.===..."}
if (String:index(Char)=="x") {Morse="===.=.=.===..."}
if (String:index(Char)=="y") {Morse="===.=.===.===..."}
if (String:index(Char)=="z") {Morse="===.===.=.=..."}
if (String:index(Char)==" ") {Morse="...."}
MorseString=MorseString+Morse
}
if (Char==String:length()) {
MorseString=MorseString+"=.=.=.===.=.===."
Send=2
Char=0
interval(1000)
}
}
if ((~Start&Start)|Enter) {
Color:setNumber("R",0)
Color:setNumber("G",0)
Color:setNumber("B",0)
Color:setNumber("A",255)
Send=1
MorseString=""
Enter=Char=0
}
if (~Reset&Reset) {
Color:setNumber("R",0)
Color:setNumber("G",0)
Color:setNumber("B",0)
Color:setNumber("A",255)
MorseString=String=""
LastKeyboard=Keyboard=Enter=Char=Send=0
}
Bookmarks