Prvotna verzija

deblo
Jurij Podgoršek 2024-03-27 16:33:55 +01:00
parent 3b2cdd661b
commit 75e065d62a
7 changed files with 137 additions and 3 deletions

View File

@ -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.

19
README.org 100644
View File

@ -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]]

View File

@ -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);
}

View File

@ -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