«Серийный» не называет тип -> Как решить эту проблему?

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

Красная линия была нарисована на последнем Serial.println */

int cds = A0;
int led = 12;
int trig1 = 2;      // Левый триггер
int trig2 = 3;      // Правый триггер
int trig3 = 4;      // Передний триггер
int trig4 = 5;      // Восходящий триггер
int echo1 = 6;      // Левое эхо
int echo2 = 7;      // Правое эхо
int echo3 = 8;      // Фронтальное эхо
int echo4 = 9;      // Верхнее эхо
int vib1 = 10;      // Левый вибратор
int vib2 = 11;      // Правильный вибратор


void setup() {
        pinMode(led, OUTPUT);

        pinMode(trig1, OUTPUT);
        pinMode(trig2, OUTPUT);
        pinMode(trig3, OUTPUT);
        pinMode(trig4, OUTPUT);
        pinMode(echo1, INPUT);
        pinMode(echo2, INPUT);
        pinMode(echo3, INPUT);
        pinMode(echo4, INPUT);
        pinMode(vib1, OUTPUT);
        pinMode(vib2, OUTPUT);

        Serial.begin(9600);   
}


void loop(){
  long duration1, value1;
  long duration2, value2;
  long duration3, value3;
  long duration4, value4;

  // Ультразвуковой датчик, часть 1
  digitalWrite(trig1,LOW);                           // Вывод триггера
  delayMicroseconds(2);
  digitalWrite(trig1,HIGH);
  delayMicroseconds(5);
  digitalWrite(trig1,LOW);
  duration1 = pulseIn(echo1,HIGH);                   // Чтение длительности импульса
  value1 = microsecondsToCentimeters(duration1);     // Подсчет расстояния
  delay(10);

  // Ультразвуковой датчик, часть 2
  digitalWrite(trig2,LOW);   
  delayMicroseconds(2);       
  digitalWrite(trig2,HIGH);    
  delayMicroseconds(5);
  digitalWrite(trig2,LOW);
  duration2 = pulseIn(echo2,HIGH);
  value2 = microsecondsToCentimeters(duration2);
  delay(10);

  // Ультразвуковой датчик, часть 3
  digitalWrite(trig3,LOW);
  delayMicroseconds(2);
  digitalWrite(trig3,HIGH);
  delayMicroseconds(5);
  digitalWrite(trig3,LOW);
  duration3 = pulseIn(echo3,HIGH);
  value3 = microsecondsToCentimeters(duration3);
  delay(10);

  // Ультразвуковой датчик, часть 4
  digitalWrite(trig4,LOW);
  delayMicroseconds(2);
  digitalWrite(trig4,HIGH);
  delayMicroseconds(5);
  digitalWrite(trig4,LOW);
  duration4 = pulseIn(echo4,HIGH);
  value4 =  microsecondsToCentimeters(duration4);
  delay(10);

  //Рекомендуемая деталь (вибродвигатель)

  // Распечатать значение
  Serial.print(" dist1 =");
  Serial.print(value1);
  Serial.print("(cm)");
  Serial.print(" dist2 =");
  Serial.print(value2);
  Serial.print("(cm)");
  Serial.print(" dist3 =");
  Serial.print(value3);
  Serial.print("(cm)");
  Serial.print(" dist4 =");
  Serial.print(value4);
  Serial.print("(cm)");
  delay(10);
  //

  // Инициализировать вывод
  digitalWrite(vib1,HIGH);
  digitalWrite(vib2,HIGH);

  // 진동모터1,2,3
  if (  value4<60  or  value3<60)
  digitalWrite(vib1,LOW);
  digitalWrite(vib2,LOW);

  delay(100);

  digitalWrite(vib1,HIGH);
  digitalWrite(vib2,HIGH);

  if (0< value1 && value1<60)
  digitalWrite(vib1,LOW);

  delay(100);

  digitalWrite(vib1,HIGH);

  if (0< value2 && value2<60)
  digitalWrite(vib1,LOW);

  delay(100);

  digitalWrite(vib1,HIGH);
}

// Функция подсчета расстояния

long microsecondsToCentimeters(long microseconds)
{
  return microseconds/29/2; 
}

        int cdsValue = analogRead(cds);

        Serial.print("cds =  ");
        Serial.println(cdsValue);

        if (cdsValue < 38 ) {
                digitalWrite(led, HIGH);
        } else {
                digitalWrite(led, LOW);
        }

, 👍0


1 ответ


1

Ваш код будет намного легче читать и находить ошибки, если вы его отформатируете. Я вижу, что вы сделали это в среде IDE, но в вашем вопросе вам нужно выделить весь код, а затем нажать кнопку "{}", чтобы он выглядел как код в вашем вопросе.

Когда я вставил ваш код в свою IDE и автоматически отформатировал его, ответ был сразу ясен: после функции microsecondsToCentimeters() вы написали какой-то код, которого нет ни в одной функции. C и C++ не позволяют этого. Сообщение об ошибке было не очень полезным — компиляторы легко запутались в наших ошибках — но в этом случае просмотр отформатированного кода прояснил ситуацию.

Весь исполняемый код программы на C или C++ (IDE Arduino использует C++) должен находиться внутри типизированной и именованной функции. Поскольку это то, что искал компилятор, похоже, он интерпретировал слово "Serial" как функциональный тип, но ни один тип не был определен с таким именем.

Я не уверен, куда вы хотели направить строки с конца long microsecondsToCentimeters(), но они должны быть где-то внутри функции.

,