Проблема с чтением из EEPROM
- Войдите на сайт для отправки комментариев
Чт, 03/03/2016 - 10:34
такая проблемка... в EEPROM храню число (мастер номера для смс розетки) и состоние пинов(для восстановления состояния после перезагрузки).
если цикл считывания номера стоит первым, то номер восстанавливается... но после цикла считывания состояния пинов стирается.
если первым поставить цикл считывания состояния пинов, то номер уже не считывается...
в любом случае строка с мастер номером ставится пустой
из кода вообще всё убрал, оставил только считывание этих значений, всё равно...
#include <SoftwareSerial.h> #include <EEPROM.h> SoftwareSerial mySerial(2, 3); // RX, TX int ch = 0; int che = 0; String val = ""; String num = ""; String num_vh = ""; String master = ""; int Pins[] = {4, 5, 6, 7, 8, 9, 10}; // Массив задействованных номеров Pins Arduino, для управления реле. int PinStatus[3]; // Массив для фиксации изменений. с 0 до 3. int numPins = 7; // количество выходов void setup() { delay(5000); //время на инициализацию модуля Serial.begin(9600); //скорость порта // Serial.println("GSM rozetka"); for (int i = 0; i <= 8; i++) { che = EEPROM.read(i); master += char(che); delay(10); } Serial.println("Master is 89" + master); Serial.println(master); for(int i = 0; i <= numPins -1; i++) { pinMode(Pins[i],OUTPUT); PinStatus[i]=EEPROM.read( i + 10 ); digitalWrite(Pins[i],PinStatus[i]); delay(10); } Serial.println("Master is 89" + master); }
и вот что в мониторе:
Master is 89161112219 161112219 Master is 89
в мониторе сразу видно после чего пропадает значение мастера..
пробовал на UNO и на MEGA2560
у вас
int
PinStatus[3];
// Массив для фиксации изменений. с 0 до 3
во первых с 0 до 2...ну,это такое)
массив из трех int,а в цикле
for
(
int
i = 0; i <= numPins -1; i++)
30
{
31
pinMode(Pins[i],OUTPUT);
32
PinStatus[i]=EEPROM.read( i + 10 );
33
digitalWrite(Pins[i],PinStatus[i]);
34
delay(10);
35
}
вы проганяете его аж до значения 6,а можно только до значения 2..так нельзя,вы вылазите за рамки обьявленного массива,в память ему не принадлежащую
если не поняли,то обьявите
int
PinStatus[7];
и все пройдет=)
да, понял, почему то не замечал этого...
сначала поставил 6 - не заработало, потом 7 и всё ок.
только не пойму почему 7 а не 6. счет начинается ведь с 0?
Спасибо))
http://arduino.ru/Reference/Array
Индексация массива начинается с 0. Это значит, что для массива с 10-тью элементами, индекс 9 будет последним:
int
myArray[10]={9,3,2,4,3,2,7,8,9,11};
// myArray[0] первый элемент, содержит 9
// myArray[9] последний элемент, содержит 11
// myArray[10] это неверно возможно возвращение произвольного значения из области памяти не относящийся к массиву
http://arduino.ru/Reference/Array
спасибо!
пожалуйста=)