#author("2022-06-26T08:46:28+09:00","default:TeleportDresser","TeleportDresser")
#author("2022-07-12T20:51:24+09:00","default:TeleportDresser","TeleportDresser")
[[TeleportDresser]]

#code(C){{
// Adafruit_NeoMatrix example for single NeoPixel Shield.
// Scrolls 'Howdy' across the matrix in a portrait (vertical) orientation.
 
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
#ifndef PSTR
 #define PSTR // Make Arduino Due happy
#endif
 
#include <Wire.h>
#define SLAVE_ADDRESS 0x30
int status = 0;
 
#define PIN 6
 
// MATRIX DECLARATION:
// Parameter 1 = width of NeoPixel matrix
// Parameter 2 = height of matrix
// Parameter 3 = pin number (most are valid)
// Parameter 4 = matrix layout flags, add together as needed:
//   NEO_MATRIX_TOP, NEO_MATRIX_BOTTOM, NEO_MATRIX_LEFT, NEO_MATRIX_RIGHT:
//     Position of the FIRST LED in the matrix; pick two, e.g.
//     NEO_MATRIX_TOP + NEO_MATRIX_LEFT for the top-left corner.
//   NEO_MATRIX_ROWS, NEO_MATRIX_COLUMNS: LEDs are arranged in horizontal
//     rows or in vertical columns, respectively; pick one or the other.
//   NEO_MATRIX_PROGRESSIVE, NEO_MATRIX_ZIGZAG: all rows/columns proceed
//     in the same order, or alternate lines reverse direction; pick one.
//   See example below for these values in action.
// Parameter 5 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_GRBW    Pixels are wired for GRBW bitstream (RGB+W NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
 
 
// Example for NeoPixel Shield.  In this application we'd like to use it
// as a 5x8 tall matrix, with the USB port positioned at the top of the
// Arduino.  When held that way, the first pixel is at the top right, and
// lines are arranged in columns, progressive order.  The shield uses
// 800 KHz (v2) pixels that expect GRB color data.
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(4, 75, PIN,
  NEO_MATRIX_TOP     + NEO_MATRIX_LEFT +
  NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG,
  NEO_GRB            + NEO_KHZ800);
 
const int b0 = 2;     // the number of the pushbutton pin
const int b1 = 3;
const int b2 = 4;
const int b3 = 5;
 
const uint16_t colors[] = {
  matrix.Color(255, 0, 0), matrix.Color(0, 255, 0), matrix.Color(0, 0, 255) };
 
void setup() {
  matrix.begin();
//  matrix.setTextWrap(false);
  matrix.setBrightness(40);
//  matrix.setTextColor(colors[0]);
 
  pinMode(b0, INPUT_PULLUP);
  pinMode(b1, INPUT_PULLUP);
  pinMode(b2, INPUT_PULLUP);
  pinMode(b2, INPUT_PULLUP);
  pinMode(b3, INPUT_PULLUP);
  int b0State = digitalRead(b0);
  int b1State = digitalRead(b1);
  int b2State = digitalRead(b2);
  int b3State = digitalRead(b3);

  int x=((b3State*2+b2State)*2+b1State)*2+b0State;
 
   Serial.begin(115200);
  
  // initialize i2c as slave
  Wire.begin(SLAVE_ADDRESS+x);
  Wire.setClock(400000); //400Khz i2c clock
 
  // define callbacks for i2c communication
  Wire.onReceive(receiveEvent);
  Wire.onRequest(requestEvent);
}
 
int x    = matrix.width();
int pass = 0;
 
void loop() {
  delay(10);
}
 
char cmd[32];
 
// call back for receive data
void receiveEvent(int byteCount){
 
// command:
//   clear... 0x00
//   show ... 0x01
//   set1 ix,iy,r,g,b
//         ... 0x02  *,*,  *,*,*
//   setn ix,iy,n, r0,g0,b0, ..r(n-1),g(n-1),b(n-1)   n<=8
//         ... 0x03 *,*, *, *,*,*, ..., *,*,*
  int i=0;
  while(Wire.available()) {
    cmd[i] = Wire.read();
    i++;
  }
  int n=i;
  /*
  for(i=0;i<n;i++){
    Serial.print(" "); Serial.print(cmd[i],HEX);
  }
  Serial.println(" ");
  */
  if(cmd[0]==0x00){
    matrix.fillScreen(0);
  } 
  else
  if(cmd[0]==0x01){
    matrix.show();
    delay(5);
  }
  else
  if(cmd[0]==0x02){ //set1
  //   set1 ix,iy,r,g,b
  //         ... 0x02  *,*,  *,*,*
     int ix=cmd[1];
     int iy=cmd[2];
     int r=cmd[3];
     int g=cmd[4];
     int b=cmd[5];
     int16_t c=matrix.Color(r,g,b);
     matrix.drawPixel(iy,ix,c);
  }
  else
  if(cmd[0]==0x03){
     int ix=cmd[1];
     int iy=cmd[2];
     int n=cmd[3];
     int rn[n];
     int gn[n];
     int bn[n];
     for(int i=0;i<n;i++){
        rn[i]=cmd[i*3+4];
        gn[i]=cmd[i*3+5];
        bn[i]=cmd[i*3+6];
     }
     for(int i=0;i<n;i++){
        int iyp=i%4;
        int ixp=i/4;
        int16_t c=matrix.Color(rn[i],gn[i],bn[i]);
        matrix.drawPixel(iy+iyp,ix+ixp,c);
     }
  }
}
 
 
void requestEvent(){
  Wire.write(status);
}
}}

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS