Skip to content
IsakiMatsubara edited this page Sep 18, 2021 · 12 revisions

初期動作プログラム

PLEN:bitを起動したときに、自動的に実行される関数です。

    servoInitialSet()
    eyeLed(LedOnOff.On)
    setEyeBrightness(20)
    setColorRGB(0, 255, 0)
    basic.pause(500)
    servoFree()

詳細

処理 説明
loadPos() 初期位置調整の値を取得し、上書きします。
servoInitialSet() サーボを初期位置に戻します。
eyeLed(LedOnOff.On) 目のLED(PLEN:bit v1)をオンにします。
setEyeBrightness(20) 初期位置調整の値を取得し、上書きします。
setColorRGB(0, 255, 0) 目のLED(PLEN:bit v2)の色を緑にします。
basic.pause(500) 処理を500ミリ秒止め、サーボが初期位置に戻まで待ちます。
servoFree() サーボモーターへの負荷を抑えるため、サーボの力を抜きます。

初期化プログラム

初めてサーボモーターを動かすときに自動的に実行される関数です。
サーボ制御ICPCA9865の初期化を行います。

    export function initPCA9865() { // PCA9685の初期設定
        if (readPCA9865(0xFE) != 0x00) { // PRE_SCALEが読み取れる <=> PCA9865が接続済み
            initPCA9865Flag = true
            writePCA9865(0x00, 0x10) // Sleep modeをONにして、内部クロックを停止
            writePCA9865(0xFE, 0x85) // PRE_SCALEを設定 ※ cf.P13 Writes to PRE_SCALE register are blocked when SLEEP bit is logic 0 (MODE 1)
            writePCA9865(0x00, 0x00) // Sleep modeをOFFにして、内部クロックをPRE_SCALEで動かす

            writePCA9865(0xFA, 0x00) // ALL_LED_ON_L 全PWMのONのタイミングを0にする
            writePCA9865(0xFB, 0x00) // ALL_LED_ON_H       〃
            writePCA9865(0xFC, 0x00) // ALL_LED_OFF_L 全PWMのOFFのタイミングを0にする
            writePCA9865(0xFD, 0x00) // ALL_LED_OFF_H       〃
        }
    }

詳細

処理 説明
writePCA9865() PCA9865にデータをI2Cで書き込みます。
readPCA9865() PCA9865からデータをI2Cで読み取ります。
initPCA9865Flag PCA9865の初期化処理の有無を格納する変数です。

初めてサーボモーターを動かすときに自動的に実行される関数です。
EEPROMに保存された初期位置データを読み取り、プログラムの動作に反映します。

    function initEEPROM() { // EEPROMのサーボ初期位置設定を反映する
        if (ReadEEPROM(0x32, 1)[0] != 0x00) { // モーションデータが読み取れる <=> EEPROMが接続済み
            initEEPROMFlag = true
            if (ReadEEPROM(0x00, 1)[0] == 0x01) {  // サーボ初期位置調整済み
                let readBuf = ReadEEPROM(0x02, 16)
                for (let i = 0; i < 8; i++) {
                    servoInitArray[i] = (readBuf[i * 2] << 8) | (readBuf[i * 2 + 1])
                }
            }
        }
    }

詳細

処理 説明
ReadEEPROM() EEPROMにデータをI2Cで書き込みます。
initEEPROMFlag EEPROMの初期化処理の有無を格納する変数です。

Home

PLEN:bitのプログラミング方法

ライブラリの概要

Clone this wiki locally