Arduino expected ')' before '{' токен
for (byte i = 0; i < mfrc522.uid.size; i++)
{
Serial.print(mfrc522.uid.uidByte{i} < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte{i}, HEX);
content.concat(String(mfrc522.uid.uidByte{i} < 0x10 ? " 0" : " "));
content.concat(String(mfrc522.uid.uidByte{i}, HEX));
}
Я использую этот код, чтобы получить UID RFID-карты, но появляется ошибка "expected ')' before '{' token"
. Кто-нибудь знает, как решить эту проблему?
@Tingkai Yan, 👍0
Обсуждение1 ответ
Лучший ответ:
Добро пожаловать на этот сайт, в следующий раз используйте ctrl-k для выравнивания кода.
Проблема заключается в следующем:
Serial.print(mfrc522.uid.uidByte{i} < 0x10 ? " 0" : " ");
Чтобы получить значение массива, используйте [i]
, а не {i}
, таким образом
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
(аналогично другим линиям).
Чтобы дать некоторые дополнительные подсказки:
Попробуйте предотвратить дублирование кода, сохранив байт в переменной. Теперь вы можете использовать
uidValue
в последующих строках.uint8_t uidValue = mfrc522.uid.uidByte[i];
Храните 0x10 внутри константы.
Таким образом, вы получаете:
const uint8_t MAX_HEX_SINGLE_DIGIT_VALUE 0x0F;
for (byte i = 0; i < mfrc522.uid.size; i++)
{
uint8_t uid_byte = mfrc522.uid.uidByte[i];
Serial.print(uid_byte < LOW_VALUE <= MAX_HEX_SINGLE_DIGIT_VALUE ? " 0" : " ");
Serial.print(uid_byte, HEX);
content.concat(String(uid_byte < MAX_HEX_SINGLE_DIGIT_VALUE ? " 0" : " "));
content.concat(String((uid_byte, HEX));
}
Я предполагаю, что последовательные линии предназначены только для отладки, в противном случае вы можете объединить их тоже.
Большое тебе спасибо, Мишель., @Tingkai Yan
Если ответ поможет, подумайте о голосовании, и если ответ решит вашу проблему, также примите его., @Michel Keijzers
Мишель, если ты отвечаешь на вопрос с синтаксической ошибкой, то, по крайней мере, без синтаксических ошибок. Я думал, вы согласились с тем, что на вопросы о синтаксических ошибках отвечать не следует., @Juraj
@Juraj У меня нет под рукой компилятора... и я попрошу перенести вопрос в StackOverflow., @Michel Keijzers
они отклонят вопрос о синтаксической ошибке. это не по теме на SO, @Juraj
Итак, как оп может получить ответ? Для начинающего программиста, я могу себе представить, что не сразу тривиально использовать [] вместо {}., @Michel Keijzers
задавать вопрос по поводу каждой синтаксической ошибки - это не способ научиться кодированию. курс кодирования - это гораздо лучший способ, @Juraj
@Juraj .. Однако, по крайней мере, вместо ответа можно было бы найти дублирующий вопрос. Хотя я надеюсь, что если ОП останется заинтересованным, он проведет курс или, по крайней мере, узнает, как работает синтаксис C (++)., @Michel Keijzers
- Ошибка: expected unqualified-id before 'if'
- ошибка: expected primary-expression before '(' token
- GSM-модуль IOT-GA6 Arduino + ошибка CME 58
- Ошибка: Переменная или поле объявлены недействительными
- Не могу использовать uint16_t в библиотеке
- Не удалось скомпилировать библиотеки c++11, несмотря на добавление-std=c++11 в platform.txt
- Возврат структуры из функции порождает ошибку компиляции "does not name a type"
- C++ против языка Arduino?
Это простая ошибка C (++), а не специфичная для Arduino. Для обращения к элементам массива следует использовать квадратные скобки (
[
,]
) вместо фигурных скобок. Замените все экземпляры{i}
на[i]
, и все будет в порядке., @StarCatЯ голосую за то, чтобы закрыть этот вопрос, потому что это тривиальный вопрос о синтаксической ошибке., @ocrdu