#1 Re: Програмування Arduino » Дребезжат сервы. » 2017-07-14 11:34:53

vvr пише:

а какое отношение к джиттеру ваших серв имеют эти строчки кода.
вам дали направление куда копать что куда прописать.
осталось завести переменные на отслеживание положения сервы для её отключения при достижении нужного положения.
вы не сделали.

1, Я уже писал - Я решил проверить, может быть сервы дребезжат потому что они принимают такой дребезжащий искажённый сигнал.
Вы наверно не заметили, что я убрал из скетча строки отвечающие за энергосбережение. Потому что с ними приёмник получал данные рывками.
2, Как я заведу переменные на отслеживание положения сервы для её отключения при достижении нужного положения если я никогда этого НЕ делал, и НЕ представляю как это сделать! Примеров нет..

#2 Re: Програмування Arduino » Дребезжат сервы. » 2017-07-14 09:37:42

vvr пише:

но вы же и не попробовали

Я решил проверить, может быть сервы дребезжат потому что они принимают такой дребезжащий искажёный сигнал. Прописал на приемнике Serial.print, а он все показания в одну строку выдаёт, получается каша. Я пол дня потратил, что бы написать код, что бы выводило в ДВЕ строки!

Вот часть кода, зацените:

Serial.print(recieved_data[1]);
Serial.print("  ");
Serial.println(recieved_data[0]);
delay(1);

А вы говорите что не пробовал..

#3 Re: Програмування Arduino » Дребезжат сервы. » 2017-07-14 09:32:02

vvr пише:

но вы же и не попробовали

Я вам ещё на Амперке написал что пробовал, + В инете искал по ключевым словам. Нашёл ТРИ абсолютно разных по реализации скетча, которые делают то же, что и мой скетч.
Человек учится на примерах, я вас попросил привести пример, вы промолчали.

#4 Re: Програмування Arduino » Дребезжат сервы. » 2017-07-13 14:29:28

vvr пише:

вам же вроде на arduino.ru подсказали.

На Амперке, Вы мне советовали, я спросил как прописать, Вы так и не ответили )

#5 Програмування Arduino » Дребезжат сервы. » 2017-07-13 13:25:58

Женя_7
відповідей: 10

Всем доброго времени суток.
Пожалуйста, помогите правильно прописать  команду servo.detach();
Передатчик:

#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
RF24 radio(9, 10); 
byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб
byte potent0 = 0; // потенциометр на 0 аналоговом
byte potent1 = 1; //
byte transmit_data[2]; // массив, хранящий передаваемые данные
void setup() {
Serial.begin(9600); //открываем порт для связи с ПК
radio.begin(); //активировать модуль
radio.setAutoAck(0);         //режим подтверждения приёма, 1 вкл 0 выкл
radio.setRetries(1, 15);    //(время между попыткой достучаться, число попыток)
radio.enableAckPayload();    //разрешить отсылку данных в ответ на входящий сигнал
radio.setPayloadSize(64);     //размер пакета, в байтах
radio.openWritingPipe(address[0]);   //мы - труба 0, открываем канал для передачи данных
radio.setChannel(0x5f);  //выбираем канал (в котором нет шумов!)
radio.setPALevel (RF24_PA_LOW); //уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
radio.setDataRate (RF24_250KBPS); //скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS
 //должна быть одинакова на приёмнике и передатчике!
 //при самой низкой скорости имеем самую высокую чувствительность и дальность!!
radio.powerUp(); //начать работу
radio.stopListening();  //не слушаем радиоэфир, мы передатчик
}
void loop() {
transmit_data[1] = map(analogRead(potent1), 0, 1023, 10, 164); // получить значение
 // в диапазоне 0..1023, перевести в 0..180, и записать на 1 место в массиве
transmit_data[0] = map(analogRead(potent0), 0, 1023, 10, 164);
radio.write(&transmit_data, sizeof(transmit_data)); // отправить по радио
}

Приёмник:

#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include <Servo.h>
RF24 radio(9, 10); //
byte recieved_data[2]; // массив принятых данных
byte servo = 3; // сервопривод на 3 цифровом
byte servo2 = 5; //
Servo myservo1;
Servo myservo2;
byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб
void setup() {
Serial.begin(9600); //открываем порт для связи с ПК
myservo1.attach(servo);
myservo2.attach(servo2);
radio.begin(); //активировать модуль
radio.setAutoAck(0);         //режим подтверждения приёма, 1 вкл 0 выкл
radio.setRetries(1, 15);    //(время между попыткой достучаться, число попыток)
radio.enableAckPayload();    //разрешить отсылку данных в ответ на входящий сигнал
radio.setPayloadSize(64);     //размер пакета, в байтах
radio.openReadingPipe(1, address[0]);     //хотим слушать трубу 0
radio.setChannel(0x5f);  //выбираем канал (в котором нет шумов!)
radio.setPALevel (RF24_PA_LOW); //уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
radio.setDataRate (RF24_250KBPS); //скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS
  //должна быть одинакова на приёмнике и передатчике!
  //при самой низкой скорости имеем самую высокую чувствительность и дальность!!
radio.powerUp(); //начать работу
radio.startListening();  //начинаем слушать эфир, мы приёмный модуль
}
void loop() {
byte pipeNo;
while ( radio.available(&pipeNo)) {  // слушаем эфир со всех труб
radio.read( &recieved_data, sizeof(recieved_data) );         // чиатем входящий сигнал
  //то бишь 0 или 1
myservo1.write(recieved_data[1]); // повернуть серво на угол 0..180
  // значение получено с 1 элемента массива
myservo2.write(recieved_data[0]); // сигнал
 // в соответствии с принятыми данными со 2 места массива, диапазон 0...180
  }
Serial.print(recieved_data[1]);
Serial.print("  ");
Serial.println(recieved_data[0]);
delay(1);
}

Підвал форуму