Моя проблема, 51:28: ошибка: ожидаемое первичное выражение перед токеном ')' может кто-нибудь дать мне совет или направить меня к исправлению моей проблемы? Без разницы

// ноты в мелодии:
int melody[] = {

};

// длительности нот: 4 = четвертная нота, 8 = восьмая нота и т. д.:
int noteDurations[] = {

  4, 8, 8, 4, 4, 4, 4, 4
};


//Константы:
const int ledPin = 2;   // контакт 3 имеет функцию ШИМ
const int flexPin = A0; // контакт A0 для чтения аналогового входа
const int ledoth = 4;
const int flexPin2 = A1;


//Переменные:
int value; //сохраняем аналоговое значение


void setup(){
  
  pinMode(ledPin, OUTPUT);  //Установить контакт 3 как «выход»
  Serial.begin(9600);       // Начать последовательную связь
  pinMode(ledoth, OUTPUT);
  Serial.begin(9600);

}

void loop(){
  
  value = analogRead(flexPin);         //Чтение и сохранение аналогового значения с потенциометра
  Serial.println(value);               //Распечатать значение
  value = analogRead(flexPin2);
  Serial.println(value);
  // Низкая нота (красный)
 // значение = карта (значение, 400, 600, 0, 255); // Сопоставить значение 0-1023 с 0-255 (ШИМ)
  
  if(value<767)
  {digitalWrite(ledoth,LOW);
    digitalWrite(ledPin,LOW);
  
     //аналоговая запись(ledPin, значение); //Отправляем значение ШИМ на светодиод
      delay(100);  
    //Небольшая задержка
  }
  
  ***if ((flexPin)) value<910;))&& (value>767));***
  {digitalWrite(ledoth,LOW);
    digitalWrite(ledPin,HIGH);
  
     //аналоговая запись(ledPin, значение); //Отправляем значение ШИМ на светодиод
     delay(100);   
    //Небольшая задержка
  }
  //Высокая нота (синяя)
 // значение = карта (значение, 700, 900, 256, 1000); // Сопоставить значение 0-1023 с 0-255 (ШИМ)
  
  if(value>910){
  digitalWrite(ledPin,LOW);
    digitalWrite(ledoth,HIGH);  {

  // перебираем ноты мелодии:

  for (int thisNote = 0; thisNote < 8; thisNote++) {

    // чтобы рассчитать длительность ноты, возьмите одну секунду, деленную на тип ноты.

    //например, четвертная нота = 1000/4, восьмая = 1000/8 и т. д.

    int noteDuration = 1000 / noteDurations[thisNote];

    tone(4, melody[thisNote], noteDuration);

    // чтобы различать ноты, установите минимальное время между ними.

    // продолжительность ноты + 30% работает хорошо:

    int pauseBetweenNotes = noteDuration * 1.30;

    delay(pauseBetweenNotes);

    // остановить воспроизведение звука:

    noTone(8);
    }

  }
  //аналоговая запись(ледот, значение); //Отправляем значение ШИМ на светодиод
    delay(100);    }                      //Небольшая задержка
}

, 👍-1

Обсуждение

Ваши брекеты не подходят. Условие оператора if должно быть заключено в один набор фигурных скобок ( ). Внутри вы можете использовать больше фигурных скобок, чтобы структурировать условие. В вашем коде скобка, открывающая условие операторов if, закрывается после flexpin, хотя ваши условия, похоже, продолжаются. Кроме того, наличие flexpin там не имеет для меня особого смысла. Полностью перепишите эту строку с правильным синтаксисом C++., @chrisl


1 ответ


1

Эта строка вообще не имеет никакого смысла. Просто посчитайте открывающие и закрывающие скобки и т. д.

if ((flexPin)) value<910;))&& (value>767));
{digitalWrite(ledoth,LOW); digitalWrite(ledPin,HIGH);

Давайте проанализируем это:

  1. if ((flexPin)) value<910; flex pin не равен нулю, так что это в основном "if (true) compapare value больше 767 и ничего не делать с результатом ;"
  2. )) && (value>767)) 4 закрывающих скобки, одна открывающая - абсолютная синтаксическая ошибка - как будто вы случайно скопировали что-то не туда
  3. ; { неуместная точка с запятой приводит к if ((value < 910) && (value > 767)); { что-нибудь; ничего не делать, а затем безоговорочно делать "что-то"

Согласно коду, это должно быть так:

  if ((value < 910) && (value > 767)) { // для значений от 767 до 910, исключая do:
    digitalWrite(ledoth,LOW);
    digitalWrite(ledPin,HIGH);
  
    //аналоговая запись(ledPin, значение); //Отправляем значение ШИМ на светодиод
    delay(100);                     //Небольшая задержка
  }

Кстати, я понятия не имею, что это ((flexPin)) там должно было означать.

,