Все пропало Шеф !

Arduino Uno
Offline
Зарегистрирован: 02.10.2017

Прошу прощения, если баян, но на форуме ответа не нашел.

Есть Arduino Uno, есть дисплей I2C 1602.

Все правильно подключено, все работало. Все Hello Worldы и собственные тексты отображались.

Решил залить скетч бегущей строки, погуглил и наткнулся на это:

#include <LiquidCrystalRus.h>
LiquidCrystalRus lcd(7,6, 5, 4, 3, 2);
 
 const char *strings[] = {/*"Arduino can sense the environment by receiving input from a variety of sensors and can affect its surroundings by controlling lights, motors, and other actuators.",
                   "Arduino is an open-source electronics prototyping platform based on flexible, easy-to-use hardware and software.",
                   "Если заменить слово 'проблема' на слово 'приключение', то жить становится гораздо интереснее.",
                   "Свобода не там, где нет стен, а там, где их не чувствуешь.",
                   "Есть такие люди, к которым просто хочется подойти и поинтересоваться, сложно ли без мозгов жить./Фаина Георгиевна Раневская",
                   "Лишь возможность осуществить мечту, делает нашу жизнь достойной продолжения./Пауло Коэльо",
                   "Кто в верности не клялся никогда, тот никогда ее и не нарушит. (Платон)",
                   "Это всегда было тайной для меня: как люди могут уважать себя, унижая таких же, как они сами. (Махатма Ганди)",
                   "Человек смотрит в будущее своим прошлым. ( Перл Бак )",
                   "Каждый человек, подобно луне, имеет свою неосвещенную сторону, которую он никому не показывает. (М. Твен)",
                   "Наш мир был неплохим местом до тех пор, пока мы не захотели сделать его лучше. (Джорж Ромеро)"
                   
};*/
                   "Тысячи путей уводят от цели, и лишь один - единственный ведет к ней. (Монтень Мишель Эйкем де)", 
                   "Трусость - мать жестокости. (Монтень)",
                   "Сильное воображение порождает событие. (Монтень)",
                   "Самая великая вещь на свете - уметь принадлежать себе. (Монтень)",
                   "Люди ничему не верят так твердо, как тому, о чем они меньше всего знают. (Монтень)",
                   "Часто самый верный способ ввести человека в заблуждение - сказать ему чистую правду. (М.Твен)",
                   "Женись, несмотря ни на что. Если попадется хорошая жена - станешь исключением, если плохая - философом. (Сократ)",
                   "Жизнь подобна карточной игре, в которую ты играешь, не зная правил. (П.Л.Капица)",
                   "У вас не будет второго шанса произвести первое впечатление. (П. Куэльо)",
                   "Человеку свойственно рассуждать мудро, а поступать глупо. (Анатоль Франс)",
                   "Мудрый человек требует всего только от себя, ничтожный же человек - всего от других.",
                   "Не гоняйся за счастьем: оно всегда находится в тебе самом. (Пифагор)",
                   "Чудеса случаются там, где в них верят, и чем больше верят, тем чаще они случаются (Д.Дидро)"
                                    
                    }; 
                   
 
char string_lcd[] = "                ";
byte num_str = 13; //кол-во прокручевыемых строк
 
void setup() {
  
  lcd.begin(16, 2);
   
}
 
void loop() {
 
 
  for (byte k = 0 ; k < num_str ; k++) { //Перебор строк.
 
  word len_str  = 0;
  
    while (*strings[k])  {  // Пока не конец строки ...    
              
           for (byte i=0 ; i < 15 ; i++) string_lcd[i] = string_lcd[i+1] ; // Производим побайтовый сдвиг влево,
           string_lcd[15] = *strings[k] ;                                  // отображаемой на LCD строки, и добавляем
           strings[k]++ ;                                                  // символ в последний байт.
           len_str++ ; // Счётчик длины строки.
             lcd.clear() ;
             lcd.setCursor(1,0);lcd.print("Бегущая строка") ;
            
            for (byte i=0 ; i < 16 ; i++) {  // Отображаем на LCD посимвольно.
              
                 lcd.setCursor(i,1);
                 lcd.print(string_lcd[i]);
                 lcd.setCursor(0,1);
                 lcd.print(' ');
             }
             
           blink( 13 , 190 ) ; // Задержка отображения строки и мигание светодиодом )) 
     
  }
  
  for (word n = 0 ; n < len_str ; n++) strings[k]-- ; //Возвращаем указатель на начало строки. 
                                                      //Иначе строки прокрутятся тольео один раз.
  for (byte n = 0 ; n < 16 ; n++) {                   
       for (byte i=0 ; i < 15 ; i++) string_lcd[i] = string_lcd[i+1] ; //Добиваем строку пробелами.
       string_lcd[15] = ' ' ;
       lcd.clear() ;
       lcd.setCursor(1,0);lcd.print("Бегущая строка") ;
           for (byte i=0 ; i < 16 ; i++) {
              
                lcd.setCursor(i,1);
                lcd.print(string_lcd[i]);
                lcd.setCursor(0,1);
                lcd.print(' ');
             }
             
           blink( 13 , 190 ) ;
           
  }
  
   delay(2000); 
  
 }
 
}
 
void blink( int Pin , int Delay )  {
   digitalWrite(Pin, HIGH);   // set the LED on
   delay(Delay/2);              // wait 
   digitalWrite(Pin, LOW);    // set the LED off
   delay(Delay/2);              // wait 
  
}
 
Сначала попытался залить этот скетч, а потом прочел это:
 
В заключение, хотелось бы добавить, что настоятельно не рекомендую добавлять дополнительные строки. Лучше заменить существующие. Т.к. количество ОЗУ в микроконтроллере весьма ограничено. Добавление дополнительных данных приводит к полному забиванию памяти, как следствие, неправильной работе программы и даже к блокированию работы бутлоадера! Реанимировать МК штатными методами становится весьма проблематично ! 

Для 168 меги количество данных нужно уменьшить, как минимум, в два раза !

Для возможности работы с большим объемом данных можно попробовать использовать библиотеку
 
В итоге Арудина перестала заливать даже пресловутый Hello World.
 
Как это лечится ?
Заранее благодарю !
 
Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Что? Блокированию работы бутлоадера? Что?

Не лечится. Только методом Раскольникова. Где вы это прочитали?

sadman41
Offline
Зарегистрирован: 19.10.2016

Так это же известная проблема - избыточный код выдавливает бутлоадер. И ладно, если немного, а то может и весь... у брата моего друга даже ноги микроконтроллера отвалились, а он сам чуть не умер.

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

sadman41 пишет:

Так это же известная проблема - избыточный код выдавливает бутлоадер. И ладно, если немного, а то может и весь... у брата моего друга даже ноги микроконтроллера отвалились, а он сам чуть не умер.

Если успеть собрать выдавленный код и запихнуть его обратно, работать будет. Главное, чтобы волшебный дым не вышел...

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

Каждая новая тема всё бессмысленнее...

Афтар, вот ответ на ваш вопрос. Англ знать необязательно, там в картинках.

UPD. Искренне надеюсь, что упоминать о необходимости иметь вторую Arduino, из которой вы сделаете программатор, не нужно. Если это было нужно, то мне вас жаль.

bwn
Offline
Зарегистрирован: 25.08.2014

Voodoo Doll пишет:

Каждая новая тема всё бессмысленнее...

ЕГЭ шагает по планете и его потреблядь молодым.(((

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Yarik.Yar пишет:

sadman41 пишет:

Так это же известная проблема - избыточный код выдавливает бутлоадер. И ладно, если немного, а то может и весь... у брата моего друга даже ноги микроконтроллера отвалились, а он сам чуть не умер.

Если успеть собрать выдавленный код и запихнуть его обратно, работать будет. Главное, чтобы волшебный дым не вышел...

спасет только синяя изолента !

(спасибо ребята, поржал от души!)

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

То мешает хранить эти говноцитаты на SD? Чтоб не выпускать кишки бутлодырю...

b707
Offline
Зарегистрирован: 26.05.2017

DetSimen пишет:

То мешает хранить эти говноцитаты на SD? Чтоб не выпускать кишки бутлодырю...

Точнее в PROGMEM