# 第20回目  参考サイト https://daeudaeu.com/programming-sankaku/#:~:text=%E4%B8%8A%E3%81%AE%E5%9B%B3%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E9%9D%92%E3%81%A7%E8%89%B2%E3%82%92%E3%81%A4%E3%81%91%E3%81%9F%E9%83%A8%E5%88%86%E3%81%AF%E7%9B%B4%E8%A7%92%E4%B8%89%E8%A7%92%E5%BD%A2%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%81%AE%E3%81%A7%E3%80%81%20%E4%B8%89%E8%A7%92%E9%96%A2%E6%95%B0%E3%81%AE%E4%BE%BF%E5%88%A9%E3%81%AA%E3%81%A8%E3%81%93%E3%82%8D%20%E3%81%A7%E3%82%82%E7%B4%B9%E4%BB%8B%E3%81%97%E3%81%9F%E4%B8%8B%E8%A8%98%E3%81%AE%E8%A8%88%E7%AE%97%E5%BC%8F%E3%81%AB%E3%82%88%E3%82%8A%20x%20%E5%BA%A7%E6%A8%99%E3%81%A8%20y%20%E5%BA%A7%E6%A8%99%E3%82%92%E6%B1%82%E3%82%81%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E5%87%BA%E6%9D%A5%E3%81%BE%E3%81%99%E3%80%82%20x,r%20%2A%20cos%CE%B8%20y%20%3D%20r%20%2A%20sin%CE%B8 前回やったこと 座標を指定して移動する(cu-bricksの方まで完成) 今回の目標 進みたい距離の座標を入力して進む ## sample.jsへの実装 ``` let a,b; let angle; let cubeX; let cubeY; cube.on('id:position-id', data => { angle = data.angle; cubeX = data.x; cubeY = data.y; }) let zx,zy,theata; function keypress_ivent(e){ if(e.code === 'Enter'){ theata = angle; zx = cubeX; zy = cubeY; console.log('スタート_X座標',zx); console.log('スタート_Y座標',zy); console.log('theata',theata); a = r.value * Math.sin(theata * (Math.PI / 180)); b = r.value * Math.cos(theata * (Math.PI / 180)); zx = zx + b; zy = zy + a; console.log('ゴール_ZX座標',zx); console.log('ゴール_ZY座標',zy); Convert16from10(); cube.motorCharacteristic.characteristic.write( Buffer.from([0x03, //制御の種類 0x02, //制御識別値 0xff, //タイムアウト時間 0x02, //移動タイプ 0x50, //モーターの最大速度指示値 0x00, //モーターの速度変化タイプ 0x00, //Reserved x1, x2, //目標地点の X 座標値 y1, y2, //目標地点の Y 座標値 0x00, 0xA0]), //目標地点でのキューブの角度θ false); } } ``` 現在の座標と向いてる角度を取得し、三角関数を用いてゴールの座標の値を計算する。その後、上位8ビット下位8ビットの変換の関数(18回目参照)を読み込む。最後にゴールの座標を代入し、移動を開始する。 ## Cu-bricksへの実装 cubricks-toio.js ![](https://i.imgur.com/zXYb1rJ.png) interpreter.js ![](https://i.imgur.com/niybNAg.png) Elm.main ![](https://i.imgur.com/JkkVnDr.png) index.html ![](https://i.imgur.com/z1DfNDP.png) 実際の所、実行できるが思い通りに動かない。 今ある問題点として、実行した際にcube.on("position-id", data)が上手く実行されず angleやcubeX,cubeYなどの値がNaNになってしまう。 おそらくcube.on("position-id", data)を取得するのに時間がかかってしまい、先に変数代入が行われてしまうため、 今回の問題が発生したと思っている。 position-idの抽出がもう少し上手く行えればできるかもしれない。 来週はそこの完成を目指したい。