«Серийный» не называет тип -> Как решить эту проблему?
Я изо всех сил пытаюсь решить эту проблему, но ничего не изменилось
Красная линия была нарисована на последнем 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 ответ
Ваш код будет намного легче читать и находить ошибки, если вы его отформатируете. Я вижу, что вы сделали это в среде IDE, но в вашем вопросе вам нужно выделить весь код, а затем нажать кнопку "{}", чтобы он выглядел как код в вашем вопросе.
Когда я вставил ваш код в свою IDE и автоматически отформатировал его, ответ был сразу ясен: после функции microsecondsToCentimeters()
вы написали какой-то код, которого нет ни в одной функции. C и C++ не позволяют этого. Сообщение об ошибке было не очень полезным — компиляторы легко запутались в наших ошибках — но в этом случае просмотр отформатированного кода прояснил ситуацию.
Весь исполняемый код программы на C или C++ (IDE Arduino использует C++) должен находиться внутри типизированной и именованной функции. Поскольку это то, что искал компилятор, похоже, он интерпретировал слово "Serial" как функциональный тип, но ни один тип не был определен с таким именем.
Я не уверен, куда вы хотели направить строки с конца long microsecondsToCentimeters()
, но они должны быть где-то внутри функции.
- Как разделить входящую строку?
- Как вывести несколько переменных в строке?
- В чем разница между Serial.write и Serial.print? И когда они используются?
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Программы построения последовательных данных
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Очистить существующий массив при получении новой последовательной команды