По тексту программы получается, что сначала цикл чтения из EPROM с выводом считанного, а потом запись нулевых бит в массив data (функция writeBit пишет именно туда). Т.е. постоянно читается из одного места, пишется в другое. Неясно, какой результат ожидается.
тут я обнулил уже память с помощью EEPROM.write(i, 0); вот этим сейчас там нули, теперь я пытаюсь записать единицы, но как и с нулями крах. Как написал Unixon, функии, которые он дал не пишут в ПЗУ
Что вам мешает заменить "byte bits = data[byte_index];" на "byte bits = EEPROM.read(byte_index);", а "data[byte_index] = new_bits;" на "EEPROM.write(byte_index, new_bits);" ?
Создать массив byte равный EEPROM, работать с ним как описано в самом начале, а считывать и записывать весь оптом при помощи EEPROM.get и EEPROM.put. Заодно жизнь EEPROM продлите.