аналоговый джойстик на 3 контакта

Ruslan soloduch
Offline
Зарегистрирован: 11.04.2019

есть аналоговый джойстик на 3 контакта  вперед назад,от 1 до 5в среднее положенее 2.5 в. как написать код чтоб при движении джойстика вперед назад загорались разные диоды и не святились в среднем ?

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

С помощью analogRead() и нескольких условных операторов if.

gena321
Offline
Зарегистрирован: 19.01.2019
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;

    }

}

 

Ruslan soloduch
Offline
Зарегистрирован: 11.04.2019

првет!)как вставить аналоговый джойстик в передачик 


#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(); // выключить передатчик
  }
}

 

 

gena321
Offline
Зарегистрирован: 19.01.2019

поменять названия пинов на ардуино Уно и  соединить эти две программы.

LiquidCrystal lcd(1, 2, 4, 5, 6, 7);
int led = 13; 
PB0 = A0

убрать  PA7

 

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

Ruslan soloduch пишет:

првет!)как вставить аналоговый джойстик в передачик 


#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

leolem
Offline
Зарегистрирован: 22.06.2019

#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);
}

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