когда я закончил кодировать свои 3 двигателя постоянного тока, все эти ошибки накопились, одна из них сказала, что в программе есть случайный «/ 302».

/*
  #include <SmartInventor.h>

*/

void setup() {
  SmartInventor.DCMotor();




}
void loop() {
  // М1, М2, М3
  // по часовой стрелке, против часовой стрелки, СТОП
  // 0-100
  // 0-360

  SmartInventor.DCMotor(M1, CW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M1, STOP, 0, 0°);
  delay(5000);

  SmartInventor.DCMotor(M1, CCW, 10, 45°);  // Музыка начинается //0:00:06
  delay(2000);

  SmartInventor.DCMotor(M1, CCW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M1, STOP, 0, 0°);
  delay(11000);

  SmartInventor.DCMotor(M1, CW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M1, STOP, 0, 0°); //Музыка останавливается //0:00:32
  delay(10000);

  SmartInventor.DCMotor(M1, CW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M1, STOP, 0, 0°);
  delay(5000);

  SmartInventor.DCMotor(M1, CCW, 10, 45°);
  delay(1000);

  SmartInventor.DCMotor(M1, CW, 10, 45°); // Музыка возобновляется //0:00:44
  delay(2000);

  SmartInventor.DCMotor(M1, STOP, 0, 0°);
  delay(18000);

  SmartInventor.DCMotor(M1, CCW, 10, 90°);
  delay(3000);

  SmartInventor.DCMOtor(M1, CW, 10, 45°);
  delay(2000);

  SmartINventor.DCMotor(M1, STOP, 10, 0°);
  delay(8000);

  SmartInventor.DCMOtor(M1, CW, 10, 45°); //Музыка останавливается //0:01:15
  delay(2000);

  SmartInventor.DCMotor(M1, STOP, 0, 0°);
  delay(5000);

  SmartINventor.DCMotor(M1, CCW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M1, CCW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M1, STOP, 0, 0°);
  delay(3000);

  SmartInventor.DCMotor(M1, CW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M1, CCW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M1, STOP, 0, 0°); // Музыка снова начинается //0:01:31
  delay(11000);

  SmartInventor.DCMotor(M1, CW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M1, CW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M1, STOP, 0, 0°); //Музыка останавливается //0:02:03
  delay(23000);

  SmartInventor.DCMotor(M1, CCW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M1, STOP, 0, 0°); // Музыка снова включается //0:02:14
  delay(12000);

  SmartInventor.DCMotor(M1, CCW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M1, STOP, 0, 0°);
  delay(6000);

  SmartInventor.DCMotor(M1, CW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M1, STOP, 0, 0°);
  delay(6000);

  SmartInventor.DCMotor(M1, CCW, 10, 45°); //Музыка заканчивается //0:02:40
  delay(2000);

  SmartInventor.DCMotor(M1, CW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M1, STOP, 0, 0°);
  delay(3000);

  SmartInventor.DCMotor(M2, CW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M2, CW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M2, STOP, 0, 0°);
  delay(5000);

  SmartInventor.DCMotor(M2, CCW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M2, STOP, 0, 0°);
  delay(2000);

  SmartInventer.DCMotor(M2, CCW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M2, STOP, 0, 0°);
  delay(2000);

  SmartInventor.DCMotor(M2, CW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M2, STOP, 0, 0°);
  delay(2000);

  SmartInventor.DCMotor(M2, CW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M2, CCW, 10, 45°);
  delay(2000)

  SmartInventor.DCMotor(M2, STOP, 0, 0°);
  delay(2000);

  SmartInventer.DCMotor(M2, CCW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M2, STOP, 0, 0°);
  delay(2000);

  SmartInventor.DCMotor(M2, CW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M2, STOP, 0, 0°);
  delay(2000);

  SmartInventor.DCMotor(M2, CW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M2, CCW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M2, STOP, 0, 0°);
  delay(13000);

  SmartInventor.DCMotor(M2, CCW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M2, STOP, 0, 0°);
  delay(2000);

  SmartInventer.DCMotor(M2, CW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M2, STOP, 0, 0°);
  delay(2000);

  SmartInventor.DCMotor(M2, CW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M2, STOP, 0, 0°);
  delay(2000);

  SmartInventor.DCMotor(M2, CCW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M2, CCW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M2, STOP, 0, 0°);
  delay(2000);

  SmartInventer.DCMotor(M2, CW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M2, STOP, 0, 0°);
  delay(2000);

  SmartInventor.DCMotor(M2, CW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M2, STOP, 0, 0°);
  delay(2000);

  SmartInventor.DCMotor(M2, CCW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M2, CCW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M2, STOP, 0, 0°);
  delay(13000);

  SmartInventor.DCMotor(M2, CW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M2, CW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M2, CCW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M2, STOP, 0, 0°);
  delay(2000);

  SmartInventer.DCMotor(M2, CCW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M2, STOP, 0, 0°);
  delay(2000);

  SmartInventor.DCMotor(M2, CW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M2, STOP, 0, 0°);
  delay(2000);

  SmartInventor.DCMotor(M2, CW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M2, CCW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M2, STOP, 0, 0°);
  delay(2000);

  SmartInventer.DCMotor(M2, CCW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M2, STOP, 0, 0°);
  delay(2000);

  SmartInventor.DCMotor(M2, CW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M2, STOP, 0, 0°);
  delay(2000);

  SmartInventor.DCMotor(M2, STOP, 0, 0°);
  delay(2000);

  SmartInventer.DCMotor(M2, CCW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M2, STOP, 0, 0°);
  delay(13000);

  SmartInventor.DCMotor(M2, CCW, 10, 45°);
  delay(2000)

  SmartInventor.DCMotor(M2, STOP, 0, 0°);
  delay(2000);

  SmartInventer.DCMotor(M2, CCW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M2, STOP, 0, 0°);
  delay(2000);

  SmartInventor.DCMotor(M2, CW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M2, STOP, 0, 0°);
  delay(2000);

  SmartInventor.DCMotor(M2, CW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M2, CCW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M2, STOP, 0, 0°);
  delay(2000);

  SmartInventer.DCMotor(M2, CCW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M2, STOP, 0, 0°);
  delay(2000);

  SmartInventor.DCMotor(M2, CW, 10, 45°);
  delay(2000);

  SmartInventor.DCMotor(M2, STOP, 0, 0°);
  delay(7000);

  SmartInventor.DCMotor(M3, STOP, 0, 0°);
  delay(7000);

  SmartInventor.DCMotor(M3, CW, 20, 360°);
  delay(26000);

  SmartInventor.DCMotor(M3, STOP, 0, 0°);
  delay(12000);

  SmartInventor.DCMotor(M3, CW, 20, 360°);
  delay(31000);

  SmartInventor.DCMotor(M3, STOP, 0, 0°);
  delay(12000);

  SmartInventor.DCMotor(M3, CW, 20, 360°);
  delay(31000);

  SmartInventor.DCMotor(M3, STOP, 0, 0°);
  delay(12000);

  SmartInventor.DCMotor(M3, CW, 20, 360°);
  delay(26000);

  SmartInventor.DCMotor(M2, STOP, 0, 0°);
  delay(5000);

  < SmartInventor.h / >

}

, 👍-1

Обсуждение

Что со всеми символами ° в вашем коде?, @Majenko

1. Когда вы получаете ошибки компилятора, обязательно включите в свой вопрос полное сообщение об ошибке, полученное от компилятора. Нам нужно, чтобы помочь вам лучше. 2. Что делает оператор <SmartInventor.h/> в конце программы? Это похоже на тег XML/HTML., @chrisl

° это градусы, проблема в том, что я также использовал это, потому что я хочу, чтобы двигатели вращались по часовой стрелке против часовой стрелки только на 45 или 90 или 360 градусов, можете ли вы помочь мне исправить это, если я сделал это неправильно, @Tommy

Да, это тоже неправильно. Удалить все символы ° из кода, @chrisl

чем сделать так, чтобы он не делал полный оборот, а вращался только на 45 или 90 градусов?, @Tommy

Я не думаю, что вы понимаете, как делать вещи с двигателями. Вы не даете им угол, вы даете им скорость. Угол поворота зависит от того, как долго работает двигатель. У вас слишком много параметров для ваших вызовов DCMotor(), и этот параметр даже недействителен C. RTFM: https://www.robolink.com/smart-inventor-functions-guide/, @Majenko

Но какой из них недействителен, потому что в ссылке, которую вы мне прислали, показано, что я все сделал правильно, кроме °, @Tommy


1 ответ


1

Код показывает несколько ошибок:

  1. В начале вы комментируете библиотеку SmartInventor. Вам нужна эта библиотека. Вы должны удалить маркеры комментариев /* и */ вокруг оператора #include.

  2. В конце кода у вас есть < SmartInventor.h / >. Вы должны удалить эту строку. Это просто неправильно, даже синтаксис C/C++.

  3. Кажется, вы неправильно понимаете, что такое SmartInventor.DCMotor() и что он делает. Во-первых, это двигатель постоянного тока. Это означает, что у вас нет контроля над углом двигателя. Вы можете задать ему направление и скорость. Больше ничего. А со стандартным мотором постоянного тока (без редуктора) можно даже не надеяться получить от него определенные углы, даже за счет изощренного управления. Мотор просто не создан для таких задач.

    Когда вы заглянете в SmartInventor.h, вы увидите объявление этой функции:

    void SmartInventorClass::DCMotor(char SelectMotor, char direction, char speed)
    

    У вас слишком много параметров. Вы можете задать этой функции 2 или 3 параметра (прототип с 2 параметрами здесь не показан, вы можете увидеть его в заголовочном файле). Используйте функцию, как описано.

  4. В связи с предыдущей проблемой: вы пытались использовать в коде символ градуса °. Вы не можете сделать это. Это недопустимый символ в синтаксисе C/C++. Обычно ко всем числам в программе не привязана единица измерения. Вы не пишете delay(1000ms) для задержки 1 с, вы пишете delay(1000). Функция должна интерпретировать это число по своему усмотрению. Вы знаете только из документации этой функции (или из ее реализации в коде), что параметры означают время в миллисекундах. Для микроконтроллера единица миллисекунды не имеет значения. То же самое и со степенью. При управлении сервоприводом, которому вы можете задать нужный угол, вы пишете servo.write(90) для установки его на 90°. Здесь нет знака степени.

,

Итак, я использую задержку (1000) для себя? и что вы подразумеваете под слишком большим количеством параметров?, @Tommy

Вы используете DCMotor(M1, STOP, 0, 0°). Это 4 параметра для функции. Но у функции всего 2 или 3 параметра. Вы не можете указать больше параметров., @chrisl

Вы правильно использовали функцию delay(). Я просто использовал эту функцию, чтобы объяснить, что микроконтроллер не знает о единицах измерения., @chrisl

Хорошо, я просто удалил ° и сделал все, что вы мне сказали, но теперь он говорит, что нет соответствующего вызова функции для «SmartInentor:: DCMotor ()»., @Tommy

Вы можете добавить новые сообщения об ошибках (полные сообщения) к своему вопросу, отредактировав его. Сохраните предыдущий текст вашего вопроса и добавьте новую информацию в конце., @chrisl

какая новая информация?, @Tommy

Полное сообщение об ошибке. Компилятор дает вам довольно развернутое объяснение, что где не так. Вы не включили полное сообщение об ошибке в первый раз, поэтому сделайте это хотя бы сейчас. Я не люблю гадать, в чем именно ошибка., @chrisl

Установка Пустоты SmartInventor.DCMotor();, @Tommy

? ты знаешь почему это ошибка, @Tommy

Извините, больше не буду отвечать без полного списка ошибок. Вам нужно сначала доставить, прежде чем я смогу помочь вам дальше, @chrisl

/home/builder/opt/libraries/latest/rokitsmart_1_0_9/SmartInventor.cpp:839:16: примечание: предлагаемая альтернатива: «OCIE2B» ТИМСК &= ~(1<<OCIE2); ^~~~~ OCIE2B статус выхода 1, @Tommy

Можете ли вы, ребята, помочь мне, плз, @Tommy