запись чтение EEPROM гарантированная и проверка контрольной суммы

niki43
Offline
Зарегистрирован: 19.02.2014

Народ доброго дня суток, прошу помощи кто поможет разобраться с EEprom библиотекой. мне нужно после нажатия определенного пункта меню записоватькод Ibuton ключа в eeprom, а потом выводить эти ключи на lcd 1602, определенный ключ в определенном месте..

заранее всем спасибо за помощь)))

bwn
Offline
Зарегистрирован: 25.08.2014

И что вам мешает это сделать?  write, read.

niki43
Offline
Зарегистрирован: 19.02.2014

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

niki43
Offline
Зарегистрирован: 19.02.2014

япросто пока не очень дружу с программированием. 

bwn
Offline
Зарегистрирован: 25.08.2014

Судя по вашей регистрации, вы уже должны вполне нормально программить. Берете ваш массив с ключом, и for-ом записываете с 0 по 7 ячейки, следующий с 8-й и т.д. Читать также.
Ну а пишите уж сами.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

niki43 пишет:

кто поможет разобраться с EEprom библиотекой. мне нужно после нажатия определенного пункта меню записоватькод Ibuton ключа в eeprom, а потом выводить эти ключи на lcd 1602, определенный ключ в определенном месте..

хотелка подразумевает :
- меню
- управление 1602-ым
- запись чтение eeprom
- и др.

начните с изучения чего-нить для начала , в готовый код вашей хотелки будете вникать месяца три...
....если его кто-нить напишет ( Ищу исполнителя )

niki43
Offline
Зарегистрирован: 19.02.2014

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

 

niki43
Offline
Зарегистрирован: 19.02.2014

Меню я уже составил хотя еще не до конца, я просто попросил помощи с записью ibuton ключей в eeprom, ну и считывание их от туда с выводом на экран

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

niki43 пишет:

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

вы действительно думаете , что здесь две категории форумчан ?
- времени не очень , кодю не очень - напишите поподробнее код
- времени шквал , кодю нормально - скукота ! не кому чёнить написать типа кода

bwn
Offline
Зарегистрирован: 25.08.2014

niki43 пишет:

времени пока особо нету этим заниматься вот поэтому пока не очень.

Обычно, когда мало времени, имеется достаточно денег: Раздел "Ищу исполнителя"

niki43
Offline
Зарегистрирован: 19.02.2014

я не прошу писать мне код всей моей программы, я просто ппросил что б мне разъяснили на пальцах как это делается что б я понял, вот и все что я хочу

Coolerr
Offline
Зарегистрирован: 30.06.2014

niki43 Думаю вопрос поставить так, какая информация была прочитана перед тем как написать сюда свой вопрос?

bwn
Offline
Зарегистрирован: 25.08.2014

Вас 55 сообщение ни на какие мысли не наводит? Или отсчитать на пальцах 8 значений включая 0 так сложно? (0, 1, 2, 3, 4, 5, 6, 7) - первый ключ (8, 9, 10, 11, 12, 13, 14, 15) - второй ключ и т.д.

niki43
Offline
Зарегистрирован: 19.02.2014

спасибо за помощь, буду пробовать

niki43
Offline
Зарегистрирован: 19.02.2014

восновном пользуюсь учебниками по программированию ардуино, прошу прощения если я напрег кого то своей просьбой

bwn
Offline
Зарегистрирован: 25.08.2014

EEPROM.write   

EEPROM.read  

Странно, через раздел "Программирование" на эту библиотеку не попасть. Но ведь "Поиск" никто не отменял.

Coolerr
Offline
Зарегистрирован: 30.06.2014

Так мало того в IDE есть примеры работы с библиотекой.

niki43
Offline
Зарегистрирован: 19.02.2014

Читал я это но там написанно про один байт, а мне надо 8, потом еще 8, вот это я не могу понять извиняюсь за свои вопросы, и спасибо за понимание и помощь

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

niki43 пишет:

Читал я это но там написанно про один байт, а мне надо 8, потом еще 8, вот это я не могу понять извиняюсь за свои вопросы, и спасибо за понимание и помощь

в метро поезд состоит из 8-ми байтВагонов - вот и сажайте ваши КЛЮЧИ в поезд повагонно-побайтно :)-
 

niki43
Offline
Зарегистрирован: 19.02.2014

теоретически я понимаю как это сделать, а вот кодом хоть убейне догоняю

Coolerr
Offline
Зарегистрирован: 30.06.2014

Так пробуй что нибудь выкладывай сюда, че не понятно подскажут помогут. Помогающим важно знать, что ты сам понял.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

SU-27-16 пишет:

niki43 пишет:

Читал я это но там написанно про один байт, а мне надо 8, потом еще 8, вот это я не могу понять извиняюсь за свои вопросы, и спасибо за понимание и помощь

в метро поезд состоит из 8-ми байтВагонов - вот и сажайте ваши КЛЮЧИ в поезд повагонно-побайтно :)-
 

можно словами рассказать.... а там уж два шага до кода....
...КЛЮЧ - это     byte массив[8]   - нет ?

niki43
Offline
Зарегистрирован: 19.02.2014

допустим я считую ibuton ключь и помещаю его сюда:

byte addr[8];

вот как отсюда его записать  в епром, и оттуда его считать

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

#55

niki43
Offline
Зарегистрирован: 19.02.2014
//Пример простого меню для Arduino
//В меню используется 4 экрана
//за номер отображаемого экрана отвечает переменная m
uint8_t antena[8]  = {//символ антены
0b10101,
0b01110,
0b00100,
0b00100,
0b00100,
0b00100,
0b00100,
0b00100
};
#include <OneWire.h>
OneWire  ds(10);  // на  digital pin 10

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>
LiquidCrystal_I2C lcd(0x27,16,2);  //инициализируем 2х строчный дисплей

int m=0; // переменная для экранов меню основного
int keymeny=0;//меню ключей
int menyStatus=0; //статус включения кеу меню
char p1=0; // переменная 1 шлейфа
char p2=0; // переменная 2 шлейфа
int p3=0; // переменная для примера 3

int count=0;

int alarmPin1 = 0;/* 1 охранный шлейф на А0 порту. При подключенном резисторе
                    1.5кОм в порт приходит значение 132*/
int alarmPin2 = 1; //2 охранный шлейф на порту А1


#define nextPin 6 // кнопка вперел
#define prevPin 7 // кнопка назад
#define cancelPin 8 // кнопка возврата
#define okPin 9 // кнопка выбора
#define ledUDPin 13 // Светодиод

byte addr[8]; //переменная хранения ключа
byte addr1[8];
byte addr2[8];
byte allKey; // всего ключей

boolean buttonnextWasUp = true;
boolean buttonprevWasUp = true;
boolean buttonWasCancel = true;
boolean buttonWasOk = true;
boolean shleifstatus1 =0;
boolean shleifstatus2 =0;
boolean ledEnabled = false;

void setup()
{ 
  Serial.begin(9600);
lcd.createChar(0, antena);// создаем символ и записываем его в память LCD
// Установка пинов как входов

pinMode(nextPin, INPUT);
pinMode(prevPin, INPUT);
pinMode(cancelPin, INPUT);
pinMode(okPin, INPUT);

pinMode(ledUDPin, OUTPUT);



lcd.init();      // инициализация LCD
lcd.backlight();    // включаем подсветку
lcd.createChar(0, antena);// создаем символ и записываем его в память LCD

}


void loop ()
{
  boolean buttonnextIsUp = digitalRead(nextPin);
  boolean buttonprevIsUp = digitalRead(prevPin);
  boolean buttonIsCancel = digitalRead(cancelPin);
  boolean buttonIsOk = digitalRead(okPin);

 ///////////////////////////////////////////////////////////////////////////// 
//состояние первого шлейфа  
int vall1 = analogRead(alarmPin1);/* помещаем значение полученное с порта А0 в переменную vall*/
 if(vall1>120&&vall1<150)//Первый шлейф норма
 {
  Alaarm(1);
 }
 else//
 {
  Alaarm(2);
  
  }
 /////////////////////////////////////////////////////////////////////////////////////////
 //состояние второго шлейфа  
int vall2 = analogRead(alarmPin2);/* помещаем значение полученное с порта А1 в переменную vall*/
 if(vall2>120&&vall2<150)//второй шлейф норма
 {
  Alaarm(3);
 }
 else//
 {
  Alaarm(4);
  
  }
/////////////////////////////////////////////////////////////////// /////////////////////////////
//Обработка нажатия кнопки меню
if (buttonnextWasUp && !buttonnextIsUp)
{
delay(10);
buttonnextIsUp = digitalRead(nextPin); 
if (!buttonnextIsUp)
{
m++;
if (m>4) 
{
m=0; 
}
delay(100);
lcd.clear();
}
}

//Обработка нажатия кнопки назад
if (buttonprevWasUp && !buttonprevIsUp)
{
delay(10);
buttonprevIsUp = digitalRead(prevPin); 
if (!buttonprevIsUp)
{
m--;
if (m<0) 
{
m=4; 
}
delay(100);
lcd.clear();
}
}
////////////////////////////////////////////////////////////////////////////////////
//Обработка нажатия кнопки меню key

if (buttonnextWasUp && !buttonnextIsUp)
{
delay(10);
buttonnextIsUp = digitalRead(nextPin); 
if (!buttonnextIsUp)
{
keymeny++;
if (keymeny>10) 
{
keymeny=1; 
}
delay(100);
lcd.clear();
}
}

//Обработка нажатия кнопки назад
if (buttonprevWasUp && !buttonprevIsUp)
{
delay(10);
buttonprevIsUp = digitalRead(prevPin); 
if (!buttonprevIsUp)
{
keymeny--;
if (keymeny<1) 
{
keymeny=10; 
}
delay(100);
lcd.clear();
}
}


//////////////////////////////////////////////////////////////////////////////
// Обработка нажатия кнопки Ок для входа меню KEY
if ( menyStatus==0){
if (buttonWasOk && !buttonIsOk)
{
delay(10);
buttonIsOk = digitalRead(okPin); 

if (!buttonIsOk && m==4)
{
  menyStatus=1;
  keymeny=1;
  
}
}
}
// Обработка нажатия кнопки Ок для записи ключа
else if ( menyStatus==1){
if (buttonWasOk && !buttonIsOk)
{
delay(10);
buttonIsOk = digitalRead(okPin); 

if (!buttonIsOk && keymeny==1)
{/////////////////////////////////////////////////////////////////////
  вот после нажатия этой кнопки ключь должен записаться в EEprom
 //////////////////////////////////////////////////////////////////////
}
if (!buttonIsOk && keymeny==2)
{
 /////////////////////////////////////////////////////////////////////
  вот после нажатия этой кнопки ключь должен записаться в EEprom
 //////////////////////////////////////////////////////////////////////
}
}
}
//}
/////////////////////////////////////////////////////////////////////////////////////////
// Обработка нажатия кнопки Отмена
if (buttonWasCancel && !buttonIsCancel)
{
delay(10);
buttonIsCancel = digitalRead(cancelPin); 
if (!buttonIsCancel && menyStatus==1)
{
  lcd.clear();
  delay (100);
  menyStatus=0;
    m=4;
}
else if (!buttonIsCancel && menyStatus==0)
{
  lcd.clear();
  delay (100);
  m=0;
}
//delay (100);
//lcd.setCursor(0, 1);
//lcd.print("  ");
}

//////////////////////////////////////////////////////////////////////////////



//вывод меню
if(menyStatus==0)
{
 if (m==0)
 {
   lcd.setCursor(0, 0);
   lcd.print( "GSM" );
   lcd.setCursor(13, 0);
   lcd.write(byte(0));// выводим свой символ записанный в память дисплея
 }
 else if (m==1)
 {
   lcd.setCursor(0, 0);
   lcd.print( "Shleyf N" );
   lcd.setCursor(11, 0);
   lcd.print( "1" );
   lcd.setCursor(13, 0);
   lcd.print( "2" );
   lcd.setCursor(15, 0);
   lcd.print( "3" );
   lcd.setCursor(0, 1);
   lcd.print( "Sostoyanie" );
   lcd.setCursor(11, 1);
   lcd.print(p1);
   lcd.setCursor(13, 1);
   lcd.print(p2);
   lcd.setCursor(15, 1);
 }
 else if (m==2)
 {
   lcd.setCursor(0, 0);
   lcd.print( "Parametr-2" );
   lcd.setCursor(0, 1);
   lcd.print( "P2 = " );
  // lcd.print();
 }
 else if (m==3)
 {
   lcd.setCursor(0, 0);
   lcd.print( "LED Control" );
   lcd.setCursor(0, 1);
   lcd.print( "LED = " );
   //lcd.print();
 }
 else if (m==4)
 {
   lcd.setCursor(6, 0);
   lcd.print( "Key" );
 }
}
/////////////////////////////////////////////////////////////////////////////////
//вывод KEY меню

if(menyStatus==1)
{
 if (keymeny==1)
 {
  //byte i;
 /////////////////////////////////////////////////////////////////////////////////
                               а вот сдесь в меню должен отображаться
 ///////////////////////////////////////////////////////////////////////////////
  lcd.setCursor(6, 0);
  lcd.print( "Key 1" );
  //lcd.setCursor(0, 1);
  //for( i = 0; i < 8; i++) {
    //lcd.setCursor((7-i)*2,1);
    //lcd.print(EEPROM.read(i),HEX);
 }
 }
else if (keymeny==2)
 {
  lcd.setCursor(6, 0);
  lcd.print( "Key 2" );
  /////////////////////////////////////////////////////////////////////////////////
                               а вот сдесь в меню должен отображаться
 ///////////////////////////////////////////////////////////////////////////////
 }
else if (keymeny==3)
 {
  lcd.setCursor(6, 0);
  lcd.print( "Key 3" );
  /////////////////////////////////////////////////////////////////////////////////
                               а вот сдесь в меню должен отображаться
 ///////////////////////////////////////////////////////////////////////////////
 }
else if (keymeny==4)
 {
  lcd.setCursor(6, 0);
  lcd.print( "Key 4" );
  /////////////////////////////////////////////////////////////////////////////////
                               а вот сдесь в меню должен отображаться
 ///////////////////////////////////////////////////////////////////////////////
 }
else if (keymeny==5)
 {
  lcd.setCursor(6, 0);
  lcd.print( "Key 5" );
  /////////////////////////////////////////////////////////////////////////////////
                               а вот сдесь в меню должен отображаться
 ///////////////////////////////////////////////////////////////////////////////
 }
else if (keymeny==6)
 {
  lcd.setCursor(6, 0);
  lcd.print( "Key 6" );
 }
else if (keymeny==7)
 {
  lcd.setCursor(6, 0);
  lcd.print( "Key 7" );
 }
else if (keymeny==8)
 {
  lcd.setCursor(6, 0);
  lcd.print( "Key 8" );
 }
else if (keymeny==9)
 {
  lcd.setCursor(6, 0);
  lcd.print( "Key 9" );
 }
else if (keymeny==10)
 {
  lcd.setCursor(6, 0);
  lcd.print( "Key 10" );
 }
}
/////////////////////////////////////////////////////////////////

buttonWasCancel = buttonIsCancel;
buttonWasOk = buttonIsOk;
buttonnextWasUp = buttonnextIsUp;
buttonprevWasUp = buttonprevIsUp;

}
int Alaarm(int x) //функция состояния шлейфов
{
  if (x==1){//Первый шлейф норма
      shleifstatus1=1;
      p1='H';
  }
  if (x==2){//Первый шлейф обрыв
      shleifstatus1=0;
      p1='X';
    }
  if (x==3){// второй шлейф норма 
      shleifstatus2=1;
      p2='H';
  }
  if (x==4){//второй шлейф обрыв
      shleifstatus2=0;
      p2='X';
    }
}


int Notify(int x) //функция оповещения в последователньый порт
{
    if (x==0) { // оповещение о постановке на сигнализацию
        Serial.println("Oxrana");
    }
    if (x==1) { // оповещение о открытии двери
        Serial.println("Alarm");
    }
    if (x==2) { // оповещение о взломе квартиры!
        Serial.println("0x02");
    }
    if (x==3) { // оповещение о выключении сигнализации
        Serial.println("Snjatie");
    }
    if (x==98) { // оповещение о включении ardunio
        Serial.println("9x98");
    }
    if (x==99) { // оповещение о ОШИБКЕ
        Serial.println("Kluch B pamjati");
    }
}   
    int guardBlink (int x) //функция светового оповещения
 {
    if (x==1) { // Включение сигнализации
     digitalWrite(ledUDPin, HIGH); 
       delay(2000);
     digitalWrite(ledUDPin, LOW); 
       delay(2000); 
       digitalWrite(ledUDPin, HIGH); 
       delay(2000);
     digitalWrite(ledUDPin, LOW); 
       delay(2000);
     digitalWrite(ledUDPin, HIGH); 
       delay(2000);
     digitalWrite(ledUDPin, LOW); 
       delay(2000);  
     digitalWrite(ledUDPin, HIGH);    
    }
    if (x==2) { // выключаем сигнализацию идиод
      digitalWrite(ledUDPin, HIGH); 
       delay(300);
      digitalWrite(ledUDPin, LOW); 
       delay(300);
        digitalWrite(ledUDPin, HIGH); 
      delay(300);
      digitalWrite(ledUDPin, LOW); 
       delay(300);
        digitalWrite(ledUDPin, HIGH); 
      delay(300);
        digitalWrite(ledUDPin, LOW);
       
    }
    if (x==3) { // во время ожидания ключа при открытой двери
      
      digitalWrite(ledUDPin, HIGH); 
       delay(200);
      digitalWrite(ledUDPin, LOW); 
       delay(200);
        digitalWrite(ledUDPin, HIGH); 
      delay(200);
      digitalWrite(ledUDPin, LOW); 
       delay(200);
        digitalWrite(ledUDPin, HIGH); 
      delay(200);
      digitalWrite(ledUDPin, LOW); 
    }
    if (x==4) { // ошибка ключа
       digitalWrite(ledUDPin, HIGH); 
       delay(100);
     digitalWrite(ledUDPin, LOW); 
       delay(100); 
     digitalWrite(ledUDPin, HIGH); 
       delay(100);
     digitalWrite(ledUDPin, LOW); 
       delay(100);  
     digitalWrite(ledUDPin, HIGH);    
    }
}
/*
// ********************* проверка наличия ключа в EEPROM
int prov_key()
 {
  byte i1;  byte i2;   
  int count11;
  for( i1 = 1; i1 <= count; i1++) 
   {count11=0;
   for( i2 = 0; i2 < 8; i2++) {
    if(addr[i2]==EEPROM.read(i1*8+i2))
      count11++;
   }
  if(count11==8) 
    return i1;
  } 
  return 0;
 }

 // ********************* добавление ключа в EEPROM
 void add_new_key(int nnew)
  {
  byte i1;    
  if ( OneWire::crc8( addr, 7) != addr[7]) {
      Serial.print("CRC is not valid!\n");
      return;
  }
  
  if ( addr[0] != 0x01) {
      Serial.print("Device is not a DS1990A family device.\n");
      return;
  }
  count++;
  //lcd.setCursor(0,0);
 Serial.print("key_new = ");
 Serial.print(count,HEX);
  for( i1 = 0; i1 < 8; i1++) {
    //lcd.setCursor((7-i1)*2,1);
    //lcd.print(addr[i1],HEX);
    Serial.print(addr[i1],HEX);
    EEPROM.write(nnew*8+i1, addr[i1]);
  }
  ds.reset();  
  delay(1000);   
 } 
 /*
  // *********************  вывод прислоненного ключа в lcd
 void view_key(int rr)
  {
  byte i;  
  Serial.print(" nkey = ");
  lcd.clear();
  lcd.setCursor(0,0);
  if(admin==1 && rr==1)
     lcd.print("admin =");
  else
     lcd.print(" user = ");   
  lcd.setCursor(8,0);
  lcd.print(rr);
  for( i = 0; i < 8; i++) {
    lcd.setCursor((7-i)*2,1);
    lcd.print(addr[i],HEX);
    //EEPROM.write(i1*8+i, addr[i]);
  }
  ds.reset();  
  delay(1000);   
  return;
 } 
 // ********************* вывод ключа из EEPROM
 void view_key1(int rr)
  {
  byte i;  
  lcd.setCursor(8,0);
  lcd.print(rr);
  for( i = 0; i < 8; i++) {
    lcd.setCursor((7-i)*2,1);
    lcd.print(EEPROM.read(rr*8+i),HEX);
  }
  delay(1000);   
  return;
 } 
 */

 

niki43
Offline
Зарегистрирован: 19.02.2014

вот мой скетч но я наверное не правильно его вставил

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

byte Key[ 64 , 8 ];
64 ключа по 8 байт
это для - далее....

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

niki43 пишет:

вот мой скетч но я наверное не правильно его вставил

 

аха !
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...
"свернуть код" - тоже хорошо

niki43
Offline
Зарегистрирован: 19.02.2014

прошу прощения за такое, не хотел

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

niki43 пишет:

прошу прощения за такое, не хотел

 

здесь не бьют ! небось !
неЗнал != неХотел
просто измени #75 :)-

niki43
Offline
Зарегистрирован: 19.02.2014

не понял вас че с этим дальше делать

byte Key[ 64 , 8 ];
64 ключа по 8 байт

я понимаю что вам мои вопросы кажутся тупыми, но не могу понять

 

bwn
Offline
Зарегистрирован: 25.08.2014

Снова на пальцах, берем  байт из массива из 0 ячейки, записываем в 0 ячейку епром, берем из 1 ячейки массива, записываем в 1 ячейку епром и так восемь раз. Первый ключ сохранен. Удобно делать при помощи цикла   For

Для последующих ключей смещаем адресное поле EEPROM на длину ключа.
 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

niki43 пишет:

byte Key[ 64 , 8 ];
64 ключа по 8 байт

я понимаю что вам мои вопросы кажутся тупыми, но не могу понять

64 ключа по 8 байт - ещё рано...
нет , не кажутся... я сам почти такой...
напиши код :
ввод ключа из сериала в ОЗУ ( в массив )
по команде из сериала запись этого ключа в eeprom

по команде из сериала чтение этого ключа в ОЗУ ( в массив )
вывод ключа из ОЗУ ( из массива ) в сериал-монитор

я бы так начал изучать этот вопрос , а потом усложнять и объединять со всем остальным....

bwn
Offline
Зарегистрирован: 25.08.2014

SU-27-16, про 64 ключа, ты не горячишься, ТС похоже в одноразмерном массиве уже увяз.

niki43
Offline
Зарегистрирован: 19.02.2014

дустим есть масив с 8 байтами:

byte Key[ 8 ];

byte i;

for (int i=0; i < 8; i++){

 

EEPROM.write(i, key)

}

я так вас понял, 

Radjah
Offline
Зарегистрирован: 06.08.2014

У тебя индекс отклеился.

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

niki43 пишет:

дустим есть масив с 8 байтами:

byte Key[ 8 ];

byte i;

for (int i=0; i < 8; i++){

 

EEPROM.write(i, key)

}

я так вас понял, 

Вот Вы чего-то написали и тут же с вопросм "так? не так?".

А просто взять и попробовать религия не позволяет?

niki43
Offline
Зарегистрирован: 19.02.2014

Что отклеилось

Radjah
Offline
Зарегистрирован: 06.08.2014

Индекс в массиве и знак вопроса.

niki43
Offline
Зарегистрирован: 19.02.2014

Для чего он там, и как правильно должно выглядеть, смотрел примеры тав вроде больше ничего нет

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

byte i;  - не нужно
а теперь найди разницу :
EEPROM.write( i , key ) и
EEPROM.write( i , key[ i ] )

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

niki43 пишет:

Для чего он там, и как правильно должно выглядеть

для указания МК какой байт в данный момент взять из массива
...даже маленькие фрагменты кода не оформляй текстово , а посредством вставки кода
как говорить про строки если они не нумерованы ?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

ещё над чем подумать....
for (int i=0; i < 8; i++) 
i изменяется от 0 до 7 - хватит и трёх двоичных разрядов для кодировки , но ближайший пользуемый тип данных byte , 8 разрядов
здесь int и все старшие типы - трата памяти :(

поэтому лучше
for ( byte i=0; i < 8; i++ ) 

это тоже не прокатит
EEPROM.write( i , key[ i ] ) 
ведь заявлено byte Key[ 8 ]
правильно
EEPROM.write( i , Key[ i ] ) 

niki43
Offline
Зарегистрирован: 19.02.2014

О теперь понятней стало, что от куда берется,
А чтоб следующий ключ записать эт надо написать так:

for (byte I = 8; I < 16; I++)

Про вставку кода я учту, приеду домой отредактирую все свои записи, с мобильника подругому писать не могу.
Спасибо теперь, стало понятней

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

for (byte I = 8; I < 16; I++)  - это уже ближе к посту #77 :)

и так и будешь прописывать все 64 возможных ключа ?
а если оставить
for ( byte i = 0; i < 8; i++ )
но добавить
EEPROM.write( i * numberKey , Key[ i ] )   
...где numberKey - это номер ключа , byte numberKey = 0...63

читай - смещение индекса

niki43
Offline
Зарегистрирован: 19.02.2014

Нужно добавить переменную ключей:

byte numberKey = 0;

А считать обратно я могу по номеру ключей иль только нужно будит побайтно считывать

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

niki43 пишет:

А считать обратно я могу по номеру ключей иль только нужно будит побайтно считывать

а это как тибе удобнее-геморройне :)

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

напиши-покажи весь код записи ключа #43 = FF01020304050655 в EEPROM ( из массива )
напиши-покажи весь код чтения ключа #43 из EEPROM ( в массив )

чё построчно-то обсуждать ?

niki43
Offline
Зарегистрирован: 19.02.2014

Ок, буду дома ппробую на писать, и спасибо за помощь

niki43
Offline
Зарегистрирован: 19.02.2014

Ок, буду дома ппробую на писать, и спасибо за помощь