Взаимодействие с GPRS Шилдом

Тема в разделе "Arduino & Shields", создана пользователем Vovka41, 15 фев 2014.

  1. geher

    geher Гуру

    Имеется ввиду почему 160 и 20?
    Наверное потому, что СМС по определению не может быть больше 160 байт. Более длинная разбивается аппаратами, которые это умеют, на несколько отдельных СМС, которые при приеме, опять же, если аппарат умеет, собираются в одну.
    Телефонный номер с учетом всех международных кодов не может быть больше 20 символов.
    Есть два варианта организации такой таблицы.
    1. Фиксированный набор номеров, который определяется еще при написании скетча и помещается в таблицу при ее инициализации.
    что-то вроде:
    Код (Text):
    @define MAX_NUMS 2
    char* nums[MAX_NUMS]={"322223", "223322"};
    2. Переменный набор номеров, который, например, можно вгрузить СМС-кой с номера, жестко прописанного в скетче.
    Код (Text):
    #define MAX_NUMS 10
    byte numsnumber=2;
    char* nums[MAX_NUMS]={"322223", "223322","","","","","","","",""};
    а дальше сравнивать строки функцией проверки.
    Код (Text):

    int comparestring(char* s)
    {
        for(int i=0;i<numsnumber;i++)
        {    
            j=0;
            while ((nums[i][j]==s[j]) && s[j] && nums[i][j]) j++;
            if ((nums[i][j]==0)&&(s[j])==0) return(1);
         }
        return(0);
    }
     
    Возможно, где-то накосячил, код не проверял, но принцип должен быть понятен.
    Вместо char*, естественно, можно использовать String, внеся соответствующие правки в инициализацию массива и сравнение строк.
    Примерно так:
    Код (Text):
    @define MAX_NUMS 2
    String nums[MAX_NUMS]={"322223", "223322"};
    ...

    int comparestring(String s)
    {
        for(int i=0;i<MAX_NUMS;i++)
        {      
            if (nums[i]==s) return(1);
         }
        return(0);
    }
     
    В этом случае не уверен в инициализации массива.

    И не следует увлекаться размером массива. Объем памяти, увы, не бесконечен. Причем сильно не бесконечен.
     
    Последнее редактирование: 15 фев 2014
  2. lerik2703

    lerik2703 Гик

    140 байт (отсюда и 70 знаков в русском алфавите только в кодировке UCS2 )160 знаков получается при переводе 7-битной строки в 8-битное представление
     
  3. lerik2703

    lerik2703 Гик

    можно в EEPROM запихнуть ну или использовать программную память (PROGMEM но со строками не так гладко :() заметно расширит объем памяти :)
     
  4. geher

    geher Гуру

    И много оно добавит? Там тоже памяти кот наплакал. Разве что SD карту использовать и подгружать части массива "окнами".
     
  5. lerik2703

    lerik2703 Гик

    если во флеш памяти контроллера думаю кб 15-20 останется свободными! :cool: sd-карта это замечательно конечно , только сколько же нужно тогда друзей... :)
     
  6. Vovka41

    Vovka41 Нерд

    Спасибо вам, ребята, буду пробовать!)