Initial commit

This commit is contained in:
2025-01-28 19:29:53 -05:00
commit a79b373fe8
5 changed files with 130 additions and 0 deletions

5
.gitignore vendored Normal file
View File

@@ -0,0 +1,5 @@
.pio
.vscode/.browse.c_cpp.db*
.vscode/c_cpp_properties.json
.vscode/launch.json
.vscode/ipch

10
.vscode/extensions.json vendored Normal file
View File

@@ -0,0 +1,10 @@
{
// See http://go.microsoft.com/fwlink/?LinkId=827846
// for the documentation about the extensions.json format
"recommendations": [
"platformio.platformio-ide"
],
"unwantedRecommendations": [
"ms-vscode.cpptools-extension-pack"
]
}

17
platformio.ini Normal file
View File

@@ -0,0 +1,17 @@
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
[env:uno_r4_minima]
platform = renesas-ra
board = uno_r4_minima
framework = arduino
lib_deps =
adafruit/Adafruit AS7341@^1.4.1
adafruit/Adafruit BusIO@^1.16.2

87
src/main.cpp Normal file
View File

@@ -0,0 +1,87 @@
#include <Arduino.h>
#include <Adafruit_AS7341.h>
#include <Wire.h>
Adafruit_AS7341 as7341;
int measurement = -1;
int baselineValue = 0;
bool reactionComplete = false;
unsigned long startTime = 0;
const int triggerPin = 2;
const int SIGNIFICANT_DECREASE = 5000;
bool triggerArmed = false; // Add this to wait for pin to stabilize
void setup() {
Serial.begin(115200);
while (!Serial) delay(10);
Wire.begin();
delay(100);
Serial.println("Looking for AS7341 sensor...");
if (!as7341.begin()) {
Serial.println("Could not find AS7341 sensor. Check wiring!");
while (1) delay(10);
}
Serial.println("AS7341 sensor initialized!");
// Configure sensor
as7341.setATIME(100);
as7341.setASTEP(999);
as7341.setGain(AS7341_GAIN_256X);
as7341.enableLED(false);
pinMode(triggerPin, INPUT_PULLUP);
// Wait for trigger pin to stabilize to HIGH
delay(100);
if (digitalRead(triggerPin) == HIGH) {
triggerArmed = true;
// Serial.println("Trigger armed and ready!");
}
}
void loop() {
delay(50);
if (!as7341.readAllChannels()) {
Serial.println("Error reading channels");
return;
}
measurement = as7341.getChannel(AS7341_CHANNEL_630nm_F7);
// Print trigger state periodically
static unsigned long lastTriggerDebug = 0;
if (millis() - lastTriggerDebug > 500) {
// Serial.print("Trigger pin state: ");
// Serial.println(digitalRead(triggerPin));
lastTriggerDebug = millis();
}
// Start timer when trigger is pulled (goes from HIGH to LOW) and take baseline
if (triggerArmed && !reactionComplete && digitalRead(triggerPin) == LOW && startTime == 0) {
baselineValue = measurement;
startTime = millis();
Serial.println("Reaction started!");
Serial.print("Baseline value: ");
Serial.println(baselineValue);
}
// Check for completion if reaction has started
if (!reactionComplete && startTime > 0) {
if (baselineValue - measurement >= SIGNIFICANT_DECREASE) {
reactionComplete = true;
float duration = (millis() - startTime) / 1000.0;
Serial.print("Reaction complete! Duration: ");
Serial.print(duration);
Serial.println(" seconds");
}
}
Serial.print('>');
Serial.print("630nm:");
Serial.println(measurement);
}

11
test/README Normal file
View File

@@ -0,0 +1,11 @@
This directory is intended for PlatformIO Test Runner and project tests.
Unit Testing is a software testing method by which individual units of
source code, sets of one or more MCU program modules together with associated
control data, usage procedures, and operating procedures, are tested to
determine whether they are fit for use. Unit testing finds problems early
in the development cycle.
More information about PlatformIO Unit Testing:
- https://docs.platformio.org/en/latest/advanced/unit-testing/index.html