Prvotna verzija
parent
3b2cdd661b
commit
75e065d62a
|
@ -1,3 +0,0 @@
|
||||||
# pra-utripalka
|
|
||||||
|
|
||||||
Arduino krmilnik (Pro mini klon z ATMEGA 328P), ki računa praštevila. Z interno LED lučko šteje sekunde (približno), z zunanjo pa indicira praštevilo sekundnih utripov. Narejeno za darilo.
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
#+TITLE: Pra-utripalka
|
||||||
|
|
||||||
|
* Splošno
|
||||||
|
|
||||||
|
Arduino krmilnik (Pro mini klon z ATMEGA 328P), ki računa praštevila. Z interno LED lučko šteje sekunde (približno), z zunanjo pa indicira praštevilo sekundnih utripov. Narejeno za darilo.
|
||||||
|
|
||||||
|
* Izboljšave
|
||||||
|
- nižja poraba energije
|
||||||
|
- ko se cache napolni, nadaljuj z "ročnim štetjem" naprej
|
||||||
|
- prijaznejše polnjenje?
|
||||||
|
- solarno napajanje?
|
||||||
|
|
||||||
|
* Slike
|
||||||
|
|
||||||
|
[[file:./slike/IMG_20240326_210837.jpg]]
|
||||||
|
|
||||||
|
[[file:./slike/IMG_20240326_210902.jpg]]
|
||||||
|
|
||||||
|
[[file:./slike/IMG_20240326_210911.jpg]]
|
|
@ -0,0 +1,92 @@
|
||||||
|
#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);
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
#!/usr/bin/python3
|
||||||
|
|
||||||
|
from functools import reduce
|
||||||
|
|
||||||
|
prastevila = []
|
||||||
|
|
||||||
|
def jePrastevilo(st):
|
||||||
|
polovica = st / 2
|
||||||
|
for p in prastevila:
|
||||||
|
if (p > polovica):
|
||||||
|
prastevila.append(st)
|
||||||
|
return True
|
||||||
|
|
||||||
|
if (st % p) == 0:
|
||||||
|
return False
|
||||||
|
|
||||||
|
prastevila.append(st)
|
||||||
|
return True
|
||||||
|
|
||||||
|
for i in range(2, 65535):
|
||||||
|
if (len(prastevila) == 128):
|
||||||
|
break
|
||||||
|
print("Prastevilo ?", i, jePrastevilo(i))
|
||||||
|
|
||||||
|
print("Vsota: ")
|
||||||
|
print(reduce(lambda x, y: x+y, prastevila, 0))
|
Binary file not shown.
After Width: | Height: | Size: 255 KiB |
Binary file not shown.
After Width: | Height: | Size: 255 KiB |
Binary file not shown.
After Width: | Height: | Size: 266 KiB |
Loading…
Reference in New Issue