Светодиод не мигает во время бега
Я не понимаю. Я новичок в Arduino, но не в программировании. Я не понимаю, почему светодиод 13 продолжает мигать.
вот мой код..
#include <Servo.h>
// Угол сервопривода X останется в диапазоне [min_x, max_x]
// Угол сервопривода Y останется в диапазоне [min_y, max_y]
// подстраивается под размер вашей гостиной
float min_x = 5;
float max_x = 50;
float min_y = 5;
float max_y = 35;
int min_freeze = 200;
int max_freeze = 3000;
float minimal_movement = 5;
// находим центр квадрата для начальной точки
int random_delay;
float x_position = min_x + (max_x - min_x)/2;
float y_position = min_y + (max_y - min_y)/2;
float x_old_position = x_position;
float y_old_position = y_position;
float x_new_position;
float y_new_position;
float x_speed;
float y_speed;
int movement_time;
// Создание экземпляра двух сервоприводов
Servo x_servo;
Servo y_servo;
int pos = 0;
void setup() {
y_servo.attach(6); // прикрепляет сервопривод y к контакту 6 к объекту сервопривода
x_servo.attach(9); // прикрепляет сервопривод x к контакту 9 к объекту сервопривода
pinMode (13, OUTPUT);
digitalWrite (13, HIGH); // включаем лазер
//Сначала размещаем сервоприводы в центре
y_servo.write(y_position);
x_servo.write(x_position);
}
void loop() {
movement_time = random(10,40);
random_delay = random(min_freeze, max_freeze);
x_new_position = random(min_x+minimal_movement, max_x-minimal_movement);
y_new_position = random(min_y+minimal_movement, max_y-minimal_movement);
if( (y_new_position > y_old_position) && (abs(y_new_position - y_old_position) < 5 )) {
y_new_position = y_new_position + minimal_movement;
} else if ( (y_new_position < y_old_position) && (abs(y_new_position - y_old_position) < 5 )) {
y_new_position = y_new_position - minimal_movement;
}
if( (x_new_position > x_old_position) && (abs(x_new_position - x_old_position) < 5 )) {
x_new_position = x_new_position + minimal_movement;
} else if ( (x_new_position < x_old_position) && (abs(x_new_position - x_old_position) < 5 )) {
x_new_position = x_new_position - minimal_movement;
}
x_speed = (x_new_position - x_old_position)/movement_time;
y_speed = (y_new_position - y_old_position)/movement_time;
for (pos = 0; pos < movement_time; pos += 1) {
x_position = x_position + x_speed;
y_position = y_position + y_speed;
x_servo.write(x_position);
y_servo.write(y_position);
delay(10);
}
x_old_position = x_new_position;
y_old_position = y_new_position;
delay(random_delay);
}
Нигде в этом скетче строка «digitalWrite (13, LOW);» содержится, но я не могу держать светодиод включенным, не мигая, когда Arduino зацикливается. Я прошу других людей сделать это, но с помощью этого кода я не понимаю, чего мне не хватает!
Windows 7 64bit, плата Arduino Uno, программа Arduino 1.8.9
@Skywalker2000, 👍1
Обсуждение1 ответ
Я попробовал ваш скетч на Arduino Uno, без подключенных сервоприводов, и светодиод на контакте 13 не мигал.
DataFiddler делает хорошее замечание в своем комментарии. Чтобы убедиться, что вы действительно загружаете скетч, попробуйте загрузить скетч Blink
, который входит в состав IDE. Измените задержки с 1000 мс на 200 мс, а затем загрузите их. Разница в скоростях флеширования должна подтвердить или опровергнуть возможность успешной загрузки скетчей.
Вы не указали, какие сервоприводы вы используете, поэтому я предполагаю, что это SG90. Я не уверен, что технические данные для всех сервоприводов SG90 одинаковы, но если вы посмотрите на этот, Технические характеристики SG90, вы увидите «Ток опрокидывания» может составлять от 570 мА до 730 мА, каждый. Если вы питаете их от Uno, он не сможет обеспечить такой большой ток. Еще одним ограничивающим фактором является максимальный выходной ток USB компьютера (если вы подключаете Uno к порту USB). Кстати, мой компьютер может обеспечить только 500 мА на USB.
Я бы предложил подключить сервоприводы к отдельному источнику питания, а затем посмотреть, что произойдет.
Если вы питаете Arduino от порта USB, ток Arduino ограничивает потребление тока от USB до 500 мА, даже если USB-порт компьютера способен на большее., @Duncan C
Это именно то, что я узнал. Я подумал, почему он не работает так, как на видео, затем решил подключить его к розетке, чтобы посмотреть, насколько он плох, и тогда я заметил, что он работает так же, как на видео. Спасибо за вашу помощь., @Skywalker2000
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
Добро пожаловать на сайт Arduino SO. Вам следует выбрать свой код и нажать кнопку форматирования кода (она выглядит как открывающие и закрывающие фигурные скобки (
{}
). (Я отредактировал ваш вопрос и уже сделал это.), @Duncan CВы не загрузили этот код. Это все еще первоначальный эскиз блинка, который создается вместе с загрузчиком. Мое предположение. :), @DataFiddler
Или, может быть, ваш эскиз вызывает сброс (не знаю, что происходит во время исключения). Измените исходный код, чтобы увидеть, что произойдет (например, небольшой образец воспроизводимого светодиода, тогда вы также будете знать, что ваш эскиз загружается, как предполагает DataFiddler (что даже более вероятно, чем мой)., @Michel Keijzers
Используйте последовательный монитор. Отправьте сообщение из функции настройки, чтобы вы знали, что функция настройки выполнена. Затем отправьте сообщение из цикла., @Jot
Если вы используете двигатель, вам необходимо иметь отдельный источник питания для двигателя. Невозможно управлять серводвигателем от линии 5 В Arduino. Гораздо лучше использовать совершенно другой источник питания для вашего серводвигателя (просто подключите линии заземления)., @Duncan C
Я загрузил свой код. Я внес исправления в программу, и именно тогда у меня возникла проблема при попытке выгрузить первый код. Когда Arduino подключен к моему USB и запускает любую программу, которую я загружаю, USB моего компьютера становится нестабильным. Каждый раз, когда светодиод мигал, компьютер не распознавался и распознавался заново, что, в свою очередь, не позволяло мне перезаписать код на Arduino. Вы тоже это понимаете, мой компьютер всегда подает звуковой сигнал, когда я что-то подключаю и отключаю, и он делал это постоянно. Перезагрузка-это кошмар. Я не знаю, как тебе, ребята, это удается так легко!, @Skywalker2000