не удалось разрешить «определение функции здесь не допускается до токена '{'»

Я, будучи новичком в Arduino, начал с создания простых ЖК-часов, которые также показывают температуру.

Все работало нормально, пока не возникла эта ошибка. "определение функции здесь не разрешено перед токеном '{' "

И я сделал все, чтобы решить проблему. Я написал функцию с нуля. Я где-то читал, что определение функции не может входить в функцию, поэтому я сделал ее глобальной функцией (хотя лично мне почему-то не кажется, что это правда). Но даже тогда ошибке удалось выжить.

Я совершенно расстроен и не знаю, что делать. Кто-нибудь может мне помочь?

вот мой код:-

#include < LiquidCrystal.h >

  const int rs = 12,
    en = 11,
    d4 = 5,
    d5 = 4,
    d6 = 3,
    d7 = 2,
    lm = A0;
int input;
float temp;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void tem() //Вычисляет температуру
{
  int i = analogRead(lm);
  float temp = 500.0 * i / 1024;

  lcd.print("Temp : ");
  lcd.print(temp);
  lcd.print(" ^C");

}

void Clock(int h = 0, int m = 0, int s = 0, char ch = 'A') {
  int H = h;

  char ampm = ch;

  void mornight(char ampm) //меняет утра с утра на после полудня и наоборот
  { //КРАСНАЯ ВЫДЕЛЕННАЯ ЛИНИИ ОШИБКИ
    String AMPM;
    if (ampm == 'A')
      AMPM = "PM";
    else
      AMPM = "AM";

  }
  while (H != 12) //ЧАСОВЫЙ ЦИКЛ
  {
    for (int M = m; M <= 59; M++) //МИНУТНЫЙ ЦИКЛ
    {
      for (int S = s; S <= 59; S++) //ВТОРОЙ ЦИКЛ
      {
        delay(1000);
        lcd.clear();

        if (H < 10) {
          lcd.print('0');
          lcd.print(H);
          lcd.print(':');
        } else {
          lcd.print(H);
          lcd.print(":");
        }
        if (M < 10) {
          lcd.print('0');
          lcd.print(M);
          lcd.print(':');
        } else {
          lcd.print(M);
          lcd.print(":");
        }
        if (S < 10) {
          lcd.print('0');
          lcd.print(S);
          lcd.print(AMPM);
        } else {
          lcd.print(S);
          lcd.print(AMPM);
        }
        lcd.setCursor(0, 1);
        tem(); // показывает температуру

      }
      s = 0;
    }
    m = 0;
    if (H == 23) {
      H = 1;
      mornight(ampm);
    } else
      H++;
  }
}

void setup() {
  lcd.begin(16, 2);
  lcd.setCursor(0, 1);
  Clock(10, 1, 20);

}
void loop() {

}

, 👍-2


2 ответа


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

1

Ваша линия:

void mornight(char ampm)

Пытается определить функцию под названием mornight() внутри Clock().

Функции являются «глобальными», если они определены вне какой-либо другой функции. Я не понимаю, что вы пытались сделать, чтобы сделать эту функцию глобальной, но помимо объектно-ориентированного программирования простые функции всегда глобальны.

«Неглобальная» функция будет означать определение класса и объявление функции внутри определения класса; но даже в этом случае вам придется определить функцию (то есть фактические инструкции в функции) вне любого другого определения класса или функции.

,

0

Переместить функцию void mornight(char ampm) за пределы функции void Clock(int h = 0, int m = 0, int s = 0, char ch = 'A') {

как сказано в сообщении об ошибке, функция не может быть определена внутри функции

,