#include <LiquidCrystal.h>
#define NUM_LINES 6
#define PIN_LED1 A0
#define PIN_LED2 A1
#define PIN_LED3 A2
#define PIN_LED4 A3
#define PIN_LED5 A4
#define PIN_LED6 A5
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
byte prog_number = 1;
const byte prog01[][NUM_LINES] = {{255, 0, 0, 0, 0, 0},
{0, 255, 0, 0, 0, 0},
{0, 0, 255, 0, 0, 0},
{0, 0, 0, 255, 0, 0},
{0, 0, 0, 0, 255, 0},
{0, 0, 0, 0, 0, 255},
{0, 0, 0, 0, 155, 0},
{0, 0, 0, 155, 0, 0},
{0, 0, 155, 0, 0, 0},
{0, 155, 0, 0, 0, 0}};
const byte prog02[][NUM_LINES] = {{254, 0, 0, 0, 0, 255},
{0, 200, 0, 0, 200, 0},
{0, 0, 255, 255, 0, 0},
{0, 200, 0, 0, 200, 0}};
const byte prog03[][NUM_LINES] = {{253, 150, 150, 150, 150, 150}};
const byte prog04[][NUM_LINES] = {{0, 255, 255, 255, 255, 255},
{255, 0, 255, 255, 255, 255},
{255, 255, 0, 255, 255, 255},
{255, 255, 255, 0, 255, 255},
{255, 255, 255, 255, 0, 255},
{255, 255, 255, 255, 255, 0},
{255, 255, 255, 255, 0, 255},
{255, 255, 255, 0, 255, 255},
{255, 255, 0, 255, 255, 255},
{255, 0, 255, 255, 255, 255}};
// {0, 0, 0, 0, 0, 0}
// {255, 255, 255, 255, 255, 255},
// const byte XXXX[][NUM_LINES] = {{0, 0, 0, 0, 0, 0},
// {0, 0, 0, 0, 0, 0},
// {0, 0, 0, 0, 0, 0},
// {0, 0, 0, 0, 0, 0},
// {0, 0, 0, 0, 0, 0},
// {0, 0, 0, 0, 0, 0},
// {0, 0, 0, 0, 0, 0},
// {0, 0, 0, 0, 0, 0},
// {0, 0, 0, 0, 0, 0},
// {0, 0, 0, 0, 0, 0},
// {0, 0, 0, 0, 0, 0},
// {0, 0, 0, 0, 0, 0}};
// const byte* all_progs[] = {prog01[NUM_LINES], prog02[NUM_LINES], prog03[NUM_LINES], prog04[NUM_LINES], prog05[NUM_LINES], prog06[NUM_LINES]};
// const byte* all_progs[] = {prog01[NUM_LINES], prog02[NUM_LINES], prog03[NUM_LINES], prog04[NUM_LINES]};
const byte* all_progs[] = {(int)prog01, (int)prog02, (int)prog03, (int)prog04};
// const int* size_progs[] = {60, 24, };
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
// lcd.print();
pinMode(PIN_LED1, OUTPUT);
pinMode(PIN_LED2, OUTPUT);
pinMode(PIN_LED3, OUTPUT);
pinMode(PIN_LED4, OUTPUT);
pinMode(PIN_LED5, OUTPUT);
pinMode(PIN_LED6, OUTPUT);
// analogWrite(PIN_LED1, 128); //// analogWrite(pin, duty)
Serial.print("sizeof1="); Serial.println(sizeof(all_progs));
Serial.print("sizeof2="); Serial.println(sizeof(prog02));
// Serial.print("sizeof3="); Serial.println(prog02);
// Serial.print("sizeof4="); Serial.println(sizeof(*prog02));
// Serial.println(sizeof(prog01)/sizeof(prog01[0])); узнать количество строк в 2-мерном массиве
}
void loop() {
static bool w;
if (w) return;
// example(2, all_progs[0]);
cycle(10, (uint32_t)all_progs[0]);
// cycle(4, (int)prog02); //это работает
// w = true; //чтобы цикл отработал только 1 раз
}
void cycle(uint8_t size_arr, const byte *arr) {
for(int j = 0; j < size_arr; j++) {
Serial.print("j="); Serial.println(j);
LEDS_ON(arr + j*6); //так работает
// LEDS_ON(arr[j]); //так не работает
Serial.print("arr!!="); Serial.println(*(arr + j*6));
// Serial.print("arr!!!="); Serial.println(arr[j]); //так не работает
delay(80);
LEDS_OFF();
delay(80);
for (byte i = 0; i < 6; i++) {
Serial.print(*( arr + j*6 + i)); Serial.print(" "); //так работает
// Serial.print("arr[]="); Serial.println(arr[j][i]); //так не работает
}
Serial.println();
} // for j
Serial.println("===");
}
// void cycle(uint8_t size_arr, const byte *arr) { ////этот вариант работает, вызов: (int)prog02
// for(byte j = 0; j < size_arr; j++) {
// for (byte i = 0; i < 6; i++) {
// byte * p = arr + j*6;
// byte * q = p + i;
// Serial.print("q="); Serial.println(*q);
// }
// } // for j
// }
// void cycle(uint8_t size_arr, const byte* arr) { //этот вариант работает, вызов: (int)prog02
// for(byte j = 0; j < size_arr; j++) {
// Serial.print("j="); Serial.println(j);
// for (byte i = 0; i < 6; i++) {
// Serial.print("arr[]="); Serial.println(*( arr + j*6 + i));
// } // for i
// } // for j
// Serial.println();
// }
// void cycle(uint8_t size_arr, const byte* arr[6]) { //тайкой вариант не работает, выдает
// неправильные данные
//...
// Serial.print("q[]="); Serial.println(arr[j][i]);
// void cycle(uint8_t size_arr, const byte arr[][6]) { //этот вариант работает, вызов: (int)prog02
// for(byte j = 0; j < size_arr; j++) {
// // Serial.println(arr[j]);
// Serial.print("j="); Serial.println(j);
// for (byte i = 0; i < 6; i++) {
// Serial.print("q[]="); Serial.println(arr[j][i]);
// }
// } // for j
// Serial.println();
// }
void example(uint8_t size_arr, const byte * arr) {
Serial.println(sizeof(arr));
Serial.println(sizeof(arr[0]));
}
void LEDS_ON(byte* arr) {
analogWrite(PIN_LED1, arr[0]);
analogWrite(PIN_LED2, arr[1]);
analogWrite(PIN_LED3, arr[2]);
analogWrite(PIN_LED4, arr[3]);
analogWrite(PIN_LED5, arr[4]);
analogWrite(PIN_LED6, arr[5]);
}
void LEDS_OFF() {
analogWrite(PIN_LED1, 0);
analogWrite(PIN_LED2, 0);
analogWrite(PIN_LED3, 0);
analogWrite(PIN_LED4, 0);
analogWrite(PIN_LED5, 0);
analogWrite(PIN_LED6, 0);
}