/////////////////////////////////////
// примеры для ws2812b-рисовалка с отключением режима сканирования и несколькими цветами
//Arduino UNO

#include "Adafruit_NeoPixel.h"

#define line_ 256 //число пикселей в ленте
uint8_t dataPin = 6;// вывод для подключения
Adafruit_NeoPixel strip = Adafruit_NeoPixel(line_,dataPin , NEO_GRB + NEO_KHZ800);// Создаем переменную strip для управления нашей лентой.
byte R=50;//
byte G=50;//
byte B=50;//
byte kartinka[line_];//массив хранения нарисованного 3 цветами
bool Fl=true;//
long Y=0;//
int in=0;//
int N=0;//
int N1=0;//
int N2=0;//

///RGB
void setup() {
 Serial.begin(9600); 
 strip.begin();
for ( int i = 0; i < line_; i++) {//закрашиваем матрицу цветом фона рисунка
strip.setPixelColor(i, 0, 0, 2);  
}
 }
void loop() {
//
N1=N-32;N2=N+32;
if(N1<0){N1=0;N2=63;}if(N2>255){N2=255;N1=255-64;}//

for (in = N1; in < N2; in++) {
if(Fl){strip.setPixelColor(in, R, G, B);}// включаем белым сканирующий пиксель
else{strip.setPixelColor(0, R, G, B);}
strip.show();
delay(5);
if(Fl){pixel(in);}// включаем сканирующий пиксель на исходный цвет
else{pixel(0);}  
if(analogRead(A0)<100){if(Fl){kartinka[in]=kartinka[in]+1;if(kartinka[in]>3){kartinka[in]=0;}pixel(in);N=in;}Y=millis();if(Fl==false){Fl=true;}}//если датчик приложен к пикселю меняем данные его цвета на противоположные и проверяем не сработал ли дежурный пиксель
}
//
if(millis()-Y>10000){Fl=false;}//сброс сканирования белым пикселем, перевод в  режим ожидания первого пикселя
//
}
//////////////////////////////////////////////
void pixel(int st){//вносим данные изменённого пикселя для отрисовки
  if(kartinka[st]==1){strip.setPixelColor(st, 7, 1, 0);}
  if(kartinka[st]==0){strip.setPixelColor(st, 0, 0, 2);}
  if(kartinka[st]==2){strip.setPixelColor(st, 2, 2, 0);}
  if(kartinka[st]==3){strip.setPixelColor(st, 0, 4, 1);}  
}
//////////////////////////////////////////////



