Код не работает, сервопривод даже не вращается
Я пытаюсь запустить программу, которая работает следующим образом:
LDR встроен в коробку. Сверху кладется блок. Эта коробка может вращаться сервоприводом. Предполагается, что программа заставит коробку вращаться до тех пор, пока блок не сдвинется и не оторвется от LDR.
В этот момент угол сервопривода сохраняется и используется для расчета коэффициента трения. Наконец, ответ на этот расчет печатается на жидкокристаллическом дисплее, и программа повторяется, сначала возвращая коробку в исходное состояние. Все программы работают на Arduino и Arduino Lotus. Почему сервопривод не вращается?
//сервопривод
#include <Servo.h>
Servo myservo;
int previous_angle = 0;
int angle = 0;
//lightsensor
int lightsensor = 0;
int LIGHT = 800;
int DARK = 940;
//Светодиодный экран
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
void setup() {
Serial.begin(9600);
myservo.attach(6);
pinMode(lightsensor, INPUT);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
delay(100);
}
void loop() {
int i = previous_angle;
int lightStatus = analogRead(lightsensor);
if (lightStatus >= DARK) {
delay(300);
while (int i = previous_angle) {
i<=90;
i = i+1;
myservo.write(i);
delay(45);
};
} else if (lightStatus < DARK) {
for (int i = previous_angle; i>0;) {
delay(300);
int angle = tan(i);
display.clearDisplay();
display.setTextSize(1.5);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println(angle);
display.display();
delay(300);
myservo.write(0);
delay(45);
};
}
}
@user71605, 👍2
Обсуждение1 ответ
Для начала: этот бит представляет собой странную смесь синтаксиса for
и while
:
while (int i = previous_angle) {
i <= 90;
i = i + 1;
myservo.write(i);
delay(45);
};
Он будет компилироваться, но, вероятно, не будет делать то, что вы хотите. Вероятно, это должно быть:
for (int i=previous_angle; i<=90; i=i+1) {
myservo.write(i);
delay(45);
}
Кроме того, previous_angle
никогда не изменяется в вашем коде после инициализации; он всегда равен 0.
Это также означает, что цикл for
ниже не будет делать то, что вы хотите (и этот цикл также нигде не увеличивает i
):
for (int i = previous_angle; i>0;)
Их может быть больше; сначала внесите предложенные изменения и посмотрите, что произойдет.
Если я изменю его, то получу ошибку при проверке кода 'expected')'before';'token', @user71605
Я виню кофе underflow 8-). Ответ отредактирован., @ocrdu
Изменение на "for" действительно устраняет ошибку, я проверю, правильно ли работает код по мере необходимости., @user71605
- код для автоматической двери
- Управление сервоприводом с помощью ATtiny13A
- Как запрограммировать 2 ультразвуковых датчика, один на серводвигателе и один прикрепленный на передней стороне автомобиля?
- Матовый ESC не будет двигаться медленно
- Сервопривод продолжает вращаться
- Вращающийся серводвигатель с использованием Arduino
- Arduino Sleep для экономии заряда батареи - Как подключить его к существующему скетчу
- Пусть серво вращается когда файл был загружен на веб страницу
В будущем, пожалуйста, отформатируйте свой исходный код с помощью {} на этом сайте. Как бы то ни было, следовать вашему коду было очень трудно. Кроме того, пожалуйста, включите схему подключения вашего двигателя., @jwh20
Вопрос: Удалось ли вам заставить свой мотор работать с помощью простой программы? Часто бывает полезно начать с простого и добавлять вещи шаг за шагом., @jwh20