Триммирование
- Войдите на сайт для отправки комментариев
Вс, 07/06/2020 - 15:50
Здравствуйте! Помогите, пожалуйста, дописать скетч. Нужно сделать функцию триммирования для аналогових стиков с помощью кнопок так, чтобы значение с потенциометра аналогового стика увеличивалось, или уменшалось на 1 при нажатии кнопок
znachenie += digitalRead(knopka);
Вставь скетч правильно, плз.
заводишь переменную положения джойстика
заводишь статическую переменную int триммера, которая инкреминируется кнопкой триммер ап, и декрименируется кнопкой триммер даун.
на передатчик отправляешь сумму этих двух переменных
enjoy
если что из перечисленного не понятно - спрашивай1
Дима! Проблема в строке номер 100500 . Вставь текст программы по правилам форума !!!
#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)); // отправить по радио }#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]); }Извините, я только начал учиться, все делал из других примеров, не понимаю что такое инкреминируется кнопкой триммер ап, и декрименируется кнопкой триммер даун
Ну, триммер относится к передатчику, поэтому код приемника тут излишен.
вот в лупе у тебя формируется значение стика по одному каналу:
transmit_data[1] = map(analogRead(potent), 1023, 0, 60, 120);чтоб организовать триммер по этому каналу заводишь переменную в лупе
теперь каждые, скажем 50 милисекунд опрашиваешь две кнопки, относящиеся к этому триммеру. Если нажата одна, то значение переменной trimmer1 увеличивается на 1, если другая -то уменьшается на 1. Перед отправкой данных складываешь значение двух переменных:
идея ясна?
и хранить значение надо во флэше, а то каждый раз придётся триммировать по новой
Да понял буду пробовать спасибо
Все получилось огромное спасибо!