M5Stackで顔を動かしてみた&高さ表示

M5Stack

M5Stackで顔の表示を動かしてみました。

さらに、接続したENV.Ⅲ SENSORで1気圧からのおおよその高さを表示させてみました。

使用したもの:M5Stack Basic V2.7、ENV.Ⅲ SENSOR、Arduino IDE 2.2.1(Windows11)

Arduinoのinoファイルは以下のようになりました

#include <M5Stack.h>
//#include <M5_ENV.h>
#include <QMP6988.h>
TFT_eSprite sprite = TFT_eSprite(&M5.Lcd);
QMP6988 qmp;

int mouth_x = 60;
int mouth_y = 50;
int mopen_f = 0;
int eye_y = 10;
int eye_hold = 100;

void setup() {
  M5.begin();
  dacWrite(25, 0);
  Wire.begin(21,22);
  qmp.init();

}

void loop() {
  M5.update();
  sprite.setColorDepth(8);
  sprite.createSprite(M5.Lcd.width(),M5.Lcd.height());
  sprite.setCursor(0,0);  
  sprite.printf("M5Stack Basic V2.7");
  sprite.setCursor(60,230);
  sprite.printf("A");
  sprite.setCursor(155,230);
  sprite.printf("B");
  sprite.setCursor(250,230);
  sprite.printf("C");    
  //eye

  if(eye_y == 2){
    eye_y = 10;
    eye_hold = 100;
  }
  else if(eye_y == 10 && eye_hold !=0){
    eye_hold =eye_hold -1 ;
  }
  else if(eye_y<=10){ 
    eye_y = eye_y -2 ;
  }
  else{
    eye_y = 10 ;}

  sprite.fillRect(104, 105-(eye_y/2), 2, eye_y, 0xFFFFFF);
  sprite.fillRect(204, 105-(eye_y/2), 2, eye_y, 0xFFFFFF);     
  //mouth

  if(mouth_x == 30){
    mouth_x = 60;
  }
  else if(mouth_x<=60){ 
    mouth_x = mouth_x -5 ;
  }
  else{
    mouth_x = 60 ;}

  if(mouth_y == 10){
    mouth_y = 60;
  }
  else if(mouth_y<=60){ 
    mouth_y = mouth_y -5 ;
  }
  else{
    mouth_y = 60 ;}

  sprite.fillRect(155-(mouth_x/2), 170-(mouth_y/2), mouth_x, mouth_y, 0xFFFFFF);
  if(M5.BtnA.isPressed()){
    sprite.drawLine(43, 210, 53, 220, 0xFFFFFF);   
    sprite.drawLine(63, 210, 63, 220, 0xFFFFFF); 
    sprite.drawLine(83, 210, 73, 220, 0xFFFFFF);    
  }
  if(M5.BtnB.isPressed()){
    sprite.drawLine(138, 210, 148, 220, 0xFFFFFF);   
    sprite.drawLine(158, 210, 158, 220, 0xFFFFFF); 
    sprite.drawLine(178, 210, 168, 220, 0xFFFFFF);    
  }
  if(M5.BtnC.isPressed()){
    sprite.drawLine(233, 210, 243, 220, 0xFFFFFF);   
    sprite.drawLine(253, 210, 253, 220, 0xFFFFFF); 
    sprite.drawLine(273, 210, 263, 220, 0xFFFFFF);    
  }    
  //SHT30
  Wire.beginTransmission(0x44);
  Wire.write(0x2C);
  Wire.write(0x06);
  Wire.endTransmission(true);
  Wire.requestFrom(0x44,6);
  unsigned int tmsb = Wire.read();
  unsigned int tlsb = Wire.read();
  unsigned int tcrc = Wire.read();
  unsigned int hmsb = Wire.read();
  unsigned int hlsb = Wire.read();
  unsigned int hcrc = Wire.read();
  float temp = -45+(175*((256*tmsb)+tlsb)/65535.0);
  float humi = (100*((256*hmsb)+hlsb)/65535.0);
  sprite.setCursor(0,10);  
  sprite.printf("Temp:%2.2f`C",temp);
  sprite.setCursor(0,20);  
  sprite.printf("Humi:%2.1f%%",humi);    
  //

  float pres = qmp.calcPressure() / 100;
  sprite.setCursor(0,30);  
  sprite.printf("Pres:%4.2fhPa",pres);

  float heig = -10*(pres -1013.25);
  sprite.setCursor(0,40);  
  sprite.printf("Heig:%4.2fm",heig);  
  //
  sprite.pushSprite(0,0);
}

動かしてみた様子です。

1mほど上昇すると0.1hPa低下して高さ表示が1m上がりました。

タイトルとURLをコピーしました