I am building a type of telegraph with my Arduino and instead of using Morse code I am taking each character and giving it a value of 1-26 (a-z), 27 for a space and 28 for unknown. Then I convert that number to binary. But I keep getting errors. Could someone please help me? Thanks!
int button_0 = 13;
int button_1 = 12;
int out_0 = 11;
int out_1 = 10;
int in_0 = 9;
int in_1 = 8;
int buzzer = 7;
void setup() {
pinMode(button_0, INPUT);
pinMode(button_1, INPUT);
pinMode(out_0, OUTPUT);
pinMode(out_1, OUTPUT);
pinMode(in_0, OUTPUT);
pinMode(in_1, OUTPUT);
pinMode(buzzer, OUTPUT);
Serial.begin(9600);
}
void loop() {
Serial.println("Message to binary: ");
String input = "Hello World";
String message = input.toLowerCase();
String binaryNumber = "";
for(int i = 0; i <= message.length(); i++) {
char l = message.charAt(i);
int letter = 0;
if (l == 'a') {
letter = 1;
}
else if (l == 'b') {
letter = 2;
}
else if (l == 'c') {
letter = 3;
}
else if (l == 'd') {
letter = 4;
}
else if (l == 'e') {
letter = 5;
}
else if (l == 'f') {
letter = 6;
}
else if (l == 'g') {
letter = 7;
}
else if (l == 'h') {
letter = 8;
}
else if (l == 'i') {
letter = 9;
}
else if (l == 'j') {
letter = 10;
}
else if (l == 'k') {
letter = 11;
}
else if (l == 'l') {
letter = 12;
}
else if (l == 'o') {
letter = 13;
}
else if (l == 'm') {
letter = 14;
}
else if (l == 'n') {
letter = 15;
}
else if (l == 'p') {
letter = 16;
}
else if (l == 'q') {
letter = 17;
}
else if (l == 'r') {
letter = 18;
}
else if (l == 's') {
letter = 19;
}
else if (l == 't') {
letter = 20;
}
else if (l == 'u') {
letter = 21;
}
else if (l == 'v') {
letter = 22;
}
else if (l == 'w') {
letter = 23;
}
else if (l == 'x') {
letter = 24;
}
else if (l == 'y') {
letter = 25;
}
else if (l == 'z') {
letter = 26;
}
else if (l == ' ') {
letter = 27;
}
else {
letter = 28;
}
binaryNumber = binaryNumber + String(letter, BIN) + " ";
}
Serial.println("Message to binary:\n"+binaryNumber);
}
Here is my error:
binary_telegraph.cpp: In function ‘void loop()’:
binary_telegraph.cpp:37:38: error: conversion from ‘void’ to non-scalar type ‘String’ requested
-
1\$\begingroup\$ What kind of errors are you getting? \$\endgroup\$angelatlarge– angelatlarge2013年03月31日 17:36:34 +00:00Commented Mar 31, 2013 at 17:36
1 Answer 1
toLowerCase()
function converts the object being called on to lower case. It doesn't return anything. So what you probably want to do is:
String input = "Hello World";
String message = input;
message.toLowerCase();
This explains the error: you put a void, a nothing, in the variable message
. This is not an unreasonable error to make, according to the documentation:
Get a lower-case version of a String. As of 1.0, toLowerCase() modifies the string in place rather than returning a new one.
So the toLowerCase()
function used to return a lower-cased version of the string. Now it just modifies the string being called on, and not return anything.
Now, at line 37:
for(int i = 0; i <= message.length(); i++) {
You expect message
to be a String, as you call the length method. Now, the compiler attempts to convert the void in message
to a String, but that's not possible. Therefore, you get an error.
P.S. As a general rule, here's my personal process for debugging these sorts of errors:
- Look at the line where the error occurs
- Check the documentation for all the functions used on that line (in this case here)
- If that doesn't solve it, double-check my assumptions about the language syntax based on the error message.