Skip to content

Commit 30e7eef

Browse files
committed
0.3.2 AtomicWeight
1 parent 3898ab6 commit 30e7eef

File tree

25 files changed

+492
-55
lines changed

25 files changed

+492
-55
lines changed

libraries/AtomicWeight/AtomicWeight.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// FILE: AtomicWeight.cpp
33
// AUTHOR: Rob Tillaart
44
// DATE: 2022-03-09
5-
// VERSION: 0.3.1
5+
// VERSION: 0.3.2
66
// PURPOSE: Arduino library for atomic weights
77
// URL: https://github.com/RobTillaart/AtomicWeight
88

libraries/AtomicWeight/AtomicWeight.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33
// FILE: AtomicWeight.h
44
// AUTHOR: Rob Tillaart
55
// DATE: 2022-03-09
6-
// VERSION: 0.3.1
6+
// VERSION: 0.3.2
77
// PURPOSE: Arduino library for atomic weights
88
// URL: https://github.com/RobTillaart/AtomicWeight
99

1010

1111
#include "Arduino.h"
1212

1313

14-
#define ATOMIC_WEIGHT_LIB_VERSION (F("0.3.1"))
14+
#define ATOMIC_WEIGHT_LIB_VERSION (F("0.3.2"))
1515

1616

1717
#ifndef ATOMIC_WEIGHT_MAX_SPLIT_LIST

libraries/AtomicWeight/CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,14 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/)
66
and this project adheres to [Semantic Versioning](http://semver.org/).
77

88

9+
## [0.3.2] - 2025-06-22
10+
- update minerals.h (add formulas chapter 14)
11+
- split minerals example in 3 parts
12+
- update atomic_weight_split.ino (add element nr)
13+
- update readme.md
14+
- add example atomic_weight_count_protons.ino
15+
- minor update examples
16+
917
## [0.3.1] - 2025-01-02
1018
- fix #4, update minerals.h
1119
- update example

libraries/AtomicWeight/README.md

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,12 +126,16 @@ See example.
126126

127127
```cpp
128128
char formula[24] = "YBa2Cu3O7";
129-
nr = splitElements(formula);
129+
Serial.println(formula);
130+
nr = PTOE.splitElements(formula);
130131
for (int i = 0; i < nr; i++)
131132
{
132-
Serial.print(PTOE.massPercentage(formula, element(i)), 3);
133+
int elem = PTOE.element(i);
134+
Serial.print(PTOE.massPercentage(formula, PTOE.name(elem), 3);
133135
Serial.print("%\t");
134-
Serial.print(element(i));
136+
Serial.print(elem);
137+
Serial.print("%\t");
138+
Serial.print(PTOE.name(elem));
135139
Seriel.println();
136140
}
137141
```
@@ -324,12 +328,14 @@ minimize the memory used for the elements mass lookup table.
324328
element 0 is defined as n conflict with N
325329
- support hydrates ?
326330
- **Ba(BrO3)2·2H2O** new separator + starts with number.
331+
==> **Ba(BrO3)2(H2O)2** or **Ba(BrO3)2·(H2O)2** or ??
327332
- other liquids than water?
328333
- https://en.wikipedia.org/wiki/Glossary_of_chemical_formulae
329334
- is there a faster data structure?
330335
- search by nr is O(1)
331336
- search by name is O(n)
332337
- only if more RAM is used. => not
338+
- selection operator (Mg,Fe,Al)? not deterministic
333339
- parameters element should be less than \_size
334340
- user responsibility
335341
- more information?

libraries/AtomicWeight/examples/atomic_count_atomPercentage/atomic_count_atomPercentage.ino

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,13 @@ char formula6[24] = "xH2"; // fails => 0;
2222

2323
void setup()
2424
{
25-
Serial.begin(115200);
2625
while (!Serial);
26+
Serial.begin(115200);
27+
Serial.println();
2728
Serial.println(__FILE__);
2829
Serial.print("ATOMIC_WEIGHT_LIB_VERSION: ");
2930
Serial.println(ATOMIC_WEIGHT_LIB_VERSION);
31+
Serial.println();
3032

3133

3234
// COUNT

libraries/AtomicWeight/examples/atomic_count_split/atomic_count_split.ino

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,13 @@ char formula8[24] = "Ca2SbMg4FeBe2Si4O20"; // Welshite
2727

2828
void setup()
2929
{
30-
Serial.begin(115200);
3130
while (!Serial);
31+
Serial.begin(115200);
32+
Serial.println();
3233
Serial.println(__FILE__);
3334
Serial.print("ATOMIC_WEIGHT_LIB_VERSION: ");
3435
Serial.println(ATOMIC_WEIGHT_LIB_VERSION);
36+
Serial.println();
3537

3638
test("C");
3739
test("C6");

libraries/AtomicWeight/examples/atomic_grams_moles/atomic_grams_moles.ino

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,13 @@ char formula[24] = "KOH";
1616

1717
void setup()
1818
{
19-
Serial.begin(115200);
2019
while (!Serial);
20+
Serial.begin(115200);
2121
Serial.println();
2222
Serial.println(__FILE__);
23+
Serial.print("ATOMIC_WEIGHT_LIB_VERSION: ");
24+
Serial.println(ATOMIC_WEIGHT_LIB_VERSION);
25+
Serial.println();
2326

2427
Serial.print("\n\t");
2528
Serial.print(formula);
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
// FILE: atomic_weight_count_protons.ino
2+
// AUTHOR: Rob Tillaart
3+
// PURPOSE: demo
4+
// URL: https://github.com/RobTillaart/AtomicWeight
5+
//
6+
7+
#include "Arduino.h"
8+
#include "AtomicWeight.h"
9+
10+
11+
PTOE ptoe;
12+
13+
14+
void setup()
15+
{
16+
while (!Serial);
17+
Serial.begin(115200);
18+
Serial.println();
19+
Serial.println(__FILE__);
20+
Serial.print("ATOMIC_WEIGHT_LIB_VERSION: ");
21+
Serial.println(ATOMIC_WEIGHT_LIB_VERSION);
22+
Serial.println();
23+
Serial.println("Formula\tProt\tNeut");
24+
Serial.println();
25+
26+
count("O");
27+
count("O2");
28+
count("O3");
29+
count("H2O");
30+
count("YBa2Cu3O7");
31+
count("C6H6O6");
32+
}
33+
34+
35+
void loop()
36+
{
37+
}
38+
39+
40+
void count(char * formula)
41+
{
42+
Serial.print(formula);
43+
Serial.print("\t");
44+
Serial.print(protons(formula));
45+
Serial.print("\t");
46+
Serial.print(neutrons(formula));
47+
Serial.print("\n");
48+
}
49+
50+
uint32_t protons(char * formula)
51+
{
52+
uint32_t prot = 0;
53+
int nr = ptoe.splitElements(formula);
54+
for (int i = 0; i < nr; i++)
55+
{
56+
int elem = ptoe.element(i);
57+
float weight = ptoe.weight(formula, ptoe.name(elem));
58+
prot += weight / ptoe.weight(elem) * ptoe.protons(elem);
59+
}
60+
return prot;
61+
}
62+
63+
64+
uint32_t neutrons(char * formula)
65+
{
66+
uint32_t neut = 0;
67+
int nr = ptoe.splitElements(formula);
68+
for (int i = 0; i < nr; i++)
69+
{
70+
int elem = ptoe.element(i);
71+
float weight = ptoe.weight(formula, ptoe.name(elem));
72+
neut += weight / ptoe.weight(elem) * ptoe.neutrons(elem);
73+
}
74+
return neut;
75+
}
76+
77+
uint32_t electrons(char * formula)
78+
{
79+
return protons(formula);
80+
}
81+
82+
83+
84+
// -- END OF FILE --

libraries/AtomicWeight/examples/atomic_weight_find/atomic_weight_find.ino

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,13 @@ PTOE ptoe;
1212

1313
void setup()
1414
{
15-
Serial.begin(115200);
1615
while (!Serial);
16+
Serial.begin(115200);
17+
Serial.println();
1718
Serial.println(__FILE__);
19+
Serial.print("ATOMIC_WEIGHT_LIB_VERSION: ");
20+
Serial.println(ATOMIC_WEIGHT_LIB_VERSION);
21+
Serial.println();
1822

1923
uint8_t n = ptoe.find("Fe");
2024
Serial.println(ptoe.protons(n));

libraries/AtomicWeight/examples/atomic_weight_find_performance/atomic_weight_find_performance.ino

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,13 @@ volatile int n;
1818

1919
void setup()
2020
{
21-
Serial.begin(115200);
2221
while (!Serial);
22+
Serial.begin(115200);
23+
Serial.println();
2324
Serial.println(__FILE__);
25+
Serial.print("ATOMIC_WEIGHT_LIB_VERSION: ");
26+
Serial.println(ATOMIC_WEIGHT_LIB_VERSION);
27+
Serial.println();
2428

2529
delay(10);
2630
start = micros();

0 commit comments

Comments
 (0)