Создал отделньо тему, т.к. не нашел именно в таком контексте как в топике. Собственно имеем такой массив данных и это не предел: Код (Text): byte films[]={ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0xFF,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0xFF,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xFF,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0xFF,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xFF,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0xFF,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xFF,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0xFF,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0xFF,0xFF,0x0,0x0, 0x0,0x0,0x0,0x0,0xFF,0xFF,0x0,0x0,0x0,0x0,0x0,0x0,0xFF,0xFF,0x0,0x0, 0x0,0x0,0x0,0x0,0xFF,0xFF,0x0,0x0,0x0,0x0,0x0,0x0,0xFF,0xFF,0x0,0x0, 0x0,0x0,0x0,0x0,0xFF,0xFF,0x0,0x0,0x0,0x0,0x0,0x0,0xFF,0xFF,0x0,0x0, 0x0,0x0,0x0,0x0,0xFF,0xFF,0x0,0x0,0x0,0x0,0x0,0x0, 0xFF,0xFF,0xFF, 0x0,0x0,0x0,0x0,0x0,0xFF,0xFF,0xFF,0x0,0x0,0x0,0x0,0x0,0xFF,0xFF,0xFF, 0x0,0x0,0x0,0x0,0x0,0xFF,0xFF,0xFF,0x0,0x0,0x0,0x0,0x0,0xFF,0xFF,0xFF, 0x0,0x0,0x0,0x0,0x0,0xFF,0xFF,0xFF,0x0,0x0,0x0,0x0,0x0,0xFF,0xFF,0xFF, 0x0,0x0,0x0,0x0,0x0,0xFF,0xFF,0xFF,0x0,0x0,0x0,0x0,0x0, 0xFF,0xFF, 0xFF,0xFF,0x0,0x0,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0,0x0,0xFF,0xFF, 0xFF,0xFF,0x0,0x0,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0,0x0,0xFF,0xFF, 0xFF,0xFF,0x0,0x0,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0,0x0,0xFF,0xFF, 0xFF,0xFF,0x0,0x0,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0,0x0, 0xFF, 0xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0,0xFF, 0xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0,0xFF, 0xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0,0xFF, 0xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0x0, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0x0, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0x0, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0x0, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0x0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0x0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0x0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0x0, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF, 0x0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF, 0x0,0x0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0x0, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0x0, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0x0, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0x0, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0x0,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0xFF,0x0, 0x0,0x0,0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0xFF,0x0, 0x0,0x0,0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0xFF,0x0, 0x0,0x0,0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0xFF,0x0, 0x0,0x0,0xFF,0xFF,0xFF,0xFF,0xFF, 0x0,0x0,0x0,0x0,0xFF,0xFF,0xFF,0xFF, 0x0,0x0,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0,0x0,0xFF,0xFF,0xFF,0xFF, 0x0,0x0,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0,0x0,0xFF,0xFF,0xFF,0xFF, 0x0,0x0,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0,0x0,0xFF,0xFF,0xFF,0xFF, 0x0,0x0,0x0,0x0,0xFF,0xFF,0xFF,0xFF, 0x0,0x0,0x0,0x0,0x0,0xFF,0xFF, 0xFF,0x0,0x0,0x0,0x0,0x0,0xFF,0xFF,0xFF,0x0,0x0,0x0,0x0,0x0,0xFF,0xFF, 0xFF,0x0,0x0,0x0,0x0,0x0,0xFF,0xFF,0xFF,0x0,0x0,0x0,0x0,0x0,0xFF,0xFF, 0xFF,0x0,0x0,0x0,0x0,0x0,0xFF,0xFF,0xFF,0x0,0x0,0x0,0x0,0x0,0xFF,0xFF, 0xFF,0x0,0x0,0x0,0x0,0x0,0xFF,0xFF,0xFF, 0x0,0x0,0x0,0x0,0x0,0x0, 0xFF,0xFF,0x0,0x0,0x0,0x0,0x0,0x0,0xFF,0xFF,0x0,0x0,0x0,0x0,0x0,0x0, 0xFF,0xFF,0x0,0x0,0x0,0x0,0x0,0x0,0xFF,0xFF,0x0,0x0,0x0,0x0,0x0,0x0, 0xFF,0xFF,0x0,0x0,0x0,0x0,0x0,0x0,0xFF,0xFF,0x0,0x0,0x0,0x0,0x0,0x0, 0xFF,0xFF,0x0,0x0,0x0,0x0,0x0,0x0,0xFF,0xFF, 0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0xFF,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xFF,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0xFF,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xFF,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0xFF,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xFF,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0xFF,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xFF, 0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, }; Как вынести этот массив в отдельный файл и что бы arduino читала этот массив по 8 байт ??? Это массив - эффекты для куба. В будущем хочу сделать что-то типа генератора эффектов
На (micro)SD карту его. Еще можно в Progmem загнать, если не хочется использовать внешних носителей, но тогда массив все равно будет частью скетча. В любом случае для ОЗУ (а обычные переменные, включая массивы, попадают в ОЗУ) такие массивы великоваты будут.
Я согласен что великоваты, попробую в progmem загнать. А если не ds карта, а временно отдельный файл использовать, тогда как сделать?
Можете написать программу на ПК, которая будет загонять файл с ПК в ардуино через последовательный порт.
Помогите прикрутить управление по UART Вот код Код (Text): //Пин подключен к ST_CP входу 74HC595 int latchPin = 3; //Пин подключен к SH_CP входу 74HC595 int clockPin = 2; //Пин подключен к DS входу 74HC595 int dataPin = 4; const int cadr=50; const int speeds=100; const int slow=0; // минимально 0 const int etaj=7; byte inChar; int s; int myPins[] = {6, 7, 8, 9, 10, 11, 12, 13}; //массив пинов - выходы для строк byte MyMassive[64]; //массив диодов byte Massive[8]={1,2,4,8,16,32,64,128}; int i,j,x,y,z,f,ff,fff; byte a,aa,bb,b,ab,c,cc; void setup() { Serial.begin(9600); a,aa,b,bb=0; //устанавливаем режим OUTPUT pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); for (i = 0; i <=7; i++) { //столбы pinMode(myPins[i],OUTPUT); digitalWrite(latchPin, LOW); // передаем последовательно на dataPin } } void loop() { while (Serial.available() > 0){ inChar = Serial.read(); //delay(1); { for (f=0; f<cadr; f++){ for (x=0; x<=63; x++){ MyMassive[x]=inChar; // Serial.println(films[x]); } for (s=0; s<=slow; s++) { myMultiplyFunction(); } } }} } byte myMultiplyFunction(){ // устанавливаем синхронизацию "защелки" на LOW for(j=0; j<=etaj; j++) { //этаж for(z=0; z<=etaj; z++) { shiftOut(dataPin, clockPin, MSBFIRST, MyMassive[z+(j*8)]); // shiftOut(dataPin, clockPin, MSBFIRST, (z+(j*8))); // Serial.println (MyMassive[z+(j*8)]); //"защелкиваем" регистр, тем самым устанавливая значения на выходах } digitalWrite(latchPin, HIGH); // пауза перед следующей итерацией // delay(1); digitalWrite(latchPin, LOW); // передаем последовательно на dataPin digitalWrite(myPins[j], HIGH); delay(speeds); // wait for a second digitalWrite(myPins[j], LOW); // turn the LED off by making the voltage LOW // delay(1000); } }
Я уже сделал в progmem - все получилось, даже не ожидал, что так легко ))) . Хочу расти дальше и решил сделать управление через com порт с ПК, т.к. каждый раз новый скетч грузить не комильфо )
Интересно, есть ли возможность писать в progmem из кода загруженной в МК программы, не модифицируя bootloader? Читал, что во флэш, в котором и размещен progmem, можно писать только из области, в которой находится bootloader.
Возможность есть, но это неправильное использование микроконтроллера. Память программ (flash) не предназначена для работы в качестве расширения оперативной памяти. Некоторые микроконтроллеры имеют возможность подключения внешней оперативной памяти, размер которой сопоставим с размером встроенной flash памяти. Вам стоит лучше этим поинтересоваться.
Естественно, речь не идет о превращении progmem в ОЗУ. Такая возможность полезна для оперативного перепрограммирования "на лету", когда обновление прошивки или ее части приходит по сети или через радиосредства, работающие не через UART (тот же NRF). Да и через UART затруднительно, нужно дополнительный огород городить по организации reset в нужное время для прошивки.
Самый простой способ - записать массив данных на SD карту. Или загонять через последовательный порт. Далее считывать с этого массива по 64 байта в ОЗУ и вывести комбинацию в Куб.
При наличии загрузчика (либо любой другой программы, которая выполняет функции загрузчика в основном коде) ничего сбрасывать не нужно.