반응형
라즈베리파이3 B+ 조이스틱 구현 with C
찾아도 안 보이길래 그냥 10분만에 뚝딱 테스트 함.
조이스틱(Joystick)은 '스틱'이라 불리는 긴 막대형의 레버를 잡고 상하좌우로 밀거나 당겨서 조작하는 방식의 컨트롤러/입력장치로, 항공기의 보조날개와 승강타를 조종하기 위한 기계 장치로 개발되었다. 게이밍 기어 및 산업현장에서의 장비 제어 컨트롤러로도 종종 사용되며 항공기 등의 조종간으로서도 널리 사용된다. FBW를 적용한 항공기들의 경우 그 이전 세대의 항공기들과는 달리 유압식 조종간 대신 조이스틱 방식의 전자식 조종간을 널리 사용하는 편으로, 위치에 따라 사이드스틱이나 센터스틱 등으로 불린다. 현재 시판되는 게이밍용 조이스틱으로는 크게 디지털 조이스틱과 아날로그 조이스틱으로 나눌 수 있다. 과거 PC에서는 조이스틱하면 거의 무조건 플라이트 시뮬레이션을 위한 조종간인 아날로그 스틱을 의미했다.(출처 나무위키)
회로도
소스코드
#--------------------------------------
#
# MCP3208 ADC device using the SPI bus.
#
# Digital SW & Analogue joystick version!
#
# Author : girin - KyunHa
# Date : 2019. 10. 12
#
# https://www.diymaker.net/
#
#--------------------------------------
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <wiringPi.h>
#include <wiringPiSPI.h>
#define CS_MCP3208 8 //GPIO 8
#define SPI_CHANNEL 0
#define SPI_SPEED 1000000 //1Mhz
#define JOYSW 21
// spi communication with Rpi and get sensor data
int read_mcp3208_adc(unsigned char adcChannel)
{
unsigned char buff[3];
int adcValue = 0;
buff[0] = 0x06 | ((adcChannel & 0x07) >> 2);
buff[1] = ((adcChannel & 0x07) << 6);
buff[2] = 0x00;
digitalWrite(CS_MCP3208, 0);
wiringPiSPIDataRW(SPI_CHANNEL, buff, 3);
buff[1] = 0x0f & buff[1];
adcValue = (buff[1] << 8 ) | buff[2];
digitalWrite(CS_MCP3208, 1);
return adcValue;
}
int main(void) {
unsigned char adcChannel_joystickX = 3;
unsigned char adcChannel_joystickY = 2;
int joystick_x = 0;
int joystick_y = 0;
float vout_light;
float vout_oftemp;
float percentrh = 0;
float supsiondo = 0;
printf("start");
if(wiringPiSetup() == -1)
{
fprintf(stdout, "Unable to start wiringPi :%s\n", strerror(errno));
return 1;
}
pinMode(JOYSW, INPUT);
if(wiringPiSPISetup(SPI_CHANNEL, SPI_SPEED) == -1)
{
fprintf(stdout, "wiringPiSPISetup Failed :%s\n", strerror(errno));
return 1;
}
pinMode(CS_MCP3208, OUTPUT);
while(1)
{
joystick_x = read_mcp3208_adc(adcChannel_joystickX);
joystick_y = read_mcp3208_adc(adcChannel_joystickY);
if(digitalRead(JOYSW) == 0)
printf("ON! ");
else
printf("OFF! ");
//printf("Humiity = %u temparature = %u\n", adcValue_humi, adcValue_temp);
printf("joystick_x = %u joystick_y = %u\n", joystick_x, joystick_y);
delay(200);
}
return 0;
}
반응형
'라즈베리파이' 카테고리의 다른 글
라즈베리파이 3 B+ RGB Led 구현 with C (0) | 2019.10.12 |
---|---|
라즈베리파이3 B+ 부저, 스피커 음악 with python (0) | 2019.10.12 |
라즈베리파이3 B+ 초음파 센서 HC-SR04 테스트 C코드 (0) | 2019.10.11 |
라즈베리 파이 카메라 사용법과 mjpg 동영상 스트리밍 서버를 구현하기 (5) | 2019.10.11 |
라즈베리파이를 AP모드로 변경시 에러 처리 (2) | 2019.10.10 |