850 строк, две колонки, текстовые значения

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Не сильно проще. Работа с массивами PROGMEM на AVR в любом виде - это как китайская резьба по яичной скорлупе.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

DetSimen пишет:

а што на String?

Очепятка. НЕ String

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

sadman41 пишет:

Не сильно проще. Работа с массивами PROGMEM на AVR в любом виде - это как китайская резьба по яичной скорлупе.

word addr = &ArrayItem[N];   -  если сам массив тоже в прогмем, или без & если он в RAM

stroka = (__FlashStringHelper__ *)(pgm_read_word(addr))

и сё.  А этот хелпер можно уже и в экран слать, print() его понимает

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Семён, я же не клингонец - мне энтого не надо. 

Но, я думаю, ты согласишься, что формирование PROGMEM массивов + последующее жонглирование ими гораздо более трудоемкое занятие, нежели с char* [][] лупить в стрим и его наследников.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

дак, ТС-у тогда на Мегу нада переходить + 64К ОЗУ подключать.  На Меге - можно и String в массивы загонять

pridecom
Offline
Зарегистрирован: 07.07.2017

не надо никуда переходить, все работает, пока ....... пока  меня не появились новые пожелания )

#include "LCD_1602_RUS.h"

LCD_1602_RUS lcd(0x27, 16, 2);

#include <avr/pgmspace.h>
const char string_0[] PROGMEM = "comb - расчёсывать";
const char string_1[] PROGMEM = "stocking - снабжать, чулок";
const char string_2[] PROGMEM = "stomach - живот, смелость";
const char string_3[] PROGMEM = "store - магазин, запас";
const char string_4[] PROGMEM = "street - улица";
const char string_5[] PROGMEM = "sun - солнце";
const char string_6[] PROGMEM = "table - стол";
const char string_7[] PROGMEM = "tail - хвост, выслеживать";
const char string_8[] PROGMEM = "thread - нить, пронизывать";
const char string_9[] PROGMEM = "throat - горло";
const char string_10[] PROGMEM = "thumb - листать, большой палец  ";
const char string_11[] PROGMEM = "ticket - билет";
const char string_12[] PROGMEM = "toe - палец ноги";
const char string_13[] PROGMEM = "tongue - язык";
const char string_14[] PROGMEM = "tooth - зуб";
const char string_15[] PROGMEM = "town - город  ";
const char string_16[] PROGMEM = "train - поезд";
const char string_17[] PROGMEM = "tray - поднос";
const char string_18[] PROGMEM = "tree - дерево";
const char string_19[] PROGMEM = "cord - шнур, связывать";
const char string_20[] PROGMEM = "trousers - брюки";
const char string_21[] PROGMEM = "umbrella - зонт";
const char string_22[] PROGMEM = "wall - стена";
const char string_23[] PROGMEM = "watch - часы";
const char string_24[] PROGMEM = "wheel - колесо, вертеть ";
const char string_25[] PROGMEM = "whip - кнут, хлестать";
const char string_26[] PROGMEM = "whistle - свист, свистеть";
const char string_27[] PROGMEM = "window - окно ";
const char string_28[] PROGMEM = "wing - крыло";
const char string_29[] PROGMEM = "wire - провод";
const char string_30[] PROGMEM = "worm - червь";
const char string_31[] PROGMEM = "angle - угол, поворачивать";
const char string_32[] PROGMEM = "ant - муравей";
const char string_33[] PROGMEM = "apple - яблоко";  
const char string_34[] PROGMEM = "arch - арка, дуга, выгибать";
const char string_35[] PROGMEM = "arm - рука, вооружать";
const char string_36[] PROGMEM = "army - армия"; 
const char string_37[] PROGMEM = "bag - сумка";
const char string_38[] PROGMEM = "ball - мяч";
const char string_39[] PROGMEM = "bank - банк";
const char string_40[] PROGMEM = "basin - бассейн";
const char string_41[] PROGMEM = "basket - корзина";
const char string_42[] PROGMEM = "bath - ванна, купаться";
const char string_43[] PROGMEM = "bed - кровать";
const char string_44[] PROGMEM = "bee - пчела";
const char string_45[] PROGMEM = "bell - колокольчик";
const char string_46[] PROGMEM = "berry - ягода";
const char string_47[] PROGMEM = "bird - птица";
const char string_48[] PROGMEM = "blade - лезвие";
const char string_49[] PROGMEM = "board - доска";
const char string_50[] PROGMEM = "boat - лодка, судно";
const char string_51[] PROGMEM = "bone - кость";
const char string_52[] PROGMEM = "book - книга";
const char string_53[] PROGMEM = "boot - ботинок, загружать";
const char string_54[] PROGMEM = "bottle - бутылка";
const char string_55[] PROGMEM = "box - коробка";
const char string_56[] PROGMEM = "boy - мальчик";
const char string_57[] PROGMEM = "brain - мозг";
const char string_58[] PROGMEM = "brake - тормоз, тормозить";
const char string_59[] PROGMEM = "branch - ветвь, отделение";
const char string_60[] PROGMEM = "brick - кирпич";
const char string_61[] PROGMEM = "bridge - мост";
const char string_62[] PROGMEM = "brush - щётка, кисть";
const char string_63[] PROGMEM = "bucket - ведро, черпать";
const char string_64[] PROGMEM = "bulb - луковица, выпирать";
const char string_65[] PROGMEM = "button - кнопка, застёгивать";
const char string_66[] PROGMEM = "baby - ребёнок, младенец";
const char string_67[] PROGMEM = "cake - пирог";
const char string_68[] PROGMEM = "camera - камера";
const char string_69[] PROGMEM = "card - карта, чесать";
const char string_70[] PROGMEM = "cart - везти";
const char string_71[] PROGMEM = "carriage - вагон";
const char string_72[] PROGMEM = "cat - кот";
const char string_73[] PROGMEM = "chain - цепь, сеть";
const char string_74[] PROGMEM = "cheese - сыр";  
const char string_75[] PROGMEM = "chest - грудь, сундук";
const char string_76[] PROGMEM = "chin - подбородок";
const char string_77[] PROGMEM = "church - церковь";
const char string_78[] PROGMEM = "circle - круг";
const char string_79[] PROGMEM = "clock - часы";
const char string_80[] PROGMEM = "cloud - облако";
const char string_81[] PROGMEM = "coat - пальто, покрывать";
const char string_82[] PROGMEM = "collar - воротник, хватать";  



// Теперь создаем таблицу с отсылками к этим строкам:
const char* const string_table[] PROGMEM = {string_0,
  string_1,  string_2,  string_3,  string_4, string_5, string_6, string_7, string_8, string_9, string_10 ,
  string_11, string_12, string_13, string_14, string_15, string_16, string_17, string_18, string_19, string_20 ,
  string_21, string_22, string_23, string_24, string_25, string_26, string_27, string_28, string_29, string_30 ,
  string_31, string_32, string_33, string_34, string_35, string_36, string_37, string_38, string_39, string_40 ,
  string_41, string_42, string_43, string_44, string_45, string_46, string_47, string_48, string_49, string_50 ,
  string_51, string_52, string_53, string_54, string_55, string_56, string_57, string_58, string_59, string_60 ,
  string_61, string_62, string_63, string_64, string_65, string_66, string_67, string_68, string_69, string_70 ,
  string_71, string_72, string_73, string_74, string_75, string_76, string_77, string_78, string_79, string_80 
};


char buffer[30];    // массив был достаточно велик, чтобы вместить даже самую большую строку

//int sizeDictionary =  sizeof(dictionary) / sizeof(dictionary[0]) ;
int varints = 2 ; //сколько предлагать вариантов
int randstart ;
int sizeDic = 80;

void setup()
{
  lcd.init();                      // initialize the lcd
  lcd.backlight();

  lcd.setCursor(0, 0);
  lcd.print("Размер словаря:"); //верхняя строка
  lcd.setCursor(7, 1);
  lcd.print(sizeDic) ; // размер словаря  
  
  delay (1400);

  lcd.clear() ;
  lcd.noBacklight();
  delay (400);
  lcd.backlight();
  
  randomSeed(analogRead(0));
  
}

void loop()
{
    
    randstart = random (0,
    //sizeDic
    80) ; 
    lcd.clear() ;
    

    
//  
    lcd.setCursor(13, 1);
    lcd.print(randstart); //нижняя строка
//  
    lcd.setCursor(0, 0);
    strcpy_P(buffer, (char*)pgm_read_word(&(string_table[randstart]))); // необходимые функции и расшифровки, просто скопируйте
    lcd.print(buffer); //верхняя строка
    
    delay (1000);
  
  }

 

pridecom
Offline
Зарегистрирован: 07.07.2017

полученную строку разделяю этим кодом, но как теперь убрать лидирующие и последующие пробелы не нашел? посоветуйте а

    lcd.print(strtok (buffer,"-"));
    lcd.setCursor(0, 1);
    lcd.print(strtok (NULL,"-"));

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

удалить их в обьявлениях.  И память сыканомица. 

b707
Онлайн
Зарегистрирован: 26.05.2017

вижу, уже опоздал с комментами.

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

sadman41 DedSimen - нет ничего сложного в использовании PROGMEM. разве что набирать руками многа букв :) - но это легко решается заменами #define. Тот же самый "чего-то-там-хелпер" у меня в коде кодируется кодом из трех букв :)

А если надо - и код на Перле можно состряпать, авось больше десятка строк не понадобится

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

b707 пишет:

DedSimen - нет ничего сложного в использовании PROGMEM. разве что набирать руками многа букв :) - но это легко решается заменами #define. Тот же самый "чего-то-там-хелпер" у меня в коде кодируется кодом из трех букв :)

а я знаю. 

давно уже себе сделал 

using  PFlashString = __FlashStringHelper *;
 
У меня вся меню там валяеца.