Hey all, so I'm writing some little improvements to the Morse example library, but for some reason all of the elements in my byte array are 0 when I run it.. I've tried a couple different things, but it's always the same. I feel like I'm missing something... Code to follow.
#include "Arduino.h"
#include "Morse.h"
byte dotMatrix[36][5] = { // 0 = ., 1 = -, 2 = no display
{ 1, 1, 1, 1, 1 }, // 0 -----
{ 0, 1, 1, 1, 1 }, // 1 .----
{ 0, 0, 1, 1, 1 }, // 2 ..---
{ 0, 0, 0, 1, 1 }, // 3 ...--
{ 0, 0, 0, 0, 1 }, // 4 ....-
{ 0, 0, 0, 0, 0 }, // 5 .....
{ 1, 0, 0, 0, 0 }, // 6 -....
{ 1, 1, 0, 0, 0 }, // 7 --...
{ 1, 1, 1, 0, 0 }, // 8 ---..
{ 1, 1, 1, 1, 0 }, // 9 ----.
{ 0, 1, 2, 2, 2 }, // a .-
{ 1, 0, 0, 0, 2 }, // b -...
{ 1, 0, 1, 0, 2 }, // c -.-.
{ 1, 0, 0, 2, 2 }, // d -..
{ 0, 2, 2, 2, 2 }, // e .
{ 0, 0, 1, 0, 2 }, // f ..-.
{ 1, 1, 0, 2, 2 }, // g --.
{ 0, 0, 0, 0, 2 }, // h ....
{ 0, 0, 2, 2, 2 }, // i ..
{ 0, 1, 1, 1, 2 }, // j .---
{ 1, 0, 1, 2, 2 }, // k -.-
{ 0, 1, 0, 0, 2 }, // l .-..
{ 1, 1, 2, 2, 2 }, // m --
{ 1, 0, 2, 2, 2 }, // n -.
{ 1, 1, 1, 2, 2 }, // o ---
{ 0, 1, 1, 0, 2 }, // p .--.
{ 1, 1, 0, 1, 2 }, // q --.-
{ 0, 1, 0, 2, 2 }, // r .-.
{ 0, 0, 0, 2, 2 }, // s ...
{ 1, 2, 2, 2, 2 }, // t -
{ 0, 0, 1, 2, 2 }, // u ..-
{ 0, 0, 0, 1, 2 }, // v ...-
{ 0, 1, 1, 2, 2 }, // w .--
{ 1, 0, 0, 1, 2 }, // x -..-
{ 1, 0, 1, 1, 2 }, // y -.--
{ 1, 1, 0, 0, 2 } // z --..
};
Morse::Morse(int pin, int delayTime)
{
pinMode(pin, OUTPUT);
_pin = pin;
_delayTime = delayTime;
}
void Morse::dot()
{
digitalWrite(_pin, HIGH);
delayDot();
digitalWrite(_pin, LOW);
}
void Morse::dash()
{
digitalWrite(_pin, HIGH);
delayDot();
delayDot();
delayDot();
digitalWrite(_pin, LOW);
}
void Morse::delayDot()
{
delay(_delayTime);
}
void Morse::delayLetter()
{
delay(3 * _delayTime);
}
void Morse::delayWord()
{
delay(7 * _delayTime);
}
void Morse::writeLetter(int letter)
{
Serial.print("Output '"+String(letter)+"': ");
for (int i = 0; i < 5; i++)
{
byte dotmatrixelement = dotMatrix[letter][i];
Serial.print(dotmatrixelement);
if (dotMatrix[letter][i] == 1)
dash();
else if (dotMatrix[letter][i] == 0)
dot();
if (i < 4)
delayDot();
}
Serial.println(" ...Done!");
}
void Morse::writeStr(String text)
{
for (int i = 0; i < 36; i++)
{
for (int j = 0; j < 5; ++j)
{
Serial.print(String(dotMatrix[i][j]));
}
Serial.println(",");
}
text.toLowerCase();
for (unsigned int i = 0; i < text.length(); i++)
{
byte letter = byte(text.charAt(i));
if (letter == 32)
{
delayWord();
Serial.println("Delay Word...");
}
else
{
if (i != 0)
{
delayLetter();
Serial.println("Delay letter...");
}
if (letter >= 48 && letter <= 57)
{
writeLetter(letter - 48);
Serial.println("Display '" + text.substring(i, i+1) + "' as " + String(letter));
}
else if (letter >= 97 && letter <= 122)
{
writeLetter(letter - 87);
Serial.println("Display '" + text.substring(i, i+1) + "' as " + String(letter));
}
}
}
}
My output is ending up like this:
Output '18': 00000 ...Done!
Display 'i' as 105
Delay Word...
Delay letter...
Output '21': 00000 ...Done!
Display 'l' as 108
Delay letter...