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