1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

M5SatmpS3、8x8 Puzzle Unit (Unit Puzzle ?)0度、90度、180度、270度、回転

Posted at

参考

いろいろ、注意

  • M5Stack by M5Stack official 2.1.4

結果

image_original(40).jpg

image_original(41).jpg

image_original(42).jpg

image_original(43).jpg

プログラム




//NeoPixel8x8_kaiten_M5StampS3_1


//インクルド
#include <Arduino.h>
#include <Adafruit_NeoPixel.h>
#include <misakiUTF16.h>


//定義
#define MAX_X 8
#define MAX_Y 8
#define NUM_LEDS 64
#define RGBLED_OUT 13
Adafruit_NeoPixel strip(NUM_LEDS, RGBLED_OUT, NEO_GRB + NEO_KHZ800);

unsigned char Pixel[8][8][3];  //キャラクターRAM(カラー)

long s_buff[8];  //スクロールバッファー


//スクロールバッファーを0で埋める
void kanji_scroll_clr() {
  for (int i = 0; i < 8; i++) {
    s_buff[i] = 0;
  }  //for
}  //kanji_scroll_clr


//スクロールバッファーにフォントをセットする
void kanji_scroll_set(unsigned char *font) {
  for (int i = 0; i < 8; i++) {
    int a;
    a = s_buff[i] & 0xff00;
    a = a | font[i];
    s_buff[i] = a;
  }  //for
}  //kanji_scroll_set


//スクロールバッファーを1ドット左にずらす
void kanji_scroll_1up(unsigned char *font) {
  for (int i = 0; i < 8; i++) {
    s_buff[i] = s_buff[i] << 1;
    font[i] = s_buff[i] >> 8;
  }  //for
}  //kanji_scroll_1up


//ネオピクセルに転送後に表示
void NeoPixe_OUT() {

  int k = 0;
  for (int y = 0; y < MAX_Y; y++) {
    for (int x = 0; x < MAX_X; x++) {

      strip.setPixelColor(k++, strip.Color(
                                 Pixel[y][x][0], Pixel[y][x][1], Pixel[y][x][2]));

    }  //for j
  }    //for i

  strip.show();  //再表示

}  //NeoPixe_OUT


//8x8文字の表示
void ch_8x8_f(unsigned char *font, int c1, int c2, int c3) {

  int i = 0;
  for (int y = 0; y < MAX_Y; y++) {
    int a = font[i++];
    for (int x = 0; x < MAX_X; x++) {

      if (((a << x) & 0x80) != 0) {
        Pixel[y][x][0] = c1;
        Pixel[y][x][1] = c2;
        Pixel[y][x][2] = c3;
      } else {
        Pixel[y][x][0] = 0;
        Pixel[y][x][1] = 0;
        Pixel[y][x][2] = 0;
      }  //if

    }  //for j
  }    //for i

  NeoPixe_OUT();  //RBG LEDに出力

}  //ch_8x8


//8ビットの並び順を逆転させるデータセット(テーブル)
unsigned char rev[] = {
  0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0, 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
  0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8, 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
  0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4, 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
  0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec, 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
  0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2, 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
  0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea, 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
  0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6, 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
  0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee, 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
  0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1, 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
  0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9, 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
  0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5, 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
  0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed, 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
  0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3, 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
  0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb, 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
  0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7, 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
  0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef, 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff
};


//フォントを180度回転する
void font180(unsigned char *font) {

  int c;
  c = font[0];
  font[0] = rev[font[7]];
  font[7] = rev[c];

  c = font[1];
  font[1] = rev[font[6]];
  font[6] = rev[c];

  c = font[2];
  font[2] = rev[font[5]];
  font[5] = rev[c];

  c = font[3];
  font[3] = rev[font[4]];
  font[4] = rev[c];

}  //font180


//フォントを180度回転する
void font90(unsigned char *font) {

  int a = font[0];

  int a0 = (a & 1);
  a = a >> 1;
  int a1 = (a & 1);
  a = a >> 1;
  int a2 = (a & 1);
  a = a >> 1;
  int a3 = (a & 1);
  a = a >> 1;

  int a4 = (a & 1);
  a = a >> 1;
  int a5 = (a & 1);
  a = a >> 1;
  int a6 = (a & 1);
  a = a >> 1;
  int a7 = (a & 1);


  for (int i = 1; i < 8; i++) {

    //処理

    a0 = a0 << 1;
    a1 = a1 << 1;
    a2 = a2 << 1;
    a3 = a3 << 1;

    a4 = a4 << 1;
    a5 = a5 << 1;
    a6 = a6 << 1;
    a7 = a7 << 1;

    a = font[i];

    a0 = a0 | (a & 1);a = a >> 1;
    a1 = a1 | (a & 1);a = a >> 1;
    a2 = a2 | (a & 1);a = a >> 1;
    a3 = a3 | (a & 1);a = a >> 1;

    a4 = a4 | (a & 1);a = a >> 1;
    a5 = a5 | (a & 1);a = a >> 1;
    a6 = a6 | (a & 1);a = a >> 1;
    a7 = a7 | (a & 1);

  }  //for i

  font[0] = a0;
  font[1] = a1;
  font[2] = a2;
  font[3] = a3;

  font[4] = a4;
  font[5] = a5;
  font[6] = a6;
  font[7] = a7;

}  //font90


//回転
void font360(unsigned char *font, int l) {

  l = l & 0b00000011;

  if (l == 1 | l == 3) {

    font90(font);  //90度回転

  }  //if

  if (l == 2 | l == 3) {

    font180(font);  //180度回転

  }  //if

}  //font360


unsigned char font1[] = {
  0b10000001,
  0b01000010,
  0b00100100,
  0b00011000,
  0b00011000,
  0b00100100,
  0b01000010,
  0b10000001
};


//初期化
void setup() {

  //ネオピクセルの設定
  strip.begin();
  strip.show();

  //テスト表示
  ch_8x8_f(font1, 5, 5, 5);  //表示
  delay(1000);

}  //setup


//メインループインクルド
void loop() {

  unsigned char font[8];  // フォント格納バッファ

  char str[64] = "あ";  // 文字列


  //文字列メッセージの表示
  char *ptr = str;
  while (*ptr) {  // 文字列分ループ

    ptr = getFontData(font, ptr, true);  // 1文字分のフォント取得(戻りは、次の文字)
    if (!ptr)
      break;  // エラーの場合は終了


    for (int i = 0; i < 4; i++) {

      ch_8x8_f(font, 5, 5, 5);  //表示
      delay(500);               //0.5秒待つ

      font360(font, 1);  //回転

      //if (i == 3) {while (1) {}} //debug}

    }  //for

  }  //while

}  //loop


1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?