⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c_armcomm.c

📁 乐高机器人的源码,开发平台是IAR_for_AVR.
💻 C
📖 第 1 页 / 共 2 页
字号:
        }
      }
      break;

      case POWERUP_CHECK_RECHARGEABLE_VOLTAGE :
      {
        if (Rechargeable == TRUE)
        {
          if (dPowerConvert() < ARM_ON_MIN_COUNT)
          {
            if (StateTimer >= POWERUP_RECHARGE_TEST_TICK)
            {
              State = OFF;
            }
          }
          else
          {
            State = ON;
          }
        }
        else
        {
          State = ON;
        }
      }
      break;

      case ON :
      {
        CopyRightTimer = 0L;
        State          = ON_RUNNING;
      }
      break;

      case ON_RUNNING :
      {

        // Read all inputs
        dInputSelect(0);
        dInputConvert(0);
        dInputConvert(0);
        dInputDeselect(0);

        dInputSelect(1);
        dInputConvert(1);
        dInputConvert(1);
        dInputDeselect(1);

        dInputSelect(2);
        dInputConvert(2);
        dInputConvert(2);
        dInputDeselect(2);

        dInputSelect(3);
        dInputConvert(3);
        dInputConvert(3);
        dInputDeselect(3);

        // Update buttons
        dButtonUpdate();

        // Check for ARM communication
        if (dArmCommCheck() == TRUE)
        {
          ArmTimer = 0;
          ArmFucked = FALSE;
        }

        if (ArmTimer >= ON_ARM_TIMEOUT_TICK)
        {
          ArmFucked = TRUE;
        }
        else
        {
          ArmTimer++;
        }

        // Check for high voltage
        dPowerSelect();
        if (dPowerConvert() > ARM_ON_MAX_COUNT)
        {
          State = ON_HIGH_VOLTAGE;
        }

        // Control led
        if (ArmFucked == TRUE)
        {
          if (StateTimer >= LED_TOGGLE_TICK)
          {
            StateTimer = 0;
            if (LedState == TRUE)
            {
              LedState = FALSE;
            }
            else
            {
              LedState = TRUE;
            }
          }
        }
        else
        {
          LedState = TRUE;
        }

        if (LedState == FALSE)
        {
          dPowerDeselect();
        }

        // Check for SAMBA request
        if (dPowerReadBoot() == TRUE)
        {
          State = SAMBA;
        }

        // Check for POWERDOWN request
        if (dPowerReadOn() == FALSE)
        {
          State = POWERDOWN;        
        }

        // Check for CopyRight valid
        if (dArmCommCopyRight() != TRUE)
        {
          if (++CopyRightTimer >= COPYRIGHT_TICK)
          {
            State = POWERDOWN;
          }
        }
      }
      break;

      case ON_HIGH_VOLTAGE :
      {
        dInputInit();
        dPowerWriteOn(FALSE);             
        OverwriteFloat = TRUE;
        ButtonTimer = CHECK_TEST_BUTTON_TICK;
        State = ON_CHECK_BUTTON;
      }
      break;

      case ON_CHECK_BUTTON :
      {
        dPowerSelect();
        if (ButtonTimer)
        {
          dPowerDeselect();
          if (dPowerConvert() >= TEST_BUTTON_VALUE)
          {
            ButtonTimer++;
            if (ButtonTimer > (CHECK_TEST_BUTTON_TICK * 2))
            {
              dPowerSelect();
              State = SAMBA;
            }
          }
          else
          {
            ButtonTimer--; 
          }
        }
        else
        {
          if (dPowerConvert() <= ARM_ON_OK_COUNT)
          {
            State = RESET;
          }
        }
      }
      break;

      case POWERDOWN :
      {
        State = POWERDOWN_DISABLE_AMP;
      }
      break;

      case POWERDOWN_DISABLE_AMP :
      {
        if (!StateTimer)
        {
          dPowerDeselect();
        }
        if (StateTimer >= POWERUP_DISABLE_AMP_TICK)
        {
          State = POWERDOWN_TURN_ARM_OFF;
        }
      }
      break;

      case POWERDOWN_TURN_ARM_OFF :
      {
        if (!StateTimer)
        {
          dPowerWriteOn(FALSE);
        }
        if (StateTimer >= POWEROFF_TICK)
        {
          State = OFF;
        }
      }
      break;

      case OFF :
      {
        State = SLEEP;
      }
      break;

      case SAMBA :
      {
        State = SAMBA_ACTIVATE;
      }
      break;

      case SAMBA_ACTIVATE :
      {
        if (++StateTimer >= BUTTON_ACCEPT_TICK)
        {
          State = SAMBA_TURN_ARM_OFF_AND_WAIT;
        }
      }
      break;

      case SAMBA_TURN_ARM_OFF_AND_WAIT :
      {
        if (!StateTimer)
        {
          dPowerHigh();
          dPowerDeselect();
          dPowerWriteOn(FALSE);
        }
        if (++StateTimer >= SAMBA_POWEROFF_TICK)
        {
          State = SAMBA_TURN_ARM_ON_AND_WAIT;
        }
      }
      break;

      case SAMBA_TURN_ARM_ON_AND_WAIT :
      {
        if (!StateTimer)
        {
          dPowerWriteOn(TRUE);                
        }
        if (++StateTimer >= SAMBA_BOOT_TICK)
        {
          State = SAMBA_TURN_ARM_OFF_FOR_RESET;
        }
      }
      break;

      case SAMBA_TURN_ARM_OFF_FOR_RESET :
      {
        if (!StateTimer)
        {
          dPowerWriteOn(FALSE);                
          dPowerFloat();
        }
        if (++StateTimer >= SAMBA_POWEROFF_TICK)
        {
          State = SAMBA_TURN_ARM_ON;
        }
      }
      break;

      case SAMBA_TURN_ARM_ON :
      {
        dPowerWriteOn(TRUE);                
        State          = ON;
      }
      break;

      case SLEEP :
      {
        Result = FALSE;
      }
      break;

    }
  }

  // Update allways output
  dOutputUpdate(OverwriteFloat);

  return(Result);
}


void      cArmCommExit(void)
{
  dTimerExit();
  dArmCommExit();
  dButtonExit();
  dInputExit();
  dOutputExit();
  dPowerExit();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -