проблемма с EEPROM или я туплю....
- Войдите на сайт для отправки комментариев
Пнд, 16/10/2017 - 10:20
Здравствуйте, подскажите что не так?
#include <EEPROM.h>
String currStr = "";//Строка содержит текущую строку, полученую от сим модуля.
String nomber_Phone = "";//Строка содержит номер телефона на который отправляються GPS координаты, далее Разрешенный номер.
char data;//Содержит символ полученый от сим модуля.
void setup() {
// put your setup code here, to run once:
Serial.begin(57600);
}
void loop() {
while (Serial.available() > 0)
{
data = Serial.read();
// Serial.println(data);
if (data == '-')
{
if (nomber_Phone != 0)
{
nomber_Phone = "";
}
for (byte i = 0; i < 12; i++) //Чтение Разрешонного номера из EEPROM
{
data = EEPROM.read(i);
nomber_Phone += data;
}
Serial.println(nomber_Phone);
return;
}
}
if (data == '+')
{
for (byte i = 0; i < 12; i++)
{
EEPROM.write(i, data);
currStr += data;
data = Serial.read();
}
Serial.println("complete");
return;
}
}
имеем вот такой скетч, учусь записывать в EEPROM, так вот вроде запись проходит все хорошо но когда пытаюсь прочитать сдвигает символы... записываю номер +70123456789 пишет что записал complete
а когда отправляю "-" что бы прочитать из епрома, в ответ вот такое "+⸮7012345678"

если я правильно понял код,
строки цикла должны 34...44 должны быть внутри while т.е. вставить после 32 строки
в типе String кажеться персым байтом идет длина строки, вот она то наверное и записывается в eeprom и я вляется не печатным символом
переходите полностью на char
проблемма с EEPROM или я туплю....
Второе. Даже в двух местах.
1. В строке 40 Вы читаете всё подряд и потом пишете. Так вот, Ваш первый символ, это возврат каретки, оставшийся от команды "+". Вам надо там поставить проверку и то, что не является цифрой - игнорировать. Проще всего проверка делается так
if (isdigit(data)) { // Если в data сидит цифра2. В той же строке 40 Вы читаете не проверяя, а пришло ли что-нибудь. Рискуете начать читать, когда оно ещё не успело прийти. Тоже проверять надо.
разобрался) еепром надо было задержку поставить
#include <EEPROM.h> String currStr = "";//Строка содержит текущую строку, полученую от сим модуля. String nomber_Phone = "";//Строка содержит номер телефона на который отправляються GPS координаты, далее Разрешенный номер. char data;//Содержит символ полученый от сим модуля. void setup() { // put your setup code here, to run once: Serial.begin(57600); } void loop() { while (Serial.available() > 0) { data = Serial.read(); // Serial.println(data); if (data == '-') { if (nomber_Phone != 0) { nomber_Phone = ""; } for (byte i = 0; i < 12; i++) //Чтение Разрешонного номера из EEPROM { data = EEPROM.read(i); nomber_Phone += data; } Serial.println(nomber_Phone); return; } else if (data == '+') { for (byte i = 0; i < 12; i++) { EEPROM.write(i, data); delay(4); currStr += data; data = Serial.read(); } Serial.println("complete"); return; } } }разобрался) еепром надо было задержку поставить
Это не "разобрался", это вы продолжаете тупить. Задержка - костыль чистой воды. Чуть что поменяете - опять перестанет работать. Перечитайте. что написал Евгений, неужели это так сложно понять?
разобрался) еепром надо было задержку поставить
Это не "разобрался", это вы продолжаете тупить. Задержка - костыль чистой воды. Чуть что поменяете - опять перестанет работать. Перечитайте. что написал Евгений, неужели это так сложно понять?
прошу прощения, на момент когда писал, сообщений небыло...
проблемма с EEPROM или я туплю....
Второе. Даже в двух местах.
1. В строке 40 Вы читаете всё подряд и потом пишете. Так вот, Ваш первый символ, это возврат каретки, оставшийся от команды "+". Вам надо там поставить проверку и то, что не является цифрой - игнорировать. Проще всего проверка делается так
if (isdigit(data)) { // Если в data сидит цифра2. В той же строке 40 Вы читаете не проверяя, а пришло ли что-нибудь. Рискуете начать читать, когда оно ещё не успело прийти. Тоже проверять надо.
добавил- что то не выходит запись...
#include <EEPROM.h> String currStr = "";//Строка содержит текущую строку, полученую от сим модуля. String nomber_Phone = "";//Строка содержит номер телефона на который отправляються GPS координаты, далее Разрешенный номер. String val = ""; char data;//Содержит символ полученый от сим модуля. byte flag3=0; byte flag1=0; byte flag2=0; void setup() { // put your setup code here, to run once: Serial.begin(57600); } void loop() { while (Serial.available() > 0) { data = Serial.read(); delay(5); val += data; Serial.println(val); if (val=="write1") { flag1=1; } /* if (val=="write2") { flag2=1; } if (val=="write3") { flag3=1; }*/ if (val == "read1") { if (nomber_Phone != 0) { nomber_Phone = ""; } for (byte i = 0; i < 12; i++) //Чтение Разрешонного номера из EEPROM { data = EEPROM.read(i); nomber_Phone += data; } Serial.println(nomber_Phone); nomber_Phone = ""; return; } /*else if (val == "read2") { if (nomber_Phone != 0) { nomber_Phone = ""; } for (byte i = 13; i < 25; i++) //Чтение Разрешонного номера из EEPROM { data = EEPROM.read(i); nomber_Phone += data; } Serial.println(nomber_Phone); nomber_Phone = ""; return; } else if (val == "read3") { if (nomber_Phone != 0) { nomber_Phone = ""; } for (byte i = 26; i < 38; i++) //Чтение Разрешонного номера из EEPROM { data = EEPROM.read(i); nomber_Phone += data; } Serial.println(nomber_Phone); nomber_Phone = ""; return; }*/ else if ((flag1==1)&&(data == '+')) { Serial.println("OK"); for (byte i = 0; i < 12; i++) { // Serial.println(data); EEPROM.write(i, data); currStr += data; if (isdigit(data)) { data = Serial.read(); } } Serial.println("complete"); flag1=0; return; } /* else if ((flag2==1)&&(data == '+')) { Serial.println("OK"); for (byte i = 13; i < 25; i++) { // Serial.println(data); EEPROM.write(i, data); delay(4); currStr += data; data = Serial.read(); } Serial.println("complete"); flag2=0; return; } else if ((flag3==1)&&(data == '+')) { Serial.println("OK"); for (byte i = 26; i < 38; i++) { // Serial.println(data); EEPROM.write(i, data); delay(4); currStr += data; data = Serial.read(); } Serial.println("complete"); flag2=0; return; }*/ } val=""; data=""; }пока игрался, изменил код...
щас ввожу так: write1 +70123456789
если в коде оставляю все как есть
else if ((flag1==1)&&(data == '+')) { Serial.println("OK"); for (byte i = 0; i < 12; i++) { // Serial.println(data); EEPROM.write(i, data); currStr += data; data = Serial.read(); } Serial.println("complete"); flag1=0; return; }то все работает прекрассно
#include <EEPROM.h> String currStr = "";//Строка содержит текущую строку, полученую от сим модуля. String nomber_Phone = "";//Строка содержит номер телефона на который отправляються GPS координаты, далее Разрешенный номер. String val = ""; char data;//Содержит символ полученый от сим модуля. byte flag1=0; void setup() { // put your setup code here, to run once: Serial.begin(57600); } void loop() { while (Serial.available() > 0) { data = Serial.read(); delay(5); val += data; Serial.println(val); if (val.indexOf ("write1")> -1) { flag1=1; } if (val.indexOf ("read1")> -1) { if (nomber_Phone != 0) { nomber_Phone = ""; } for (byte i = 0; i < 12; i++) //Чтение Разрешонного номера из EEPROM { data = EEPROM.read(i); nomber_Phone += data; } Serial.println(nomber_Phone); nomber_Phone = ""; return; } else if ((flag1==1)&&(data == '+')) { Serial.println("OK"); for (byte i = 0; i < 12; i++) { // Serial.println(data); EEPROM.write(i, data); currStr += data; data = Serial.read(); } Serial.println("complete"); flag1=0; return; }а если вот такой код, то вообще могу в порт любые крокозябры писать и все отлично работает