diff --git a/examples/serial_binboard/serial_binboard.ino b/examples/serial_binboard/serial_binboard.ino
index 591110c..4d7eeb6 100644
--- a/examples/serial_binboard/serial_binboard.ino
+++ b/examples/serial_binboard/serial_binboard.ino
@@ -14,12 +14,17 @@
* along with this program. If not, see . */
#include "LiBoard.h"
+#include
+// !!! choose mode: 1 = global single value, 0 = per-square array !!!
+#define USE_GLOBAL_THRESHOLD 0
+
+#if USE_GLOBAL_THRESHOLD
// Option 1 - Global Threshold (Applies to all photoresistors)
-const unsigned short THRESHOLD = 100;
+unsigned short THRESHOLD = 100;
+#else
// Option 2 - Per-square threshold (Applies to each individual photoresistor)
-/*
unsigned short THRESHOLD[64] = {
// A1..H1
150, 150, 150, 150, 150, 150, 150, 150,
@@ -36,9 +41,11 @@ unsigned short THRESHOLD[64] = {
// A7..H7
300, 300, 300, 300, 300, 300, 300, 300,
// A8..H8
- 300, 300, 300, 300, 300, 300, 300, 300
+ 300, 300, 300, 300, 300, 300, 300, 300,
};
-*/
+#endif
+
+bool calibrating = false;
LiBoard board = LiBoard();
unsigned long long lastBinBoard = 0;
@@ -49,12 +56,67 @@ void writeBinaryBoard(unsigned long long binBoard) {
Serial.write((unsigned char)(binBoard>>(8*(7-i))));
}
+// print a single CSV snapshot of raw ADC values (A1..H8 in LiBoard order)
+void printRawSnapshotCSV() {
+ board.getData(); // fills board.values[0..63]
+ for (int i = 0; i < 64; ++i) {
+ Serial.print(board.values[i]);
+ if (i < 63) Serial.print(',');
+ }
+ Serial.println();
+}
+
void setup() {
delay(3000);
Serial.begin(9600);
}
void loop() {
+ // Serial Monitor arguements
+ if (Serial.available()) {
+ int c = Serial.read();
+ // if host sends '?', reply with one CSV line of raw ADC values
+ if (c == '?') {
+ printRawSnapshotCSV();
+ }
+
+ // Calibration Mode for editing THRESHOLD
+ if (c == 'c') {
+ calibrating = true;
+ Serial.println("Calibration Mode Activated!");
+ }
+
+ while (calibrating) {
+ if (Serial.available()){
+ // read a whole line the user pasted
+ String line = Serial.readStringUntil('\n');
+ line.trim();
+ if (line.length() == 0) continue;
+
+#if USE_GLOBAL_THRESHOLD
+ // Global Threshold Calibration
+ long newThreshold = line.toInt();
+ THRESHOLD = (unsigned short)newThreshold;
+#else
+ // Per-Square Calibration
+ char buf[1024];
+ line.toCharArray(buf, 1024);
+ char* tok = strtok(buf, ",");
+
+ int i = 0;
+ while (tok && i < 64) {
+ THRESHOLD[i++] = (unsigned short)atoi(tok);
+ tok = strtok(nullptr, ",");
+ }
+#endif
+ calibrating = false;
+ // eat non-numeric to avoid getting stuck
+ while (Serial.available()) Serial.read();
+ }
+ }
+ }
+
+ // Bitboard logic for normal use
currentBinBoard = board.getBinaryBoard(THRESHOLD);
if (currentBinBoard != lastBinBoard) {
writeBinaryBoard(currentBinBoard);