Помочь отладить этот код, задержка в микросекундах не работает, и сервопривод также записывает на 180
это не мой код, это то, что я нашел в makersguide я пытался использовать то же самое, но это не работает
#include <Servo.h>
// Определение тригонометрического и эхо-вывода:
#define trigPin 10
#define echoPin 9
// Определение переменных:
long duration;
int distance;
void setup() {
// Определение входных и выходных данных:
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
}
void loop() {
// Очистите триггер, установив его на НИЗКОМ уровне:
digitalWrite(trigPin, LOW);
delayMicroseconds(5);
digitalWrite(trigPin,HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Считайте echoPin, pulseIn() возвращает длительность (длину импульса) в
microseconds:
duration = pulseIn(echoPin, HIGH);
// Вычислите расстояние:
distance = duration * 0.034 / 2;
// Выведите расстояние на последовательном мониторе (Ctrl+Shift+M):
Serial.print("Distance = ");
Serial.print(distance);
Serial.println(" cm");
delay(50);
}
// Включить библиотеку сервоприводов:
#include <Servo.h>
// Создать новый сервообъект:
Servo myservo;
// Определите вывод сервопривода:
#define servoPin 9
// Создайте переменную для хранения положения сервопривода:
int angle = 0;
voidsetup() {
// Присоедините серво-переменную к штифту:
myservo.attach(servoPin);
}
void loop(){
myservo.write(90);
delay(1000);
myservo.write(180);
delay(1000);
myservo.write(0);
delay(1000);
// Поворот от 0 до 180 градусов:
for (angle = 0; angle <= 180; angle += 1) {
myservo.write(angle);
delay(0);
}
for (angle = 180; angle <= 0; angle -= 1) {
myservo.write(angle);
delay(0);
}
delay(1000);
}
@NEXE, 👍-1
Обсуждение1 ответ
В вашем коде есть две "циклические" функции. У вас не может быть двух функций с одинаковым именем (и с одинаковым списком аргументов, в вашем случае без аргументов) в одном блоке компиляции (фрагменте кода).
Это очень похоже на то, что вы объединили два найденных фрагмента кода в один, а затем попытались скомпилировать его. Ты не можешь этого сделать. Выбирайте одно или другое. Во второй "половине" у вас неправильно указано "voidsetup", которое должно быть "void setup".
В следующий раз, когда вы будете публиковать вопрос, и если вопрос касается сообщения об ошибке, пожалуйста, скопируйте и вставьте сообщение об ошибке. Мы не умеем читать мысли. Вы можете видеть то, что находится на вашем экране, а мы нет.
Смотрите: Как мне задать хороший вопрос об Arduino?
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
"Не работает" мало о чем нам говорит. Что происходит? Что угодно? Возможно, это проблема с проводкой, которую мы не можем определить, прочитав ваш вопрос. Может быть, это не ** компилируется **? Кажется, у вас есть две функции "loop" и "voidsetup", что бы это ни было., @Nick Gammon
в нем говорится, что мой цикл void ранее определен, @NEXE
и это также говорит о том, что ISO C ++ запрещает объявление void setup без типа [-fpermissive] в функции void loop( ), @NEXE
На самом деле в нем говорилось: "предупреждение: ISO C ++ запрещает объявление 'voidsetup' без типа [-fpermissive]". Обратите внимание, что вы пропустили пробел между "void" и "setup". Вот почему мы просим вас скопировать и вставить сообщение об ошибке, а не просто перефразировать его., @Nick Gammon
Для объединения скетчей посмотрите на это question. Есть также ссылки на аналогичные вопросы., @chrisl