M5StickC의 자세를 검지하여 시정 잠금 이력 관리
개요
준비하는 것
환경 구축
(1) Arduino IDE 설치
htps //w w. 아르즈이의. C / En / Main / 그 f와
(2) M5StickC 관련 라이브러리 설치
스케치 → 라이브러리 포함 → 라이브러리 관리
M5StickC 검색
프로그래밍
lockstate.ino
#include <M5StickC.h>
#include "Ambient.h"
#define POSE_P_X 0
#define POSE_M_X 1
#define POSE_P_Y 2
#define POSE_M_Y 3
#define POSE_P_Z 4
#define POSE_M_Z 5
uint8_t pose = POSE_P_X;
uint8_t prev_pose = POSE_P_X;
WiFiClient client;
Ambient ambient;
const char* ssid = "xxxxxxxxxxxxxx";
const char* password = "xxxxxxxxxxxx";
unsigned int channelId = "xxxxx"; // AmbientのチャネルID
const char* writeKey = "xxxxxxxxxxxxxxxx"; // ライトキー
// 加速度
float accX_g = 0;
float accY_g = 0;
float accZ_g = 0;
float accX_mpss = 0;
float accY_mpss = 0;
float accZ_mpss = 0;
// 角速度
float gyroX_dps = 0;
float gyroY_dps = 0;
float gyroZ_dps = 0;
boolean near_p_g(float value){
if(8.0 < value && value < 12.0){
return true;
}else{
return false;
}
}
boolean near_m_g(float value){
if(-12.0 < value && value < -8.0){
return true;
}else{
return false;
}
}
boolean near_zero(float value){
if(-2.0 < value && value < 2.0){
return true;
}else{
return false;
}
}
void setup() {
// Initialize the M5StickC object
M5.begin();
M5.MPU6886.Init();
M5.Lcd.setRotation(1);
M5.Lcd.fillScreen(BLACK);
M5.Lcd.setTextSize(1);
WiFi.begin(ssid, password); // Wi-Fi APに接続
while (WiFi.status() != WL_CONNECTED) { // Wi-Fi AP接続待ち
delay(500);
Serial.print(".");
}
Serial.print("WiFi connected\r\nIP address: ");
Serial.println(WiFi.localIP());
ambient.begin(channelId, writeKey, &client); // チャネルIDとライトキーを指定してAmbientの初期化
}
void loop() {
M5.Lcd.fillScreen(BLACK);
M5.Lcd.setTextSize(3);
// 加速度取得
M5.MPU6886.getAccelData(&accX_g,&accY_g,&accZ_g);
accX_mpss = accX_g * 9.8;
accY_mpss = accY_g * 9.8;
accZ_mpss = accZ_g * 9.8;
// 角速度取得
M5.MPU6886.getGyroData(&gyroX_dps,&gyroY_dps,&gyroZ_dps);
if(near_zero(accX_mpss) && near_p_g(accY_mpss) && near_zero(accZ_mpss)){
pose = POSE_P_Y;
}else if(near_p_g(accX_mpss) && near_zero(accY_mpss) && near_zero(accZ_mpss)){
pose = POSE_P_X;
}else if(near_zero(accX_mpss) && near_zero(accY_mpss) && near_p_g(accZ_mpss)){
pose = POSE_P_Z;
}else if(near_zero(accX_mpss) && near_m_g(accY_mpss) && near_zero(accZ_mpss)){
pose = POSE_M_Y;
}else if(near_m_g(accX_mpss) && near_zero(accY_mpss) && near_zero(accZ_mpss)){
pose = POSE_M_X;
}else if(near_zero(accX_mpss) && near_zero(accY_mpss) && near_m_g(accZ_mpss)){
pose = POSE_M_Z;
}
// 姿勢に変化があった場合にのみ描画する
if(prev_pose != pose){
M5.Lcd.fillScreen(BLACK);
switch(pose){
case POSE_M_X:
M5.Lcd.setRotation(3);
M5.Lcd.setCursor(56, 16);
M5.Lcd.print("CLOSE");
// 施錠の情報をAmbientに送信する
ambient.set(1, 0);
ambient.send();
delay(500);
break;
case POSE_P_Y:
M5.Lcd.setRotation(3);
M5.Lcd.setCursor(56, 16);
M5.Lcd.print("OPEN");
// 解錠の情報をAmbientに送信する
ambient.set(1, 1);
ambient.send();
delay(500);
break;
default:
;
}
}
prev_pose = pose;
delay(100);
}
주의점
기타
Reference
이 문제에 관하여(M5StickC의 자세를 검지하여 시정 잠금 이력 관리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/cami_oshimo/items/6d6ee17eea37106fd708텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)