Триммирование

Дима Веремейчик
Offline
Зарегистрирован: 07.06.2020

Здравствуйте! Помогите, пожалуйста, дописать скетч. Нужно сделать функцию триммирования для аналогових стиков с помощью кнопок так, чтобы значение с потенциометра аналогового стика увеличивалось, или уменшалось на 1 при нажатии кнопок

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

znachenie += digitalRead(knopka);

Дима Веремейчик
Offline
Зарегистрирован: 07.06.2020
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
 
RF24 radio(9, 10); // "создать" модуль на пинах 9 и 10 Для Уно
//RF24 radio(9,53); // для Меги
 
byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб
 
byte button = 2; 
byte potent = 1; 
byte slider = 3; 
 
 
int transmit_data[3]; // массив, хранящий передаваемые данные
int latest_data[3]; // массив, хранящий последние переданные данные
 
 
void setup() {
  Serial.begin(9600); //открываем порт для связи с ПК
 
 
  radio.begin(); //активировать модуль
  radio.setAutoAck(1);         //режим подтверждения приёма, 1 вкл 0 выкл
  radio.setRetries(0, 15);    //(время между попыткой достучаться, число попыток)
  radio.enableAckPayload();    //разрешить отсылку данных в ответ на входящий сигнал
  radio.setPayloadSize(32);     //размер пакета, в байтах
 
  radio.openWritingPipe(address[0]);   //мы - труба 0, открываем канал для передачи данных
  radio.setChannel(0x60);  //выбираем канал (в котором нет шумов!)
 
  radio.setPALevel (RF24_PA_MAX); //уровень мощности передатчика. На выбор 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(potent), 1023, 0, 60, 120); // инвертированный (!) сигнал с кнопки
  transmit_data[2] = map(analogRead(button), 0, 1023, 800, 2300); // получить значение
  transmit_data[0] = map(analogRead(slider), 0, 1023, 50, 130);
Serial.println(transmit_data[0]);
  
    radio.write(&transmit_data, sizeof(transmit_data)); // отправить по радио
    
 
}
 
 
 
скетч апаратуры радиоуправления нужно сделать функцию триммирования
5N62V
Offline
Зарегистрирован: 25.02.2016

Вставь скетч правильно, плз.

заводишь переменную положения джойстика

заводишь статическую переменную int триммера, которая инкреминируется кнопкой триммер ап, и декрименируется кнопкой триммер даун.

на передатчик отправляешь сумму этих двух переменных

enjoy

 

если что из перечисленного не понятно - спрашивай1

inspiritus
Offline
Зарегистрирован: 17.12.2012

Дима! Проблема в строке номер 100500 . Вставь  текст программы по правилам форума !!!

Дима Веремейчик
Offline
Зарегистрирован: 07.06.2020
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"

RF24 radio(9, 10); // "создать" модуль на пинах 9 и 10 Для Уно
//RF24 radio(9,53); // для Меги

byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб

byte button = 2;  
byte potent = 1; 
byte slider = 3;  


int transmit_data[3]; // массив, хранящий передаваемые данные


void setup() {
  Serial.begin(9600); //открываем порт для связи с ПК

  radio.begin(); //активировать модуль
  radio.setAutoAck(1);         //режим подтверждения приёма, 1 вкл 0 выкл
  radio.setRetries(0, 15);    //(время между попыткой достучаться, число попыток)
  radio.enableAckPayload();    //разрешить отсылку данных в ответ на входящий сигнал
  radio.setPayloadSize(32);     //размер пакета, в байтах

  radio.openWritingPipe(address[0]);   //мы - труба 0, открываем канал для передачи данных
  radio.setChannel(0x60);  //выбираем канал (в котором нет шумов!)

  radio.setPALevel (RF24_PA_MAX); //уровень мощности передатчика. На выбор 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(potent), 1023, 0, 60, 120); 
  transmit_data[2] = map(analogRead(button), 0, 1023, 800, 2300);
  transmit_data[0] = map(analogRead(slider), 0, 1023, 50, 130);
Serial.println(transmit_data[0]);
  
    radio.write(&transmit_data, sizeof(transmit_data)); // отправить по радио
    

}

 

Дима Веремейчик
Offline
Зарегистрирован: 07.06.2020
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include <Servo.h>

RF24 radio(9, 10); // "создать" модуль на пинах 9 и 10 Для Уно
//RF24 radio(9,53); // для Меги

int recieved_data[3]; // массив принятых данных
byte relay = 3; // сервопривод
byte servo = 2; // мотор
byte mosfet = 4; // сервопривод

Servo myservo;
Servo myservo1;
Servo myservo2;

byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб
unsigned long time;
void setup() {
  Serial.begin(9600); //открываем порт для связи с ПК

  myservo.attach(servo);
  myservo1.attach(relay);
  myservo2.attach(mosfet);

  radio.begin(); //активировать модуль
  radio.setAutoAck(1);         //режим подтверждения приёма, 1 вкл 0 выкл
  radio.setRetries(0, 15);    //(время между попыткой достучаться, число попыток)
  radio.enableAckPayload();    //разрешить отсылку данных в ответ на входящий сигнал
  radio.setPayloadSize(32);     //размер пакета, в байтах

  radio.openReadingPipe(1, address[0]);     //хотим слушать трубу 0
  radio.setChannel(0x60);  //выбираем канал (в котором нет шумов!)

  radio.setPALevel (RF24_PA_MAX); //уровень мощности передатчика. На выбор 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() {
  
  
  if ( radio.available()) {  // 
    time = millis();
    radio.read( &recieved_data, sizeof(recieved_data) );
     
  }
  if (millis() - time > 1000){ 
    Serial.println (111);
    recieved_data[0] = 50;
    recieved_data[2] = 800;
    recieved_data[1] = 91;
  }
     myservo.writeMicroseconds(recieved_data[2]);
      myservo1.write(recieved_data[1]);
    myservo2.write(recieved_data[0]);
  
   
Serial.println (recieved_data[0]);
    
  
}

 

Дима Веремейчик
Offline
Зарегистрирован: 07.06.2020

Извините, я только начал учиться, все делал из других примеров, не понимаю что такое  инкреминируется кнопкой триммер ап, и декрименируется кнопкой триммер даун

5N62V
Offline
Зарегистрирован: 25.02.2016

Ну, триммер относится к передатчику, поэтому код приемника тут излишен.

вот в лупе у тебя формируется значение стика по одному каналу: transmit_data[1] = map(analogRead(potent), 1023, 0, 60, 120);

чтоб организовать триммер по этому каналу заводишь переменную в лупе 

static int trimmer1 = 0;

теперь каждые, скажем 50 милисекунд опрашиваешь две кнопки, относящиеся к этому триммеру. Если нажата одна, то значение переменной trimmer1 увеличивается на 1, если другая -то уменьшается на 1. Перед отправкой данных складываешь значение двух переменных: 

transmit_data[1] += trimmer1;

идея ясна?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

и хранить значение надо во флэше, а то каждый раз придётся триммировать по новой

Дима Веремейчик
Offline
Зарегистрирован: 07.06.2020

Да понял буду пробовать спасибо 

Дима Веремейчик
Offline
Зарегистрирован: 07.06.2020

Все получилось огромное спасибо!