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". Кто-нибудь знает, как решить эту проблему?

, 👍0

Обсуждение

Это простая ошибка C (++), а не специфичная для Arduino. Для обращения к элементам массива следует использовать квадратные скобки ([, ]) вместо фигурных скобок. Замените все экземпляры {i} на [i], и все будет в порядке., @StarCat

Я голосую за то, чтобы закрыть этот вопрос, потому что это тривиальный вопрос о синтаксической ошибке., @ocrdu


1 ответ


Лучший ответ:

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