BASIC4MCU | 질문게시판 | 답변 : 자이로 센서 와 LED 사용 코딩 질문입니다
페이지 정보
작성자 master 작성일2019-12-04 06:52 조회13,862회 댓글4건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=11024
작성일
본문
//void setup(){#if I2CDEV_IMPLEMENTATION==I2CDEV_ARDUINO_WIREWire.begin();Wire.setClock(400000);#elif I2CDEV_IMPLEMENTATION==I2CDEV_BUILTIN_FASTWIREFastwire:: setup(400,true);#endif//Serial.begin(115200); while(!Serial);Serial.println(F("Initializing I2C devices..."));//mpu.initialize();pinMode(INTERRUPT_PIN,INPUT);//Serial.println(F("Testing device connections..."));Serial.println(mpu.testConnection()?F("MPU6050 connection successful"):F("MPU6050 connection failed"));Serial.println(F("\nSend any character to begin DMP programming and demo: "));while(Serial.available()&&Serial.read());while(!Serial.available());while(Serial.available()&&Serial.read());Serial.println(F("Initializing DMP..."));devStatus=mpu.dmpInitialize();//mpu.setXGyroOffset(220); mpu.setYGyroOffset(76); mpu.setZGyroOffset(-85);mpu.setZAccelOffset(1788);//if(devStatus==0){mpu.CalibrateAccel(6); mpu.CalibrateGyro(6); mpu.PrintActiveOffsets();Serial.println(F("Enabling DMP..."));mpu.setDMPEnabled(true);Serial.print(F("Enabling interrupt detection(Arduino external interrupt "));Serial.print(digitalPinToInterrupt(INTERRUPT_PIN));Serial.println(F(")..."));//attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN),dmpDataReady,RISING);mpuIntStatus=mpu.getIntStatus();Serial.println(F("DMP ready!Waiting for first interrupt..."));dmpReady=true;//packetSize=mpu.dmpGetFIFOPacketSize();}else{ // ERROR!Serial.print(F("DMP Initialization failed(code ")); Serial.print(devStatus); Serial.println(F(")"));}//pinMode(LED_PIN,OUTPUT);}//void loop(){//if(!dmpReady)return;//while(!mpuInterrupt&&fifoCount<packetSize){if(mpuInterrupt&&fifoCount<packetSize){ fifoCount=mpu.getFIFOCount(); }// other program behavior stuff here//.//.//.// if you are really paranoid you can frequently test in between other// stuff to see if mpuInterrupt is true,and if so,"break; " from the// while()loop to immediately process the MPU data//.//.//.}//mpuInterrupt=false; mpuIntStatus=mpu.getIntStatus(); // reset interrupt flag and get INT_STATUS byte//fifoCount=mpu.getFIFOCount();if(fifoCount<packetSize){}else if((mpuIntStatus&_BV(MPU6050_INTERRUPT_FIFO_OFLOW_BIT))||fifoCount>=1024){mpu.resetFIFO(); Serial.println(F("FIFO overflow!"));}else if(mpuIntStatus&_BV(MPU6050_INTERRUPT_DMP_INT_BIT)){while(fifoCount>=packetSize){ mpu.getFIFOBytes(fifoBuffer,packetSize); fifoCount-=packetSize; }#ifdef OUTPUT_READABLE_QUATERNIONmpu.dmpGetQuaternion(&q,fifoBuffer);Serial.print("quat\t");Serial.print(q.w); Serial.print("\t");Serial.print(q.x); Serial.print("\t");Serial.print(q.y); Serial.print("\t");Serial.println(q.z);#endif//#ifdef OUTPUT_READABLE_EULERmpu.dmpGetQuaternion(&q,fifoBuffer);mpu.dmpGetEuler(euler,&q);Serial.print("euler\t");Serial.print(euler[0]*180/M_PI); Serial.print("\t");Serial.print(euler[1]*180/M_PI); Serial.print("\t");Serial.println(euler[2]*180/M_PI);#endif//#ifdef OUTPUT_READABLE_YAWPITCHROLLmpu.dmpGetQuaternion(&q,fifoBuffer); mpu.dmpGetGravity(&gravity,&q);mpu.dmpGetYawPitchRoll(ypr,&q,&gravity);Serial.print("ypr\t");Serial.print(ypr[0]*180/M_PI); Serial.print("\t");Serial.print(ypr[1]*180/M_PI); Serial.print("\t");Serial.println(ypr[2]*180/M_PI);#endif//#ifdef OUTPUT_READABLE_REALACCELmpu.dmpGetQuaternion(&q,fifoBuffer); mpu.dmpGetAccel(&aa,fifoBuffer);mpu.dmpGetGravity(&gravity,&q); mpu.dmpGetLinearAccel(&aaReal,&aa,&gravity);Serial.print("areal\t");Serial.print(aaReal.x); Serial.print("\t");Serial.print(aaReal.y); Serial.print("\t");Serial.println(aaReal.z);#endif//#ifdef OUTPUT_READABLE_WORLDACCELmpu.dmpGetQuaternion(&q,fifoBuffer); mpu.dmpGetAccel(&aa,fifoBuffer);mpu.dmpGetGravity(&gravity,&q); mpu.dmpGetLinearAccel(&aaReal,&aa,&gravity);mpu.dmpGetLinearAccelInWorld(&aaWorld,&aaReal,&q);Serial.print("aworld\t");Serial.print(aaWorld.x); Serial.print("\t");Serial.print(aaWorld.y); Serial.print("\t");Serial.println(aaWorld.z);#endif//#ifdef OUTPUT_TEAPOTteapotPacket[2]=fifoBuffer[0]; teapotPacket[3]=fifoBuffer[1];teapotPacket[4]=fifoBuffer[4]; teapotPacket[5]=fifoBuffer[5];teapotPacket[6]=fifoBuffer[8]; teapotPacket[7]=fifoBuffer[9];teapotPacket[8]=fifoBuffer[12]; teapotPacket[9]=fifoBuffer[13];Serial.write(teapotPacket,14);teapotPacket[11]++; // packetCount,loops at 0xFF on purpose#endif//blinkState=!blinkState;digitalWrite(LED_PIN,blinkState);}}
#ifdef OUTPUT_READABLE_QUATERNION
#endif//#ifdef OUTPUT_READABLE_EULER#endif//#ifdef OUTPUT_READABLE_YAWPITCHROLL#endif//#ifdef OUTPUT_READABLE_REALACCEL#endif//#ifdef OUTPUT_READABLE_WORLDACCEL#endif//#ifdef OUTPUT_TEAPOT#endif출력 선언을 어떤 것으로 했는지에 따라서 선택된 구간만 실행 됩니다.
#ifdef OUTPUT_READABLE_QUATERNIONmpu.dmpGetQuaternion(&q,fifoBuffer);Serial.print("quat\t");Serial.print(q.w); Serial.print("\t");Serial.print(q.x); Serial.print("\t");Serial.print(q.y); Serial.print("\t");Serial.println(q.z);#endif예를들면 OUTPUT_READABLE_QUATERNION이 선언되어 있다면 위 코드만 실행 됩니다.
#ifdef OUTPUT_READABLE_QUATERNIONmpu.dmpGetQuaternion(&q,fifoBuffer);Serial.print("quat\t");Serial.print(q.w); Serial.print("\t");Serial.print(q.x); Serial.print("\t");Serial.print(q.y); Serial.print("\t");Serial.println(q.z);if(q.x>)digitalWrite(LED_PIN,1); // 추가else digitalWrite(LED_PIN,0); // 추가#endif////blinkState=!blinkState; // 삭제//digitalWrite(LED_PIN,blinkState); // 삭제}}
if(q.x>30)digitalWrite(LED_PIN,1); // 추가else digitalWrite(LED_PIN,0); // 추가해당 구간에 if 조건문을 사용해서 LED를 구동하면 됩니다.//blinkState=!blinkState; // 삭제//digitalWrite(LED_PIN,blinkState); // 삭제제일아래 블링크 문장은 삭제해야겠죠
댓글 4
조회수 13,862박준영님의 댓글
박준영 작성일정말 고맙습니다 ㅜㅜㅜ
박준영님의 댓글
박준영 작성일#ifdef OUTPUT_READABLE_YAWPITCHROLL 을 선언 하여 사용 하려고 하는데 그러면 if 구문을 어떻게 써야 LED를 구동 시킬수 있을까요??
master님의 댓글
master
전체 소스코드가 아니라서 설명 불가입니다.
박준영님의 댓글
박준영 작성일
if(q.x>30)digitalWrite(LED_PIN,1); // 추가
else digitalWrite(LED_PIN,0); // 추가
해당 구간에 if 조건문을 사용해서 LED를 구동하면 됩니다.
//blinkState=!blinkState; // 삭제
//digitalWrite(LED_PIN,blinkState); // 삭제
제일아래 블링크 문장은 삭제해야겠죠
이 부분을 코딩에 추가 하라고 하셨는데 OUTPUT_READABLE_QUATERNION 을 선언 하는 것 대신에OUTPUT_READABLE_YAWPITCHROLL 을 선언하려고 하는데 그대로 추가 하면 되는건가요?