Ви не увійшли.
Сторінки 1
Привет парни, если есть возможность подскажите пожалуйста ... к Ардуино подключен джойстик и кнопка .. как одновременно считать значения с аналоговых входов для джойстика и цыфрового входа для конопки ??? То есть мне надо что б когда я управляю джойстиком можно было паралельно (при нажатом джойстике) управлть и кнопкой ?? Мой не паралельный код
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#define axis_X 0
#define axis_Y 1
int buttonPin =5;
int buttonPin2 =6;
int buttonState = 0;
RF24 radio(9, 10);
void setup(){
pinMode(buttonPin,INPUT);
pinMode(buttonPin2,INPUT);
Serial.begin(9600);
radio.begin();
radio.setChannel(5);
radio.setDataRate (RF24_1MBPS);
radio.setPALevel (RF24_PA_HIGH);
radio.openWritingPipe (0x1234567890LL);
}
void loop(){
int data;
if (buttonState = digitalRead(buttonPin) ){
data = 2;
radio.write(&data, sizeof(data));
}
while(analogRead(axis_X)>900 && analogRead(axis_X)<1024) {
data = 4;
radio.write(&data, sizeof(data));
}
while(analogRead(axis_X)>-1 && analogRead(axis_X)<100) {
data = 5;
radio.write(&data, sizeof(data));
}
while(analogRead(axis_Y)>900 && analogRead(axis_Y)<1024) {
data = 6;
radio.write(&data, sizeof(data));
}
while(analogRead(axis_Y)>-1 && analogRead(axis_Y)<100) {
data = 7;
radio.write(&data, sizeof(data));
}
}
Неактивний
собирается?
не проверял синтаксис
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#define axis_X 0
#define axis_Y 1
int buttonPin =5;
int buttonPin2 =6;
int buttonState = 0;
RF24 radio(9, 10);
void setup(){
pinMode(buttonPin,INPUT);
pinMode(buttonPin2,INPUT);
Serial.begin(9600);
radio.begin();
radio.setChannel(5);
radio.setDataRate (RF24_1MBPS);
radio.setPALevel (RF24_PA_HIGH);
radio.openWritingPipe (0x1234567890LL);
}
#define buttom_key 0x01
#define joy_x_left 0x02
#define joy_x_rigth 0x04
#define joy_y_up 0x08
#define joy_y_down 0x10
typedef enum {
TIMER_EXE = 0,
TIMER_DISABLED = 1,
TIMER_RUN = 2,
}TE_TIMER;
TE_TIMER system_delay_uint32 ( unsigned long *timer , unsigned long shift )
{
if ( *timer > 0 )
{
if (*timer > shift )
{
*timer -= shift;
return TIMER_RUN;
}
else
{ // save delta time
*timer = ( shift - *timer );
return TIMER_EXE;
}
}
return TIMER_DISABLED;
}
// main cycle
void loop()
{
static unsigned long hw_old_system_timer = 0;
unsigned long hw_current_system_timer = 0;
unsigned long delta_task_timer;
TE_TIMER status;
unsigned char data = 0;
static unsigned char old_data = 0xff;
int jx = 0;
int jy = 0;
if ( buttonState = digitalRead(buttonPin) )
{
data |= buttom_key ;
}
jx = AnalogRead(axis_X);
jy = AnalogRead(axis_Y);
// user limits, emu 4 key
if (( jx > 900 ) data |= joy_x_rigth;
if (( jx < 100 ) data |= joy_x_left;
if (( jy > 900 ) data |= joy_y_up;
if (( jy < 100 ) data |= joy_y_down;
if ( data != old_data)
{
radio.write(&data, sizeof(data)); // unit8_t
old_data = data;
task_time = 1000; // reset timer
}
hw_current_system_timer = millis();
delta_task_timer = hw_current_system_timer - hw_old_system_timer;
hw_old_system_timer = hw_current_system_timer;
status = system_delay_uint32 ( &task_time, delta_task_timer );
switch ( status )
{
case TIMER_EXE:
case TIMER_DISABLED:
task_time += 1000;
radio.write(&data, sizeof(data)); // test, every 1 sec
break;
case TIMER_RUN:
break;
}
}
распаковывать
if ( data & buttom_key ) {}
if ( data & joy_x_left ) {}
if ( data & joy_x_rigth ) {}
if ( data & joy_y_up ) {}
if ( data & joy_y_down ) {}
либо передавать структуру с данными
typedef struct
{
int jx;
int jy;
int status; // buttom & servcive data
} td_joy;
и на приемнике обрабатывать если исполнительный механизм медленный, иначе передайте байт
Остання редакція NoName (2017-03-16 12:01:11)
Неактивний
Мой вариант воспользоваться классом джойстик Полный скетч здесь https://yadi.sk/d/x92BFogP3G2iiB
Код главного файла выкладываю
/* Class_do_joystic.ino
#1 джойстик VRx ->A0 (VRx_pin)
VRy ->A1 (VRy_pin)
SW ->A2 (SW_pin)
Принцип кода:Отработать джойстик
*/
//#1 Джойстик
#include "Cl_do_joystic.h"
const byte VRx_pin = A0;
const byte VRy_pin = A1;
const byte SW_pin = A2;
void Do_VRx(void);
void Do_VRy(void);
void Do_SW(void);
Cl_do_joystic Joystic(VRx_pin, VRy_pin, SW_pin, // пины для подключения джойстика
0, // 0 - уровень наж кнопке SW
& Do_VRx, & Do_VRy, & Do_SW); // какую функцию надо сделать
void Do_VRx(void) {
Serial.print("VRx= ");
Serial.println(Joystic.VRx);
}
void Do_VRy(void) {
Serial.print("VRy= ");
Serial.println(Joystic.VRy);
}
void Do_SW(void) {
Serial.println("Press SW");
}
void setup() {
Serial.begin(9600);
//#1 Джойстик
Joystic.setup();
}
void loop() {
//#1 Джойстик
Joystic.loop();
}
Неактивний
Сторінки 1