Arduino servo ошибка

Arduino Forum

Loading

  1. Сделал код для управления манипулятором на 6 сервоприводах, а он выдаёт ошибку.
    Нужно управлять 6 потенциометрами 6 сервоприводами.
    Вот код:

    #include <Servo.h>

    Servo myservo2;
    Servo myservo3;
    Servo myservo4;
    Servo myservo5;
    Servo myservo6;
    Servo myservo7;
    int a0,a1,a2,a3,a4,a5;
    void setup()
    {
    // устанавливаем пин как вывод управления сервой
      myservo2.attach(2);
      myservo3.attach(3);
      myservo4.attach(4);
      myservo5.attach(5);
      myservo6.attach(6);
      myservo7.attach(7);
    Serial.begin(9600);
    }
    // аналоговые порты для приема значений с резисторов
      const int pin1 = 0;
      const int pin2 = 1;
      const int pin3 = 2;
      const int pin4 = 3;
      const int pin5 = 4;
      const int pin6 = 5;
    void loop()
    {  
      a0=  map(analogRead(pin1), 0 , 1024, 0, 180);
      myservo2.write(a0);
      a1=  map(analogRead(pin2), 0 , 1024, 0, 180);
      myservo3.write(a1);
      a2=  map(analogRead(pin3), 0 , 1024, 0, 180);
      myservo4.write(a2);
      a3=  map(analogRead(pin4), 0 , 1024, 0, 180);
      myservo5.write(a3);
      a4=  map(analogRead(pin5), 0 , 1024, 0, 180);
      myservo6.write(a4);
      a5=  map(analogRead(pin6), 0 , 1024, 0, 180);
      myservo7.write(a5);
    Serial.println «A0 = «+String(a0)+«|  «A1 = «+String(a1)+»|  A2 = «+String(a2)+»|  A3 = «+String(a3)+»|  A4 = «+String(a4)+»|  A5 = «+String(a4)+»|  ;
    }

    Вот ошибка:

    sketch_jun02c.ino: In function ‘void loop()’:
    sketch_jun02c.ino:42:16: error: expected ‘;’ before string constant
    sketch_jun02c.ino:42:150: error: statement cannot resolve address of overloaded function
    Ошибка компиляции.

  2. Вам же компилятор написал строку и позицию которую он не понял

    Serial.println ( «A0 = « + String(a0) + «|  A1 = « + String(a1) + «|  A2 = « + String(a2) + «|  A3 = « + String(a3) + «|  A4 = « + String(a4) + «|  A5 = « + String(a4)+«|» ) ;

    У вас пропущена — открывающая и закрывающая скобки в функции Serial.println, плюс ошибка в двойных кавычках, которую определила даже подсветка синтаксиса на форуме. Сравните, что считает строкой (подсвечено красным) у вас и у меня.

    Последнее редактирование: 2 июн 2016

  3. Спасибо. Вот ещё вопрос: после загрузки этого кода или других, сервоприводы начинают шевелится без помощи потенциометра. Как это исправить?

не компилируется код серво

Offline

Зарегистрирован: 24.05.2019

пытаюсь завести ардуино как серво , копирую один в один код , и ошибки компиляции

вот так должно быть

вот так я

#include <Servo.h>

Servo motor;

void setup() {
   pinMode(3,OUTPUT);
   digitalWrite(3,HIGH);
   motor.attach(2);
   motor.writeMicroseconds(2300);
   delay(2000);
   motor.writeMicroseconds(800);
   delay(2000);
}  

  void loop() {
 int val = map(analogRead(0), 0, 1023, 800, 2300);
 motor.writeMicroseconds(val);
 }

а потом опять ошибка

Arduino: 1.6.7 (Windows 7), Плата:»Digispark (Default — 16.5mhz)»

C:Program Files (x86)ArduinolibrariesServosrcavrServo.cpp: In function ‘void __vector_3()’:

C:Program Files (x86)ArduinolibrariesServosrcavrServo.cpp:82:44: error: cannot convert ‘volatile uint8_t* {aka volatile unsigned char*}’ to ‘volatile uint16_t* {aka volatile unsigned int*}’ for argument ‘2’ to ‘void handle_interrupts(timer16_Sequence_t, volatile uint16_t*, volatile uint16_t*)’

   handle_interrupts(_timer1, &TCNT1, &OCR1A);

                                            ^

C:Program Files (x86)ArduinolibrariesServosrcavrServo.cpp: In function ‘void initISR(timer16_Sequence_t)’:

C:Program Files (x86)ArduinolibrariesServosrcavrServo.cpp:128:5: error: ‘TCCR1A’ was not declared in this scope

     TCCR1A = 0;             // normal counting mode

     ^

C:Program Files (x86)ArduinolibrariesServosrcavrServo.cpp:129:5: error: ‘TCCR1B’ was not declared in this scope

     TCCR1B = _BV(CS11);     // set prescaler of 8

     ^

C:Program Files (x86)ArduinolibrariesServosrcavrServo.cpp:136:5: error: ‘TIFR1’ was not declared in this scope

     TIFR1 |= _BV(OCF1A);     // clear any pending interrupts;

     ^

C:Program Files (x86)ArduinolibrariesServosrcavrServo.cpp:137:5: error: ‘TIMSK1’ was not declared in this scope

     TIMSK1 |=  _BV(OCIE1A) ; // enable the output compare interrupt

     ^

exit status 1
Ошибка компиляции.

I have a problem with Servo library. This is my (very short XD) «code»:

#include <Servo.h>

void setup() {
  Servo.attach(9, 554, 2400);
}

void loop() {
  Servo.write(2000);
}

And it returns:

Arduino:1.6.5 (Windows 7), Board:"Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)"

sketch_aug24a.ino: In function 'void setup()':
sketch_aug24a:4: error: expected unqualified-id before '.' token
sketch_aug24a.ino: In function 'void loop()':
sketch_aug24a:8: error: expected unqualified-id before '.' token
expected unqualified-id before '.' token

Like there is no included library. What can I do with it ?

Peter Bloomfield's user avatar

asked Aug 24, 2015 at 11:12

Nicolas's user avatar

Servo is a class not an object. You have to instantiate it, and then call the functions on the instance. For example:

#include <Servo.h>

Servo sv;

void setup() {
  sv.attach(9, 554, 2400);
}

void loop() {
  sv.write(2000);
}

(Unlike some other libraries, it’s done this way so that you can use more than one servo at the same time. You’d make one instance for each servo you want to control.)

answered Aug 24, 2015 at 11:15

Peter Bloomfield's user avatar

Peter BloomfieldPeter Bloomfield

10.9k9 gold badges46 silver badges87 bronze badges

2

К плате Arduino подключен 1 сервопривод MG995R. Плата подключена к компьютеру с Ubuntu 20.04 через Serial port. Задача состоит в том, что бы в монитор порта можно было послать число от 0 до 180, после чего сервопривод должен повернуться на угол заданный этим числом и в качестве проверки плата должна вернуть посланное в порт значение при помощи Serial.println(value). Алгоритм работает от одного до 3 раз, далее если я правильно смог понять ситуацию плата перезагружается и Ubuntu видит ее уже по другому пути. Путь к порту по умолчанию в моем случае /dev/ttyUSB0, но после возникновения ошибки он меняется на /dev/ttyUSB1 и далее можно поменять порт в мониторе порта и снова послать 1 — 3 значение в порт. Раздельно управление сервоприводом и работа с портом работают как обычно, проблема возникает при совмещении их в одном скетче. Ниже приведен пример скетча, он универсален для платы Arduino Uno и Arduino Mega 2560. Прошивал им обе платы и возникала аналогичная ошибка. Ниже прикреплю пример кода с комментариями и саму ошибку.

#include <Servo.h>

Servo servo1;

void setup (){
  Serial.begin(9600);
  /*
  Данной строкой я задал timeout для порта. 
  Пробовал разные значения.
  На ошибку это не как не по влияло.
  */
  Serial.setTimeout(5);
  
  
  // Пробовал подключать разным портам поддерживающим pwm, на результат это не повлияло.
  servo1.attach(9);
}

void loop (){
  if(Serial.available() > 0){
    // Получаем значение из порта.
    // Валидация в данном примере не предусмотрена, правильность мы отслеживаем вручную.
    int a = Serial.parseInt();
    // Поворачиваем сервопривод на нужное значение.
    servo1.write(a);
    delay(500);
    // Возвращаем принятое значение в порт, для проверки правильности ввода.
    Serial.println(a);
  }
}

Ошибка возникающая после нескольких циклов работы алгоритма:

java.io.IOException: Ошибка ввода/вывода in writeArray
    at gnu.io.RXTXPort.writeArray(Native Method)
    at gnu.io.RXTXPort$SerialOutputStream.write(RXTXPort.java:1173)
    at processing.app.Serial.write(Serial.java:517)
    at processing.app.Serial.write(Serial.java:540)
    at processing.app.SerialMonitor.send(SerialMonitor.java:200)
    at processing.app.SerialMonitor.access$100(SerialMonitor.java:32)
    at processing.app.SerialMonitor$3.actionPerformed(SerialMonitor.java:89)
    at java.desktop/javax.swing.JTextField.fireActionPerformed(JTextField.java:508)
    at java.desktop/javax.swing.JTextField.postActionEvent(JTextField.java:723)
    at java.desktop/javax.swing.JTextField$NotifyAction.actionPerformed(JTextField.java:839)
    at java.desktop/javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1810)
    at java.desktop/javax.swing.JComponent.processKeyBinding(JComponent.java:2900)
    at java.desktop/javax.swing.JComponent.processKeyBindings(JComponent.java:2948)
    at java.desktop/javax.swing.JComponent.processKeyEvent(JComponent.java:2862)
    at java.desktop/java.awt.Component.processEvent(Component.java:6412)
    at java.desktop/java.awt.Container.processEvent(Container.java:2263)
    at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5011)
    at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
    at java.desktop/java.awt.Component.dispatchEvent(Component.java:4843)
    at java.desktop/java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1950)
    at java.desktop/java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:870)
    at java.desktop/java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1139)
    at java.desktop/java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:1009)
    at java.desktop/java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:835)
    at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4892)
    at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
    at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2772)
    at java.desktop/java.awt.Component.dispatchEvent(Component.java:4843)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
    at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
    at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

В каком направлении стоит искать пути решения и какие ошибки я допустил в скетче?

Like this post? Please share to your friends:
  • Arduino droid ошибка загрузки
  • Ardo ls 9205 e ошибка е4
  • Ardio ru коды ошибок
  • Arderia ошибка е9 как устранить
  • Arderia dsr 220r коды ошибок