Проблема с EEprom

artemka-yaz
Offline
Зарегистрирован: 31.08.2016

В планах чтение команды c номером из компорта или смс и добавление номера в EEPROM, Это не весь скетч а кусок который должен за это отвечать, на данный момент на реагирует на команды из ком порта, чтение смс проверить нет возможности, уперся в стену! Подтолкните в правильном направлении...

#include <SoftwareSerial.h>
#include <EEPROM.h>
boolean Firststart;
struct Phone {
  String number;
  boolean al;
  boolean ed;
};
    Phone Allow[3]; // Тел номер.
    uint8_t eeAddress;
    String val = "";
    int value;
   String AllowPhone[3];// = {"79090543794", "79635431264"}; //Номера которым разрешено управлять охраной. На первый номер будут отправляться смс монитора порта (для отладки)
//uint8_t CountPhone; //= sizeof(AllowPhone) / sizeof(AllowPhone[0]);
 
   String AlarmPhone[3];// = {"79090543794", "79635431264"}; //Номера для отправки смс при срабатывании датчиков и о снятии или установки на охрану. На первый номер будет осуществляться вызов если AlarmRing = 1;
//uint8_t CountAlarmPhone;// = sizeof(AlarmPhone) / sizeof(AlarmPhone[0]);
 uint8_t CountPhone = sizeof(AllowPhone) / sizeof(AllowPhone[0]);
 uint8_t CountAlarmPhone = sizeof(AlarmPhone) / sizeof(AlarmPhone[0]);
String BalanceNumber;// = "#102#"; //Команда запроса баланса. #100# - ответ латинскими буквами, *100# - ответ русскими буквами. Работает только с латинскими буквами. В данном случае команда запроса баланса Beeline(Россия).
uint8_t BalanceStringLen = 22; //Число символов от начала строки которые нужно переслать в смс сообщении при получении USSD ответа о балансе. Убираем спам от оператора при запросе баланса, особо критично для модема M590, обрезаем всё лишнее.
    
    
void setup() {
   Serial.begin(9600);


  eepromconfig();

}

void loop() {
  if ((val.indexOf("addphone:") > -1)) {

   addphone(val.substring(25, 26).toInt(), val.substring(9, 20), val.substring(21, 22), val.substring(23, 24));
  }
    /*if ((val.indexOf("editphone:") > -1)) {
  
  editphone(val.substring(23).toInt(),val.substring(10,21));
    }
    if ((val.indexOf("delphone:") > -1)) {
  
  
   }*/

}
void eepromconfig() {
  pinMode(13, OUTPUT);
  if (EEPROM.read(0) != true) {
    for (int i = 0 ; i < 256 ; i++) {
      EEPROM.update(i, 255);
      delay(10);
    }
   
    for (int i = 0; i < 4; i++) {
      eeAddress = 30 + sizeof(Phone) * i;
      Allow[i].number = "***********";
      Allow[i].al = false;
      Allow[i].ed = false;
      EEPROM.put(eeAddress, Allow[i]);
    }
    eeAddress = 30 + sizeof(Phone) * 5;
                BalanceNumber = "#102#";
    EEPROM.update(eeAddress, BalanceNumber[0]);
    EEPROM.update(eeAddress+1, BalanceNumber[1]);
    EEPROM.update(eeAddress+2, BalanceNumber[2]);
    EEPROM.update(eeAddress+3, BalanceNumber[3]);
    EEPROM.update(eeAddress+4, BalanceNumber[4]);
    digitalWrite(13, HIGH);
  }
  if (EEPROM.read(0) == 1) {
    Firststart = EEPROM.read(20);
    int k = 0;
    int l = 0;
    for (int i = 0; i < 4; i++) {
      eeAddress = 30 + sizeof(Phone) * i;
      EEPROM.get(eeAddress, Allow[i]);
      if (Allow[i].al) {
        AlarmPhone[k] = Allow[i].number;
        k++;
      }
      if (Allow[i].ed) {
        AllowPhone[l] = Allow[i].number;
        l++;
      }
    
    eeAddress = 30 + sizeof(Phone) * 5;
    BalanceNumber = EEPROM.read(eeAddress);
    
  }
}
}
 void addphone(int index, String num, boolean a, boolean e) { // запись в ячейку.
  index--;
  Serial.println("addnumber:[" + String(index) + "] # " + num);
  
  if (index -1 and index<4) {
  Allow[index].number = num;
  Allow[index].al = a;
  Allow[index].ed = e;
  eeAddress = 30 + sizeof(Allow[index]) * index;
  EEPROM.put(eeAddress, Allow[index]);
  return 1;
  }
  return 0;
}

 

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

А Вы не могли бы прокомментировать Вашу программу? Напишите что и где делается, а там глядишь и помощь никакая не понадобится. ну, и нам понятнее будет.

artemka-yaz
Offline
Зарегистрирован: 31.08.2016

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

artemka-yaz
Offline
Зарегистрирован: 31.08.2016

Я так понимаю вся проблема тут:

 if ((val.indexOf("addphone:") > -1)) {

   addphone(val.substring(25, 26).toInt(), val.substring(9, 20), val.substring(21, 22), val.substring(23, 24));
  }
  

Чтение из порта и преобразование, как все это слепить до кучи не соображу уже...(((

artemka-yaz
Offline
Зарегистрирован: 31.08.2016

По хорошему нужно считать номер после addphone: сохранить в епром и считать оттуда для вывода обратно в порт...

artemka-yaz
Offline
Зарегистрирован: 31.08.2016

Не смогли бы вы подсказать как срасть вот тут:

 if ((val.indexOf("addphone:") > -1)) {  //чтение номера после addphone:

   addphone(val.substring(25, 26).toInt(), val.substring(9, 20), val.substring(21, 22), val.substring(23, 24));
  }

В данном месте должно происходить считывание номера из компорта и его дальнейшее сохранение...

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

Я вообще не увидил где программа читает COM порт.

насколько я понимаю должно быть что то типа:

	if (Serial.available() > 0) {  //если есть доступные данные
		// считываем байт
		incomingByte = Serial.read();

		// выводим то, что получили
		Serial.print("I received: ");
		Serial.println(incomingByte, DEC);
	}

Так же не совсем понятно зачем включена #include <SoftwareSerial.h>? В принципе она нигде не используется.

Я думаю какойто не совсем полноценный кусок кода вы привели.

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

artemka-yaz пишет:

Спрашивайта, буду отвечать... 

А мне-то это зачем? Это у Вас проблема, а не у меня.  Я могу посмотреть Ваш код и, может быть, помочь, но тратить целый день на то, чтобы из Вас что-то вытягивать ...

Я Вас спросил - прокомментируйте код. Если Вам в лом и Вам это не нужно, то мне тем более.

artemka-yaz
Offline
Зарегистрирован: 31.08.2016

Благодарю за подсказку, нашел решение. пропустил самое главное. Не сможете ли подсказать как правильно организовать запись нескольких номеров в епром? сосчитыванием уже разобрался...