Morsealfabetet översättare (5 / 6 steg)
Steg 5: Program
Obs: om du har haft några uppleva programmera Arduino innan, kanske du undrar varför jag inte helt enkelt ersätta den långa strängen av "om... annat "s som identifierar varje tecken med en switch case-sats. Men efter en huvudvärk, och en kombination av forskning och felsökning upptäckte jag att alternativet fall kan bara acceptera ett visst värde, och inte en rad tecken. Så mycket för min lathet...
int LED = 2;
int buzzerPin = 3;
int dot = 250;
char * morseLetters [] = {".-", "-...", "-.-.", "-..",".",".. -.", "--.", "....", "..",".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.","...", "-", ".. -", "...-", ".--", "-.. -", "-.--", "--.." };
char * morseNumbers [] = {"---","---", ".. ---", "...--", "....-", ".....", "-....", "--...", "---..", "----."};
void setup()
{
pinMode (LED, OUTPUT);
pinMode (buzzerPin, produktionen);
Serial.BEGIN(9600);
}
void loop()
{
char info;
om (Serial.available() > 0) {
information = Serial.read();
om (info > = "a" & & information < = "z") {//We kan använda används genom att varje ASCII-kod är ett antal
letterId (morseLetters [info - 'a']);
}
annars om (info > = "A" & & information < = "Z") {
letterId (morseLetters [info - 'A']);
}
annars om (info > = 0 & & information < = 9) {
letterId (morseNumbers [info - 0]);
}
annars om (information == "") {
Delay(dot * 4);
}
}
}
void letterId (char * karaktär) {
int jag = 0;
medan (karaktär [i]! = '\0') {
output(Character[i]);
i ++;
}
Delay(dot * 3);
}
Annullera utdata (char ID) {
digitalWrite(LED,HIGH);
digitalWrite(buzzerPin,HIGH);
om (ID == ".") {
Delay(dot);
}
annat {
Delay(dot * 3);
}
digitalWrite(LED,LOW);
digitalWrite(buzzerPin,LOW);
Delay(dot);
}