BASIC4MCU | 질문게시판 | 아두이노 MPU6050과 LED를 이용한 밝기조절
페이지 정보
작성자 초보아두 작성일2019-12-16 03:26 조회8,252회 댓글3건본문
안녕하세요!
첨부한 사진과 같이 MPU6050과 LED를 이용해서 각도에 따른 밝기조절을 공부하고 있는 학생입니다.
이러한 코드로 접근해보고 있는데, 뭔가 잘못되었는지 LED자체에 빛이 들어오질 않습니다.
아예 접근방식이 틀렸거나 코드자체가 틀린건가요 ㅠ 도와주시면 감사하겠습니다!
#include<Wire.h>
const int MPU_addr = 0x68;
int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;
#define ledPin 9
float brightness;
void setup(){
Wire.begin();
Wire.beginTransmission(MPU_addr);
Wire.write(0x6B);
Wire.write(0);
Wire.endTransmission(true);
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
}
void loop(){
Wire.beginTransmission(MPU_addr);
Wire.write(0x3B);
Wire.endTransmission(false);
Wire.requestFrom(MPU_addr,14,true);
AcX=Wire.read()<<8|Wire.read();
AcY=Wire.read()<<8|Wire.read();
AcZ=Wire.read()<<8|Wire.read();
Tmp=Wire.read()<<8|Wire.read();
GyX=Wire.read()<<8|Wire.read();
GyY=Wire.read()<<8|Wire.read();
GyZ=Wire.read()<<8|Wire.read();
Serial.print("AcX = "); Serial.print(AcX);
Serial.print(" | AcY = "); Serial.print(AcY);
Serial.print(" | AcZ = "); Serial.print(AcZ);
Serial.print(" | Tmp = "); Serial.print(Tmp/340.00+36.53);
Serial.print(" | GyX = "); Serial.print(GyX);
Serial.print(" | GyY = "); Serial.print(GyY);
Serial.print(" | GyZ = "); Serial.println(GyZ);
delay(50);
brightness=map(AcX, -16384, 16383, 0, 255);
brightness=constrain(brightness, 0, 255);
//Serial.println(brightness);
if (AcX<0) {
analogWrite(ledPin, brightness);
}
else {
analogWrite(ledPin, 0);
}
}
댓글 3
조회수 8,252master님의 댓글
master 작성일
//float brightness;
int brightness;
수정하고
Serial.print(" | AcY = "); Serial.print(AcY);
시리얼모니터에 얼마의 값이 출력되는지 적어보세요
초보아두님의 댓글
초보아두
감사합니다! float에서 int로 수정하니 라이팅은 잘 들어옵니다!
한 가지 더 궁금한 점은 이 밝기조절 범위가 현재 약 0도에서 90도 사이인데 이 값을 0도에서 180도로 바꾸고 싶은데, 어떤 값을 수정하면 될까요?
Serial.print(" | AcY = "); Serial.print(AcY); 값은 -300에서 -600정도로 출력되고 있습니다!
master님의 댓글
master
AcX를 적어보라고 적어야하는데 AcY를 적으라고 잘 못 썼군요
//
계산 결과를 2배로 만들려면
brightness=map(AcX, -8191, 8191, 0, 255);