аналоговый джойстик на 3 контакта
- Войдите на сайт для отправки комментариев
Сб, 13/04/2019 - 02:55
есть аналоговый джойстик на 3 контакта вперед назад,от 1 до 5в среднее положенее 2.5 в. как написать код чтоб при движении джойстика вперед назад загорались разные диоды и не святились в среднем ?
С помощью analogRead() и нескольких условных операторов if.
int volt; //int volt, avolt[50]; int LED = PB14; //int volt = 0; #include <LiquidCrystal.h> LiquidCrystal lcd(PA0, PA1, PA2, PA3, PA4, PA5); void setup() { pinMode(PA7, INPUT_ANALOG); pinMode(PB14, OUTPUT); lcd.begin(16, 2); } void loop() { float volt = analogRead(PB0); volt = (volt * 3.3) / 4095.0; lcd.setCursor(0, 0); lcd.print(volt); delay(100); //if (volt >= 1000 && volt <= 1300) //if (volt <= && volt >= ) if(volt <= 1.20 && volt >= 1.00) { digitalWrite(PB14, HIGH); LED = 1; } else { digitalWrite(PB14, LOW); LED = 0; } }првет!)как вставить аналоговый джойстик в передачик
#include <SPI.h> #include "nRF24L01.h" #include "RF24.h" RF24 radio(9, 10); // "создать" модуль на пинах 9 и 10 Для Уно byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб byte button = 2; // кнопка на 2 цифровом byte button1 = 3; byte button2 = 4; byte button3 = 5; byte slider = 1; // движковый потенциометр на 1 аналоговом пине byte transmit_data[5]; // массив, хранящий передаваемые данные byte latest_data[5]; // массив, хранящий последние переданные данные boolean flag; // флажок отправки данных void setup() { Serial.begin(9600); //открываем порт для связи с ПК pinMode(button, INPUT_PULLUP); // настроить пин кнопки pinMode(button1, INPUT_PULLUP); pinMode(button2, INPUT_PULLUP); pinMode(button3, INPUT_PULLUP); 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_1MBPS); //скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS //должна быть одинакова на приёмнике и передатчике! //при самой низкой скорости имеем самую высокую чувствительность и дальность!! radio.powerUp(); //начать работу radio.stopListening(); //не слушаем радиоэфир, мы передатчик } void loop() { transmit_data[0] = !digitalRead(button); // инвертированный (!) сигнал с кнопки transmit_data[1] = !digitalRead(button1); transmit_data[3] = !digitalRead(button2); transmit_data[4] = !digitalRead(button3); transmit_data[2] = map(analogRead(slider), 0, 1023, 0, 255); for (int i = 0; i < 4; i++) { // в цикле от 0 до числа каналов if (transmit_data[i] != latest_data[i]) { // если есть изменения в transmit_data flag = 1; // поднять флаг отправки по радио latest_data[i] = transmit_data[i]; // запомнить последнее изменение } } if (flag == 1) { radio.powerUp(); // включить передатчик radio.write(&transmit_data, sizeof(transmit_data)); // отправить по радио flag = 0; //опустить флаг radio.powerDown(); // выключить передатчик } }поменять названия пинов на ардуино Уно и соединить эти две программы.
убрать PA7
првет!)как вставить аналоговый джойстик в передачик
#include <SPI.h> #include "nRF24L01.h" #include "RF24.h" RF24 radio(9, 10); // "создать" модуль на пинах 9 и 10 Для Уно byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб byte button = 2; // кнопка на 2 цифровом byte button1 = 3; byte button2 = 4; byte button3 = 5; byte slider = 1; // движковый потенциометр на 1 аналоговом пине byte transmit_data[5]; // массив, хранящий передаваемые данные byte latest_data[5]; // массив, хранящий последние переданные данные boolean flag; // флажок отправки данных void setup() { Serial.begin(9600); //открываем порт для связи с ПК pinMode(button, INPUT_PULLUP); // настроить пин кнопки pinMode(button1, INPUT_PULLUP); pinMode(button2, INPUT_PULLUP); pinMode(button3, INPUT_PULLUP); 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_1MBPS); //скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS //должна быть одинакова на приёмнике и передатчике! //при самой низкой скорости имеем самую высокую чувствительность и дальность!! radio.powerUp(); //начать работу radio.stopListening(); //не слушаем радиоэфир, мы передатчик } void loop() { transmit_data[0] = !digitalRead(button); // инвертированный (!) сигнал с кнопки transmit_data[1] = !digitalRead(button1); transmit_data[3] = !digitalRead(button2); transmit_data[4] = !digitalRead(button3); transmit_data[2] = map(analogRead(slider), 0, 1023, 0, 255); for (int i = 0; i < 4; i++) { // в цикле от 0 до числа каналов if (transmit_data[i] != latest_data[i]) { // если есть изменения в transmit_data flag = 1; // поднять флаг отправки по радио latest_data[i] = transmit_data[i]; // запомнить последнее изменение } } if (flag == 1) { radio.powerUp(); // включить передатчик radio.write(&transmit_data, sizeof(transmit_data)); // отправить по радио flag = 0; //опустить флаг radio.powerDown(); // выключить передатчик } }он тут есть но только одно направление, прикручен к пину 1
#include <Servo.h> int joyX = 0; int angl = 0; Servo mservo; void setup() { mservo.attach(9); pinMode(joyX,INPUT); Serial.begin(9600); } void loop() { int val=(analogRead(joyX)/64)-8; if (val>0) { angl=angl+abs(val); } else { if(val<0) { angl=angl-abs(val);} } if (angl < 0) angl = 0; if (angl > 180) angl = 180; Serial.print("Power:"); Serial.println(val); Serial.print("Angle:"); Serial.println(angl); mservo.write(angl); int spd = 500; if(val!=0) { spd = 600/abs(val); } Serial.print("Speed:"); Serial.println(spd); Serial.println("--------"); delay(spd); }Я хотел управлять серво приводом с помощью джойстика, но к сажелению когда скетч загрузился сервопривод не поворачивался вправо и влево.