Проблема с EEprom
- Войдите на сайт для отправки комментариев
Вс, 14/05/2017 - 17:35
В планах чтение команды 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;
}
А Вы не могли бы прокомментировать Вашу программу? Напишите что и где делается, а там глядишь и помощь никакая не понадобится. ну, и нам понятнее будет.
Спрашивайта, буду отвечать... Еще раз повторяю что это кусок который не работает весь скетчь заливать не стал...
Я так понимаю вся проблема тут:
if ((val.indexOf("addphone:") > -1)) { addphone(val.substring(25, 26).toInt(), val.substring(9, 20), val.substring(21, 22), val.substring(23, 24)); }Чтение из порта и преобразование, как все это слепить до кучи не соображу уже...(((
По хорошему нужно считать номер после
addphone:сохранить в епром и считать оттуда для вывода обратно в порт...Не смогли бы вы подсказать как срасть вот тут:
if ((val.indexOf("addphone:") > -1)) { //чтение номера после addphone: addphone(val.substring(25, 26).toInt(), val.substring(9, 20), val.substring(21, 22), val.substring(23, 24)); }В данном месте должно происходить считывание номера из компорта и его дальнейшее сохранение...
Я вообще не увидил где программа читает COM порт.
насколько я понимаю должно быть что то типа:
if (Serial.available() > 0) { //если есть доступные данные // считываем байт incomingByte = Serial.read(); // выводим то, что получили Serial.print("I received: "); Serial.println(incomingByte, DEC); }Так же не совсем понятно зачем включена #include <SoftwareSerial.h>? В принципе она нигде не используется.
Я думаю какойто не совсем полноценный кусок кода вы привели.
Спрашивайта, буду отвечать...
А мне-то это зачем? Это у Вас проблема, а не у меня. Я могу посмотреть Ваш код и, может быть, помочь, но тратить целый день на то, чтобы из Вас что-то вытягивать ...
Я Вас спросил - прокомментируйте код. Если Вам в лом и Вам это не нужно, то мне тем более.
Благодарю за подсказку, нашел решение. пропустил самое главное. Не сможете ли подсказать как правильно организовать запись нескольких номеров в епром? сосчитыванием уже разобрался...