前回記事でサーボモータのコントロールができるようになったので、これを使って、きょろきょろしてみた。
特に、なんの役にもたちません。
ただ、視線を右や左に移し、それに応じてそっちを向くというものです。
首を振る動きに合わせて、目線も正面に戻ってくるというもの。
どうでしょう? 思惑どうりにできてるかな?
以下、スケッチ
前回記事で、ライブラリ化していなければ、前回記事のヘッダとソースが必要です。
manpuku-koji.hatenablog.com
#include <LovyanGFX.hpp> #include "MyServo.h" int outpin=D2; MyServo servo(outpin); static LGFX lcd; static LGFX_Sprite sprite(&lcd); void drawEye(int x, int y) { sprite.clear(); sprite.fillCircle(65,65,60,0xFFFF); //sprite.drawEllipse(65,65,60,30,0xFFFF); //sprite.drawFastHLine(5,62,120,0xFF); sprite.fillCircle(x,y,15,0); sprite.fillArc(65,65,60,1,180,360,0xED6E); sprite.setPivot(65,65); sprite.pushRotateZoom(80,70,0,1,0.5); sprite.pushRotateZoom(240,70,0,1,0.5); } void sleepyEyes() { int p_rect[4][4] = {{9,65,112,22},{22,65,86,41},{40,65,49,55},{63,65,4,59}}; sprite.clear(); sprite.fillCircle(65,65,60,0xFFFF); sprite.fillCircle(65,70,10,0); //sprite.fillArc(65,65,60,1,180,360,0xED6E); sprite.setPivot(65,65); for (int i=0;i<4;i++) { sprite.fillArc(65,65,60,1,180,360,0xED6E); sprite.fillArc(65,65,60,1,0,22*(i+1),0xED6E); sprite.fillArc(65,65,60,1,180-(22*(i+1)),180,0xED6E); sprite.fillRect(p_rect[i][0],p_rect[i][1],p_rect[i][2],p_rect[i][3],0xED6E); sprite.pushRotateZoom(80,70,0,1,0.5); sprite.pushRotateZoom(240,70,0,1,0.5); delay(200); } delay(2000); //sprite.pushRotateZoom(80,70,0,1,0.5); //sprite.pushRotateZoom(240,70,0,1,0.5); } void setup() { pinMode(WIO_5S_UP, INPUT_PULLUP); pinMode(WIO_5S_DOWN, INPUT_PULLUP); lcd.init(); lcd.setRotation(1); lcd.setBrightness(128); lcd.setColorDepth(16); lcd.clear(); sprite.setColorDepth(16); sprite.createSprite(130, 130); drawEye(115,75); lcd.drawArc(160,90,120,119,30,150,0xE800); } int counter = 0; void loop() { int x = random(15, 115); drawEye(x,70); if ( x > 65){ for (int pos = x; pos > 65; pos--) { drawEye(pos,75); servo.write0(90+(x-pos)*1.5); } } else { for (int pos = x; pos < 65; pos++) { drawEye(pos,75); servo.write0(90-(pos-x)*1.5); } } delay(1000); servo.write0(90); delay(random(5000)); counter++; if (counter>10){ counter = 0; sleepyEyes(); } }