Arduino atmega328p

Эта программа должна запрашивать у пользователя ключ шифрования для ввода через последовательный монитор. Ключ шифрования содержит 16 символов. Однако сообщение, которое будет зашифровано, может содержать до 128 символов. Таким образом, при хранении ключа шифрования в EEPROM его следует повторить, чтобы он заполнял ячейки 0-127.

в коде я пытаюсь повторить 16-символьную клавишу 8 раз

volatile bool prese_button = false;
String Password;
int counter = 8;
boolean right_pass;
void setup() {
  DDRD &= 0b11111011;
  PORTD |=0b00000100;
  EICRA |= 0b00000010;
  EIMSK |= 0b00000001;
  Serial.begin(9600);
}

void loop() {
  Serial.println("Please enter a 127 character password:"); 
  while (Serial.available() == 0) {}  //подождите, пока последовательный терминал будет готов 
  Password = Serial.readString(); 
  Serial.print("your password is: ");  //просто чтобы убедиться, что он был прочитан правильно 
  Serial.println(Password);
  for ( int j = 0 ;j < 128; j++) //   28 char 
  {
    for (int i = 0; i<16 ; i++) {     //16 char
      EEPROM_write ( (j), Password[i] );
    }
  }
}

, 👍0

Обсуждение

А в чем именно заключается проблема?, @chrisl

Я не думаю, что ваш код делает то, что вы описали. Но о чем именно вы спрашиваете?, @StarCat


1 ответ


1
   for ( int j = 0 ;j < 128; j++) //   28 char 
  {
    for (int i = 0; i<16 ; i++) {     //16 char
      EEPROM_write ( (j), Password[i] );
    }
  }

В этих двух циклах for вы пишете 128 раз по 16 символов. Это кажется больше, чем вы описали в своем посте. Если у вас есть 16 вещей и вам нужно повторить, чтобы заполнить 128 слотов, то вам нужно 128/16 = 8 повторений последовательности из 16 символов. Это всего лишь элементарная математика. Так что внешний цикл должен быть равен 8, а не 128.

for ( int j = 0 ;j < 8; j++) //  8 repeats of the 16 char 
      {
        for (int i = 0; i<16 ; i++) {     //16 char
          EEPROM_write ((i + (16*j)), Password[i] );
        }
      }
,

Да, и вам придется вычислить адрес. Я добавлю к ответу пример., @Delta_G