Проблема с 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; }
А Вы не могли бы прокомментировать Вашу программу? Напишите что и где делается, а там глядишь и помощь никакая не понадобится. ну, и нам понятнее будет.
Спрашивайта, буду отвечать... Еще раз повторяю что это кусок который не работает весь скетчь заливать не стал...
Я так понимаю вся проблема тут:
Чтение из порта и преобразование, как все это слепить до кучи не соображу уже...(((
По хорошему нужно считать номер после
addphone:
сохранить в епром и считать оттуда для вывода обратно в порт...
Не смогли бы вы подсказать как срасть вот тут:
В данном месте должно происходить считывание номера из компорта и его дальнейшее сохранение...
Я вообще не увидил где программа читает COM порт.
насколько я понимаю должно быть что то типа:
Так же не совсем понятно зачем включена #include <SoftwareSerial.h>? В принципе она нигде не используется.
Я думаю какойто не совсем полноценный кусок кода вы привели.
Спрашивайта, буду отвечать...
А мне-то это зачем? Это у Вас проблема, а не у меня. Я могу посмотреть Ваш код и, может быть, помочь, но тратить целый день на то, чтобы из Вас что-то вытягивать ...
Я Вас спросил - прокомментируйте код. Если Вам в лом и Вам это не нужно, то мне тем более.
Благодарю за подсказку, нашел решение. пропустил самое главное. Не сможете ли подсказать как правильно организовать запись нескольких номеров в епром? сосчитыванием уже разобрался...