#include "EEPROM.h" // Interni LED - sekunde #define iLED 13 // Zunanji LED - prastevila #define eLED 5 // Splosni stevec uint16_t stevec = 0; // Polje za ze-izracunana prastevila uint16_t prastevila[512]; uint16_t st_prastevil = 0; // Naslednje prastevilo; 1 ni prastevilo, ampak funkcija za "naslednje" zacne z 2 uint16_t naslednje_prastevilo = 1; bool je_prastevilo(uint16_t st) { uint16_t polovica = st / 2; for (uint16_t i = 0; i < st_prastevil; i += 1) { if (prastevila[i] > polovica) { return true; } if ((st % prastevila[i]) == 0) { return false; } } // Samo pr prvem - 2 return true; } uint16_t get_naslednje_prastevilo() { uint16_t naslednje = naslednje_prastevilo + 1; while (!je_prastevilo(naslednje)) { naslednje += 1; } prastevila[st_prastevil] = naslednje; naslednje_prastevilo = naslednje; st_prastevil += 1; Serial.println(naslednje); return naslednje; } void zapisi_stevilo(int16_t st) { EEPROM.write(0, st >> 8); EEPROM.write(1, st & 0xFF); } uint16_t beri_stevilo() { return (EEPROM.read(0) << 8) + EEPROM.read(1); } void setup() { pinMode(iLED, INPUT_PULLUP); pinMode(eLED, OUTPUT); Serial.begin(9600); uint16_t naslednje = 0; uint16_t shranjeno = beri_stevilo(); if (shranjeno > 0) { while (naslednje_prastevilo < shranjeno - 1) { get_naslednje_prastevilo(); } } else { get_naslednje_prastevilo(); } } void loop() { stevec += 1; digitalWrite(iLED, HIGH); // Je prastevilo? if (stevec == naslednje_prastevilo) { digitalWrite(eLED, HIGH); stevec = 0; naslednje_prastevilo = get_naslednje_prastevilo(); zapisi_stevilo(naslednje_prastevilo); } delay(500); digitalWrite(iLED, LOW); delay(500); digitalWrite(eLED, LOW); }