Массив с исходными данными в отдельный с загрузкой "построчно"

Тема в разделе "Arduino & Shields", создана пользователем Максим B, 20 июн 2015.

  1. Максим B

    Максим B Гуру

    Создал отделньо тему, т.к. не нашел именно в таком контексте как в топике. Собственно имеем такой массив данных и это не предел:

    Код (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 байт ??? Это массив - эффекты для куба. В будущем хочу сделать что-то типа генератора эффектов
     
  2. geher

    geher Гуру

    На (micro)SD карту его.

    Еще можно в Progmem загнать, если не хочется использовать внешних носителей, но тогда массив все равно будет частью скетча.
    В любом случае для ОЗУ (а обычные переменные, включая массивы, попадают в ОЗУ) такие массивы великоваты будут.
     
    Максим B нравится это.
  3. Максим B

    Максим B Гуру

    Я согласен что великоваты, попробую в progmem загнать. А если не ds карта, а временно отдельный файл использовать, тогда как сделать?
     
  4. Megakoteyka

    Megakoteyka Оракул Модератор

    Можете написать программу на ПК, которая будет загонять файл с ПК в ардуино через последовательный порт.
     
    Limoney нравится это.
  5. Максим B

    Максим B Гуру

    Получилось с progmem. Вопрос: как узнать длину массива в progmem ??
     
  6. Megakoteyka

    Megakoteyka Оракул Модератор

    Никак. Храните длину массива в отдельной переменной.
     
  7. Максим B

    Максим B Гуру

    А если массив динамический и данные в нем растут???
     
  8. Максим B

    Максим B Гуру

    Помогите прикрутить управление по 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);        
       
         }
    }
     
     
  9. Unixon

    Unixon Оракул Модератор

    Вы массив в progmem наращивать собрались?
     
  10. Максим B

    Максим B Гуру

    Я уже сделал в progmem - все получилось, даже не ожидал, что так легко ))) . Хочу расти дальше и решил сделать управление через com порт с ПК, т.к. каждый раз новый скетч грузить не комильфо )
     
  11. geher

    geher Гуру

    Интересно, есть ли возможность писать в progmem из кода загруженной в МК программы, не модифицируя bootloader?
    Читал, что во флэш, в котором и размещен progmem, можно писать только из области, в которой находится bootloader.
     
  12. Unixon

    Unixon Оракул Модератор

    Возможность есть, но это неправильное использование микроконтроллера. Память программ (flash) не предназначена для работы в качестве расширения оперативной памяти.

    Некоторые микроконтроллеры имеют возможность подключения внешней оперативной памяти, размер которой сопоставим с размером встроенной flash памяти. Вам стоит лучше этим поинтересоваться.
     
  13. geher

    geher Гуру

    Естественно, речь не идет о превращении progmem в ОЗУ.
    Такая возможность полезна для оперативного перепрограммирования "на лету", когда обновление прошивки или ее части приходит по сети или через радиосредства, работающие не через UART (тот же NRF). Да и через UART затруднительно, нужно дополнительный огород городить по организации reset в нужное время для прошивки.
     
  14. Limoney

    Limoney Гик

    Самый простой способ - записать массив данных на SD карту. Или загонять через последовательный порт. Далее считывать с этого массива по 64 байта в ОЗУ и вывести комбинацию в Куб.
     
  15. Unixon

    Unixon Оракул Модератор

    При наличии загрузчика (либо любой другой программы, которая выполняет функции загрузчика в основном коде) ничего сбрасывать не нужно.