TeleportDresser

  • このページのAdafruit_NeoPixel?, このページのライブラリ, Adafruit_NeoMatrix?, Adafruit_GFX, をダウンロードして、解凍して、re-name して、事前に arduino の libraries に入れておくことが必要になります。
٤Ƴ٤Ĥ
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
-
|
!
 
 
 
 
 
 
 
 
 
 
 
 
 
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!
 
-
|
|
|
|
!
 
 
 
 
 
 
 
-
!
 
-
|
-
!
-
!
|
|
|
|
|
|
|
|
|
|
|
|
|
-
!
|
|
-
!
|
!
 
 
 
 
-
|
!
 
 
 
-
-
|
-
|
|
|
|
|
|
!
-
|
|
!
|
-
|
|
|
|
!
-
|
!
|
-
|
|
!
|
-
-
|
!
|
|
|
|
|
|
!
|
-
|
|
|
|
|
|
-
|
|
|
!
-
|
|
|
|
!
!
!
 
 
-
|
!
// 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 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(4, OUTPUT);
  pinMode(5, OUTPUT);
  digitalWrite(4, LOW); // set the LED off
  digitalWrite(5, LOW); // set the LED off
 
  pinMode(b0, INPUT_PULLUP);
  pinMode(b1, INPUT_PULLUP);
  int b0State = digitalRead(b0);
  int b1State = digitalRead(b1);
  int x=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);
}

Counter: 338, today: 1, yesterday: 0

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-09-26 (土) 08:42:40 (1302d)