Skip to content

Commit 4a62095

Browse files
author
ladyada
committed
Merge remote-tracking branch 'bot-fork/main'
2 parents cc01384 + c14e438 commit 4a62095

2 files changed

Lines changed: 28 additions & 29 deletions

File tree

Adafruit_AS7343.cpp

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,7 @@ bool Adafruit_AS7343::dataReady() {
307307
*/
308308
bool Adafruit_AS7343::readAllChannels(uint16_t *readings_buffer) {
309309
setBank(false);
310+
310311
// Determine how many channels based on mode
311312
as7343_smux_mode_t mode = getSMUXMode();
312313
uint8_t num_channels = 6;
@@ -316,15 +317,34 @@ bool Adafruit_AS7343::readAllChannels(uint16_t *readings_buffer) {
316317
num_channels = 18;
317318
}
318319

319-
// Read ASTATUS first to latch all data
320+
// Start one measurement — auto-SMUX runs all cycles internally
321+
if (!startMeasurement()) {
322+
return false;
323+
}
324+
325+
// Wait for AVALID (fires after all cycles complete)
326+
uint32_t start = millis();
327+
while (!dataReady()) {
328+
if (millis() - start > 1000) {
329+
return false;
330+
}
331+
delay(1);
332+
}
333+
334+
// Read ASTATUS to latch data and clear AVALID
320335
Adafruit_BusIO_Register astatus_reg =
321336
Adafruit_BusIO_Register(i2c_dev, AS7343_ASTATUS);
322337
astatus_reg.read();
323338

324339
// Read all data registers in one burst
340+
// DATA_0_L starts at 0x96, each channel is 2 bytes (little-endian)
325341
Adafruit_BusIO_Register data_reg =
326342
Adafruit_BusIO_Register(i2c_dev, AS7343_DATA_0_L, 2);
327-
return data_reg.read((uint8_t *)readings_buffer, num_channels * 2);
343+
if (!data_reg.read((uint8_t *)readings_buffer, num_channels * 2)) {
344+
return false;
345+
}
346+
347+
return true;
328348
}
329349

330350
/**

examples/fulltest/fulltest.ino

Lines changed: 6 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ void setup() {
3939
// === Spectral Engine Configuration ===
4040
Serial.println(F("\n--- Spectral Configuration ---"));
4141

42-
as7343.setGain(AS7343_GAIN_256X);
42+
as7343.setGain(AS7343_GAIN_64X);
4343
Serial.print(F("Gain: "));
4444
switch (as7343.getGain()) {
4545
case AS7343_GAIN_0_5X:
@@ -171,30 +171,12 @@ void setup() {
171171
void loop() {
172172
uint16_t readings[18];
173173

174-
// Start measurement
175-
as7343.startMeasurement();
176-
177-
// Wait for data with timeout
178-
uint32_t start = millis();
179-
while (!as7343.dataReady()) {
180-
if (millis() - start > 500) {
181-
Serial.println(F("Timeout waiting for data!"));
182-
return;
183-
}
184-
delay(1);
174+
if (!as7343.readAllChannels(readings)) {
175+
Serial.println(F("Read failed!"));
176+
delay(500);
177+
return;
185178
}
186179

187-
// Check saturation
188-
if (as7343.isAnalogSaturated()) {
189-
Serial.print(F("[ANALOG SAT] "));
190-
}
191-
if (as7343.isDigitalSaturated()) {
192-
Serial.print(F("[DIGITAL SAT] "));
193-
}
194-
195-
// Read all channels
196-
as7343.readAllChannels(readings);
197-
198180
// Print in wavelength order for easier reading
199181
Serial.print(F("F1:"));
200182
Serial.print(readings[AS7343_CHANNEL_F1]);
@@ -220,10 +202,7 @@ void loop() {
220202
Serial.print(F("\tF8:"));
221203
Serial.print(readings[AS7343_CHANNEL_F8]);
222204
Serial.print(F("\tNIR:"));
223-
Serial.print(readings[AS7343_CHANNEL_NIR]);
224-
225-
Serial.print(F("\tVIS:"));
226-
Serial.println(readings[AS7343_CHANNEL_VIS_TL_0]);
205+
Serial.println(readings[AS7343_CHANNEL_NIR]);
227206

228207
delay(100);
229208
}

0 commit comments

Comments
 (0)