极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10661|回复: 7

求大神指导,编译通过,无法正常运行,求科普,貌似陷入死循环了

[复制链接]
发表于 2015-8-14 16:19:17 | 显示全部楼层 |阅读模式
#include <Wire.h>
#include <MPU6050.h>
int dianji1=3;
int dianji2=5;
int dianji3=6;
int dianji4=9;
int BEEP=13;

MPU6050 mpu;
void setup()
{
  Serial.begin(115200);
  Serial.println("Initialize MPU6050");
  while(!mpu.begin(MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G))
  {
    Serial.println("Could not find a valid MPU6050 sensor, check wiring!");
    delay(500);
  }
  checkSettings();
  pinMode(dianji1,OUTPUT);
  pinMode(dianji2,OUTPUT);
  pinMode(dianji3,OUTPUT);
  pinMode(dianji4,OUTPUT);
  pinMode(BEEP,OUTPUT);
  digitalWrite(dianji1,HIGH);
  delay(500);
}
void checkSettings()
{
  Serial.println();

  Serial.print(" * Sleep Mode:            ");
  Serial.println(mpu.getSleepEnabled() ? "Enabled" : "Disabled");

  Serial.print(" * Clock Source:          ");
  switch(mpu.getClockSource())
  {
  case MPU6050_CLOCK_KEEP_RESET:     
    Serial.println("Stops the clock and keeps the timing generator in reset");
    break;
  case MPU6050_CLOCK_EXTERNAL_19MHZ:
    Serial.println("PLL with external 19.2MHz reference");
    break;
  case MPU6050_CLOCK_EXTERNAL_32KHZ:
    Serial.println("PLL with external 32.768kHz reference");
    break;
  case MPU6050_CLOCK_PLL_ZGYRO:      
    Serial.println("PLL with Z axis gyroscope reference");
    break;
  case MPU6050_CLOCK_PLL_YGYRO:      
    Serial.println("PLL with Y axis gyroscope reference");
    break;
  case MPU6050_CLOCK_PLL_XGYRO:      
    Serial.println("PLL with X axis gyroscope reference");
    break;
  case MPU6050_CLOCK_INTERNAL_8MHZ:  
    Serial.println("Internal 8MHz oscillator");
    break;
  }

  Serial.print(" * Accelerometer:         ");
  switch(mpu.getRange())
  {
  case MPU6050_RANGE_16G:            
    Serial.println("+/- 16 g");
    break;
  case MPU6050_RANGE_8G:            
    Serial.println("+/- 8 g");
    break;
  case MPU6050_RANGE_4G:            
    Serial.println("+/- 4 g");
    break;
  case MPU6050_RANGE_2G:            
    Serial.println("+/- 2 g");
    break;
  }  

  Serial.print(" * Accelerometer offsets: ");
  Serial.print(mpu.getAccelOffsetX());
  Serial.print(" / ");
  Serial.print(mpu.getAccelOffsetY());
  Serial.print(" / ");
  Serial.println(mpu.getAccelOffsetZ());

  Serial.println();
}
void loop()
{
  float jiaodu=0;
  Vector normAccel = mpu.readNormalizeAccel();
  jiaodu=acos(normAccel.ZAxis/8.8);
  delay(50);
LABEL1:
  if((acos(normAccel.ZAxis/8.8)-jiaodu)>0)
  {

    if(-5<jiaodu)
    {
      LABEL:
      digitalWrite(dianji3,HIGH);
      digitalWrite(dianji1,LOW);
      if(jiaodu>5)
      {
        digitalWrite(dianji3,LOW);
        digitalWrite(dianji1,LOW);
        if(jiaodu>20)
        {
          digitalWrite(BEEP,HIGH);
          digitalWrite(dianji3,LOW);
          digitalWrite(dianji1,HIGH);
          goto LABEL1;
        }
        else
        {
          digitalWrite(dianji3,LOW);
          digitalWrite(dianji1,LOW);
        }

      }
      else
        goto LABEL;
    }
    else
    {
      digitalWrite(dianji3,LOW);
      digitalWrite(dianji1,LOW);
    }
  }
  else
  {

    if(jiaodu<5)
    {
      LABEL2:
      digitalWrite(dianji1,HIGH);
      digitalWrite(dianji3,LOW);
      if(jiaodu<-5)
      {
        digitalWrite(dianji3,LOW);
        digitalWrite(dianji1,LOW);
        if(jiaodu<-20)
        {
          digitalWrite(BEEP,HIGH);
          digitalWrite(dianji3,HIGH);
          digitalWrite(dianji1,LOW);
          goto LABEL1;
        }
        else
        {
          digitalWrite(dianji1,LOW);
          digitalWrite(dianji3,LOW);
        }
      }
      else
        goto LABEL2;
    }
  }
}

求大神指导,编译通过,无法正常运行,求科普,貌似陷入死循环了
回复

使用道具 举报

发表于 2015-8-14 19:35:47 | 显示全部楼层
while(!mpu.begin(MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G))
  {
    Serial.println("Could not find a valid MPU6050 sensor, check wiring!");
    delay(500);
  }
回复 支持 反对

使用道具 举报

发表于 2015-8-15 16:48:52 | 显示全部楼层
serial monitor 上看到什麼?
回复 支持 反对

使用道具 举报

发表于 2015-8-15 18:15:40 | 显示全部楼层
先简要说一下你实现的功能
回复 支持 反对

使用道具 举报

发表于 2015-8-15 18:16:36 | 显示全部楼层
很常见,程序没错误,但不是自己要的结果
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-8-17 21:00:40 | 显示全部楼层
suoma 发表于 2015-8-15 18:16
很常见,程序没错误,但不是自己要的结果

就是这样的,因为实际动作和程序延时之间有问题,实现不了功能
回复 支持 反对

使用道具 举报

发表于 2015-8-19 19:54:02 | 显示全部楼层
玉皇大帝 发表于 2015-8-17 21:00
就是这样的,因为实际动作和程序延时之间有问题,实现不了功能

不知道实现什么功能?你仔细检查
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-8-19 23:08:54 | 显示全部楼层
其实就是让电机在正负5度内加速,到达正负20度报警并刹车
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 19:14 , Processed in 0.043134 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表