본문 바로가기

전체 글210

[MPU6050] STM32 HAL I2C설정, I2C함수 저는 STM32F103RBT6-nucleo board 를 사용했습니다. ​ ​ cube mx 사용해서 i2c설정과 핀설정 완료 -hal i2c 설정 ​ (main.c) I2C_HandleTypeDef hi2c2; //구조체 변수 hi2c2로 선언 ​ static void MX_I2C2_Init(void) { hi2c2.Instance = I2C2; hi2c2.Init.ClockSpeed = 100000; hi2c2.Init.DutyCycle = I2C_DUTYCYCLE_2; hi2c2.Init.OwnAddress1 = 0; hi2c2.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; hi2c2.Init.DualAddressMode = I2C_DUALADDRESS_DISA.. 2021. 2. 20.
[MPU6050] 레지스터 1. MPU6050 레지스터 초기값 ​ 모든 레지스터의 초기값은 0x00이다. (예외 PWR_MGMT_1, WHO_AM_I) PWR_MGMT_1 = 0x40 (address 0x6B) WHO_AM_I = 0x68 (address 0x75) ​ 2. 필요한 레지스터 목록 (센서값 읽기 위해서 필요한 최소 레지스터) ​ 마스터에서 write하는 레지스터 ​ SMPLRT_DIV : 샘플링 레이트 설정 GYRO_CONFIG : 자이로스코프 측정범위 설정 ACCEL_CONFIG : 엑셀로미터 측정범위 설정 PWR_MGMT_1 : 센서 키기 ​ ​ SMPLRT_DIV : sample rate divider (address 0x19) MPU6050의 샘플 레이트를 정하기 위해 gyroscope out rate를 나누.. 2021. 2. 20.
[MPU6050] 기본소개, i2c, 연결 GY-521(MPU6050 6축 자이로스코프 모듈) 사용함 저는 STM32F103RBT6-nucleo board를 사용했습니다. 센서 값을 받기 위해 필요한 최소한의 레지스터 설명만 넣었습니다. 이 글에 없는 것 : self test, FIFO, DMP, 인터럽트, DHPF ​ 1. MPU6050 기본설명 ​ -3축 각속도 센서 + 3축 가속도 센서 (+ 온도 센서) -i2c 통신 사용 -16비트 analog to digital converters(ADCs) ​ -측정 범위 설정 가능(user programmable) 각속도 측정 범위 : ±250, ±500. ±1000, ±2000 deg/sec 가속도 측정 범위 : ±2g, ±4g, ±8g, ±16g (g : 중력 가속도) -평평한 바닥에 있으면 가속.. 2021. 2. 20.
[C] 백준 1193 진작 풀었는데 오타 못 잡아서 뻘 짓함..ㅎㅎ;; ​ X 번째 분수가 있는 대각선의 위치를 구한 다음에 그 대각선의 마지막 분수의 번호와 X의 차를 이용해 X 번째 분수의 값을 출력했다. #include int main() { int a; int b = 1; int i; scanf("%d", &a); for (i = 1; a > b; ) b += ++i; if (i % 2 == 0) printf("%d/%d", i - (b - a), 1 + (b - a)); else printf("%d/%d", 1 + (b - a), i - (b - a)); return 0; } 2021. 2. 20.
[C] 백준 2292 벌집 정중앙에 있는 1을 첫 번째 껍질 2, 3, 4, 5, 6, 7을 두 번째 껍질(...등등등...)이라고 생각했다. ​ 최소 개수의 방은 N번 방이 몇 번째 껍질에 위치하느냐를 찾으면 된다. #include int main() { int a; int b = 1; int i; scanf("%d", &a); for (i = 1; a > b; i++) b += 6 * i; printf("%d", i); return 0; } 2021. 2. 20.
조종기로 스로틀(만) 제어 동영상 가로로 찍어야하는데 자꾸 까먹는다. 동작 코드 모터 속도 범위는 2000이고 (48 - 2047) RC 조종기 범위는 1000이라서 (1000-2000) 원하는 모터 속도 = (RC 조종기 수신 값 - 1000) * 2 + 47 로 바꿔줬다. while (1) { if(mychannel_data[4] == 2000) // arming { if(mychannel_data[2] > 1011) // 69 { for(int i = 0; i < 4; i++) myvalue[i] = (mychannel_data[2] - 1000) * 2 + 47; } else { for(int i = 0; i < 4; i++) myvalue[i] = 69; // minimum value to spin smoothly } }.. 2021. 2. 20.