серва

fsdb
Offline
Зарегистрирован: 24.10.2015

Ребята подскажите - двигаю серво вперед - все ок. если хочу обратно то не срзу срабатывает. если только угол на 15едениц больше. если прыгаю на 20 градусов то нормально вращается в любую сторону.

как бы получается можно добавлять градусы а серва не регирует. диапазон ее от 0 до 180

#include <Servo.h>





Servo myservo; 
int pos,oldpos = 0;
int mov=0;









#include <IRremote.h> // подключаем библиотеку



//цифры
#include "Four7Seg74hc595.h"

esl::Four7Seg74hc595 Micrometer(10,11,12);
//10  SCLK 
//11  RCLK 
//12  DIO 

char sbuf[5];
//отображение цифр


IRrecv irrecv(8);
 
decode_results results;
 
void setup()
{

  Serial.begin(112500);
  irrecv.enableIRIn(); // запуск приемника
    myservo.attach(9); 

}
 
void loop() {
  // постоянно считываем данные с приемника
  if (irrecv.decode(&results)) {
    // выводим в консольку, что получили, число в 16-ричном виде
    Serial.println(results.value, HEX);
//FFE01F  -
//FFA857  +
//FFFFFFFF повтор
oldpos=pos;
 
   if(results.value == 0xFFE01F) {pos--; mov=0; }
   if(results.value == 0xFFA857) {pos++; mov=1 ;}

   if(results.value == 0xFF30CF) {pos=10; mov=2 ;}
   if(results.value == 0xFF18E7) {pos=30; mov=2 ;}
   if(results.value == 0xFF7A85) {pos=50; mov=2 ;}
   if(results.value == 0xFF10EF) {pos=70; mov=2 ;}
   if(results.value == 0xFF38C7) {pos=90; mov=2 ;}
   if(results.value == 0xFF5AA5) {pos=110; mov=2 ;}
   if(results.value == 0xFF42BD) {pos=130; mov=2 ;}
   if(results.value == 0xFF4AB5) {pos=150; mov=2 ;}
   if(results.value == 0xFF52AD) {pos=170; mov=2 ;}



 

   if(results.value == 0xFFFFFFFF) {
    
    if(mov ==0) {pos--;  }
   if(mov== 1) {pos++; }
    
    }

    if (pos<=0) {pos=0;}
    if (pos>=180) {pos=180;}
  
 
    irrecv.resume(); // готовы принимать следующий сигнал
   Serial.println(pos);
      Serial.println(mov);
 }






  myservo.write(pos);
delay(15); 

sprintf( sbuf, "%04u", String(pos).toInt() );
Micrometer.setDigits( sbuf, 4 );
Micrometer.update();
//показываем данные на дисплее
//микрометер

}

 

Alex-GK
Offline
Зарегистрирован: 10.04.2012

А сама машинка исправная? Если просто в цикле её туда сюда покрутить?

fsdb
Offline
Зарегистрирован: 24.10.2015

В цикле это не заметно будет. Стандартный пример беру и тоже самое. Серв новый. Библиотека видимо не очень

Alex-GK
Offline
Зарегистрирован: 10.04.2012

То что новый ничего не гарантирует, если в цикл засунуть задержки, должно быть заметно.

А еще я может чего-то не понимаю, но нафига тут вообще библиотека?

Серва подключается к выводу с PWM и ей можно управлять просто через analogWrite(); , только не будет красивых градусов а при значениях 0 и 255 будут крайние положения.

И всё таки начинать мучения нужно с проверки железа. Потому что скетч простой и начудить в нем негде.

sadman41
Offline
Зарегистрирован: 19.10.2016

Alex-GK пишет:

Серва подключается к выводу с PWM и ей можно управлять просто через analogWrite(); , только не будет красивых градусов а при значениях 0 и 255 будут крайние положения.

Зачем такие извращения?

Для проверки достаточно примерно такого:

int angle = 90;
int pulseWidth=map(angle, 0, 180, 544, 2400);
digitalWrite(servoPin, HIGH);
delayMicroseconds(pulseWidth);
digitalWrite(servoPin, LOW);

 

fsdb
Offline
Зарегистрирован: 24.10.2015

серв похоже действительно не рабочий - другой мелкий подкинул - заработало как ожидалось

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Alex-GK пишет:

То что новый ничего не гарантирует, если в цикл засунуть задержки, должно быть заметно.

А еще я может чего-то не понимаю, но нафига тут вообще библиотека?

Серва подключается к выводу с PWM и ей можно управлять просто через analogWrite(); , только не будет красивых градусов а при значениях 0 и 255 будут крайние положения.

И всё таки начинать мучения нужно с проверки железа. Потому что скетч простой и начудить в нем негде.

Бред.

Серво и ШИМ имеют общим только то что и там и там идут импульсы.
Главное тут - какие они.
https://www.raspberrypi.org/forums/viewtopic.php?f=37&t=113728