基于加速计的M5StickC图片旋转显示-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1661|回复: 1

基于加速计的M5StickC图片旋转显示

[复制链接]
发表于 2020-3-2 17:34 | 显示全部楼层 |阅读模式
     简单演示加速计控制图片旋转角度-45/-30/-15/0/15/30/45 ,一共7个旋转角度,提前处理7张(像素80x80)图片存入数组,根据加速计当前状态进行显示。
IMG_3824.JPG

[mw_shl_code=arduino,true]#include <M5StickC.h>
#include "img.c"//提前处理的图片文件

float accX = 0.0F;
float accY = 0.0F;
float accZ = 0.0F;
int xpos = 40;

void setup() {
  // put your setup code here, to run once:
  M5.begin();
  M5.IMU.Init();//
  
  M5.Axp.ScreenBreath(9);
  M5.Lcd.setRotation(3);
  M5.Lcd.fillScreen(0x0000);
  M5.Lcd.drawBitmap(xpos, 0, 80, 80, img[3]);
}

void loop() {
  // put your main code here, to run repeatedly:
  M5.IMU.getAccelData(&accX,&accY,&accZ);
  accY = accY-0.0;
  if(accY<-0.2||accY>0.2){
    int moveSpeed = -int(floor(accY*10/2));

    if(accY>0.1){
      xpos = max(0,xpos+moveSpeed);
      M5.Lcd.fillRect(xpos+80,0,-moveSpeed,80,0x0000);
    }

    else if(accY<-0.1){
      xpos = min(79,xpos+moveSpeed);
      M5.Lcd.fillRect(xpos-moveSpeed,0,moveSpeed,80,0x0000);
    }
    if(xpos<7){
      M5.Lcd.drawBitmap(xpos, 0, 80, 80, img[0]);
    }
    else if(xpos<20){
      M5.Lcd.drawBitmap(xpos, 0, 80, 80, img[1]);
    }
    else if(xpos<33){
      M5.Lcd.drawBitmap(xpos, 0, 80, 80, img[2]);
    }
    else if(xpos<47){
      M5.Lcd.drawBitmap(xpos, 0, 80, 80, img[3]);
    }
    else if(xpos<60){
      M5.Lcd.drawBitmap(xpos, 0, 80, 80, img[4]);
    }
    else if(xpos<73){
      M5.Lcd.drawBitmap(xpos, 0, 80, 80, img[5]);
    }
    else{
      M5.Lcd.drawBitmap(xpos, 0, 80, 80, img[6]);
    }
  }
}[/mw_shl_code]

img.C可从网上找图片转数组工具进行处理组成数组或运行以下py脚本进行转换
[mw_shl_code=python,true]from PIL import Image
import numpy as np
import glob

#print('フォルダ名')
#dirname = input('>> ')
dirname = 'rotateImage'

files = glob.glob(dirname+'\*')

img0 = Image.open(files[0])
width0, height0 = img0.size


path_w = 'img.c'
with open(path_w, mode='w') as f:
    for file in files:
        print(file)
        f.write('//'+file+'\n')

    f.write('const unsigned short img[{}][{}] = '.format(len(files),width0*height0))
    f.write('{\n')

    for i,file in enumerate(files):
        print(file)
        img = Image.open(file)
        f.write('\t{\n')
        for y in range(height0):
            f.write('\t')
            for x in range(width0):
                img_pixels = img.getpixel((x,y))

                R = img_pixels[0]>>3
                G = img_pixels[1]>>2
                B = img_pixels[2]>>3
                img_data = int(R*2048+G*32+B)
                f.write(format(img_data,'#06x'))

                if x == width0-1:

                    if y == height0-1:
                        f.write('\n\t}')
                    else:
                        f.write(',\n')

                else:
                    f.write(',')
        if i < len(files)-1:
            f.write(',')
    f.write('};')[/mw_shl_code]

参考img文件 img.c.zip (29.24 KB, 下载次数: 13)
发表于 2020-3-3 10:03 | 显示全部楼层
这是非常使用的技巧,已收藏,谢谢分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-27 17:14 , Processed in 0.103572 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表