firmware
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,2 +1 @@
|
|||||||
node_modules
|
.DS_Store
|
||||||
out/
|
|
||||||
|
|||||||
830
hemocube/Hemocube_triplate_V1.1.ino
Normal file
830
hemocube/Hemocube_triplate_V1.1.ino
Normal file
@@ -0,0 +1,830 @@
|
|||||||
|
#include "ADS1X15.h"
|
||||||
|
#include <SPI.h>
|
||||||
|
#include <Wire.h>
|
||||||
|
#include <Adafruit_GFX.h>
|
||||||
|
#include <Adafruit_SSD1306.h>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
const int buttonPin = 12; // Button pin
|
||||||
|
const int PIN_CS = 10;
|
||||||
|
const int GAIN_1 = 0x1;
|
||||||
|
const int GAIN_2 = 0x0;
|
||||||
|
const unsigned int steps = 512;
|
||||||
|
unsigned int sines_of_steps[steps];
|
||||||
|
char data; //Variable to store the data
|
||||||
|
|
||||||
|
ADS1115 ADS(0x48);
|
||||||
|
|
||||||
|
int blue_dac = 2220; //390 2940
|
||||||
|
int green_dac = 1880; //2320 2860
|
||||||
|
|
||||||
|
int green_sample_size = 100;
|
||||||
|
int blue_sample_size = 100;
|
||||||
|
|
||||||
|
int loopcounter = 0;
|
||||||
|
unsigned long long intensity_storage = 0;
|
||||||
|
int temp_counter = 0;
|
||||||
|
|
||||||
|
float avg_storage = 0;
|
||||||
|
float avg_blueS = 0;
|
||||||
|
float avg_blueS1 = 0;
|
||||||
|
float avg_blueS2 = 0;
|
||||||
|
float avg_blueS3 = 0;
|
||||||
|
float avg_greenS = 0;
|
||||||
|
float avg_greenS1 = 0;
|
||||||
|
float avg_greenS2 = 0;
|
||||||
|
float avg_greenS3 = 0;
|
||||||
|
float avg_blueB = 0;
|
||||||
|
float avg_blueB1 = 0;
|
||||||
|
float avg_blueB2 = 0;
|
||||||
|
float avg_blueB3 = 0;
|
||||||
|
float avg_greenB = 0;
|
||||||
|
float avg_greenB1 = 0;
|
||||||
|
float avg_greenB2 = 0;
|
||||||
|
float avg_greenB3 = 0;
|
||||||
|
float old_blue = 0;
|
||||||
|
float old_green = 0;
|
||||||
|
float avg_green = 0;
|
||||||
|
float avg_blue = 0;
|
||||||
|
//
|
||||||
|
bool buttonState = false; // Current button state
|
||||||
|
bool lastButtonState = false; // Previous button state
|
||||||
|
//int taskNumber = 1; // Current task number
|
||||||
|
bool taskStarted = false;
|
||||||
|
//int buttonPressCount = 0;
|
||||||
|
int bs;
|
||||||
|
int split_counter = 0;
|
||||||
|
int intensity_display = 1;
|
||||||
|
int plotter = 0;
|
||||||
|
int blue_stable_time = 50;
|
||||||
|
int green_stable_time = 50;
|
||||||
|
|
||||||
|
int blue_samples = 10;
|
||||||
|
int green_samples = 10;
|
||||||
|
|
||||||
|
int moving_average_array[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
||||||
|
int sorting_array[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
||||||
|
int moving_average = 0;
|
||||||
|
int j = 0;
|
||||||
|
int temp_sort = 0;
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
|
||||||
|
Serial.begin(115200);
|
||||||
|
Serial.println("SN HCV1001");
|
||||||
|
pinMode(PIN_CS, OUTPUT);
|
||||||
|
pinMode(buttonPin, INPUT_PULLUP);
|
||||||
|
SPI.begin();
|
||||||
|
SPI.setClockDivider(SPI_CLOCK_DIV2);
|
||||||
|
ADS.begin();
|
||||||
|
}
|
||||||
|
|
||||||
|
void setOutput(byte channel, byte gain, byte shutdown, unsigned int val)
|
||||||
|
{
|
||||||
|
byte lowByte = val & 0xff;
|
||||||
|
byte highByte = ((val >> 8) & 0xff) | channel << 7 | gain << 5 | shutdown << 4;
|
||||||
|
PORTB &= 0xfb;
|
||||||
|
SPI.transfer(highByte);
|
||||||
|
SPI.transfer(lowByte);
|
||||||
|
PORTB |= 0x4;
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
loopcounter = 0;
|
||||||
|
avg_storage = 0;
|
||||||
|
split_counter = 0;
|
||||||
|
|
||||||
|
if (Serial.available()) {
|
||||||
|
char data = Serial.read();
|
||||||
|
|
||||||
|
if (data == 'B') {
|
||||||
|
taskStarted = false;
|
||||||
|
Serial.println("#Place Buffer");
|
||||||
|
|
||||||
|
while (!taskStarted) {
|
||||||
|
buttonState = digitalRead(buttonPin);
|
||||||
|
|
||||||
|
if (buttonState == HIGH && lastButtonState == LOW) {
|
||||||
|
lastButtonState = buttonState;
|
||||||
|
taskStarted = true;
|
||||||
|
startTask1();
|
||||||
|
}
|
||||||
|
|
||||||
|
lastButtonState = buttonState;
|
||||||
|
}
|
||||||
|
|
||||||
|
taskStarted = false;
|
||||||
|
while (!taskStarted) {
|
||||||
|
buttonState = digitalRead(buttonPin);
|
||||||
|
|
||||||
|
if (buttonState == HIGH && lastButtonState == LOW) {
|
||||||
|
lastButtonState = buttonState;
|
||||||
|
taskStarted = true;
|
||||||
|
startTask2();
|
||||||
|
}
|
||||||
|
|
||||||
|
lastButtonState = buttonState;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (data == 'S') {
|
||||||
|
Serial.println("Place Sample");
|
||||||
|
while (digitalRead(buttonPin) == LOW) {
|
||||||
|
delay(10);
|
||||||
|
}
|
||||||
|
startTask2();
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (data == 'P') { //Check if the received character is 1
|
||||||
|
Serial.print("RESULT");
|
||||||
|
Serial.print(" "); Serial.print("SN HCV1001"); Serial.print(" "); Serial.print(avg_greenB); Serial.print(" "); Serial.print(avg_blueB); Serial.print(" "); Serial.print(avg_greenS); Serial.print(" "); Serial.print(avg_blueS); Serial.print(" ");Serial.print("REND");Serial.println(" ");
|
||||||
|
|
||||||
|
delay(100);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void startTask1() {
|
||||||
|
Serial.println("#Buffer Started");
|
||||||
|
setOutput(1, GAIN_1, 1, 0);
|
||||||
|
setOutput(0, GAIN_1, 1, green_dac);
|
||||||
|
memset (moving_average_array, 0, 10);
|
||||||
|
temp_counter = 0;
|
||||||
|
intensity_storage = 0;
|
||||||
|
float f = ADS.toVoltage(1); // voltage factor
|
||||||
|
for (int i = 0; i < green_samples + green_stable_time; i += 1)
|
||||||
|
{
|
||||||
|
|
||||||
|
int16_t val_0 = ADS.readADC(0);
|
||||||
|
int16_t val_1 = ADS.readADC(1);
|
||||||
|
int16_t val_2 = ADS.readADC(2);
|
||||||
|
int16_t val_3 = ADS.readADC(3);
|
||||||
|
moving_average_array[i % 10] = val_1;
|
||||||
|
for (int j = 0; j < 10; j++)
|
||||||
|
{
|
||||||
|
sorting_array[j] = moving_average_array[j];
|
||||||
|
}
|
||||||
|
if (i >= green_stable_time)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < 6; j++)
|
||||||
|
{
|
||||||
|
for (int k = 0; k < (9 - j); k++)
|
||||||
|
{
|
||||||
|
if (sorting_array[k] > sorting_array[k + 1])
|
||||||
|
{
|
||||||
|
temp_sort = sorting_array[k];
|
||||||
|
sorting_array[k] = sorting_array[k + 1];
|
||||||
|
sorting_array[k + 1] = temp_sort;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
moving_average = (sorting_array[4] / 2) + (sorting_array[5] / 2);
|
||||||
|
if ((val_1 > (moving_average * 0.9)) and (val_1 < (moving_average * 1.1)))
|
||||||
|
{
|
||||||
|
intensity_storage += val_1;
|
||||||
|
temp_counter++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (intensity_display == 1)
|
||||||
|
{
|
||||||
|
// Serial.print("DAC_value : "); Serial.print(i); Serial.print('\t'); Serial.print('\t'); Serial.print("Green_Resistor_drop: "); Serial.print(val_2);
|
||||||
|
// Serial.print('\t'); Serial.print('\t'); Serial.print("PD_output: "); Serial.print(val_1); Serial.print('\t'); Serial.print('\t'); Serial.print("PD_2X_output: "); Serial.println(val_0);
|
||||||
|
}
|
||||||
|
if (plotter == 1)
|
||||||
|
{
|
||||||
|
Serial.println(val_1);
|
||||||
|
}
|
||||||
|
//delay(200);
|
||||||
|
}
|
||||||
|
avg_greenB1 = intensity_storage / temp_counter;
|
||||||
|
delay(500);
|
||||||
|
|
||||||
|
setOutput(0, GAIN_1, 1, 0);
|
||||||
|
setOutput(1, GAIN_1, 1, blue_dac);
|
||||||
|
memset (moving_average_array, 0, 10);
|
||||||
|
temp_counter = 0;
|
||||||
|
intensity_storage = 0;
|
||||||
|
for (int i = 0; i < blue_samples + blue_stable_time; i += 1)
|
||||||
|
{
|
||||||
|
|
||||||
|
int16_t val_0 = ADS.readADC(0);
|
||||||
|
int16_t val_1 = ADS.readADC(1);
|
||||||
|
int16_t val_2 = ADS.readADC(2);
|
||||||
|
int16_t val_3 = ADS.readADC(3);
|
||||||
|
moving_average_array[i % 10] = val_1;
|
||||||
|
//Serial.println(moving_average_array[0]);
|
||||||
|
for (int j = 0; j < 10; j++)
|
||||||
|
{
|
||||||
|
sorting_array[j] = moving_average_array[j];
|
||||||
|
}
|
||||||
|
//Serial.println(sorting_array[0]);
|
||||||
|
if (i >= blue_stable_time)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < 6; j++)
|
||||||
|
{
|
||||||
|
for (int k = 0; k < (9 - j); k++)
|
||||||
|
{
|
||||||
|
if (sorting_array[k] > sorting_array[k + 1])
|
||||||
|
{
|
||||||
|
temp_sort = sorting_array[k];
|
||||||
|
sorting_array[k] = sorting_array[k + 1];
|
||||||
|
sorting_array[k + 1] = temp_sort;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
moving_average = (sorting_array[4] / 2) + (sorting_array[5] / 2);
|
||||||
|
if ((val_1 > (moving_average * 0.9)) and (val_1 < (moving_average * 1.1)))
|
||||||
|
{
|
||||||
|
intensity_storage += val_1;
|
||||||
|
|
||||||
|
temp_counter++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (intensity_display == 1)
|
||||||
|
{
|
||||||
|
// Serial.print("DAC_value : "); Serial.print(i); Serial.print('\t'); Serial.print('\t'); Serial.print("Blue_Resistor_drop: "); Serial.print(val_3);
|
||||||
|
// Serial.print('\t'); Serial.print('\t'); Serial.print("PD_output: "); Serial.print(val_1); Serial.print('\t'); Serial.print('\t'); Serial.print("PD_2X_output: "); Serial.println(val_0);
|
||||||
|
}
|
||||||
|
if (plotter == 1)
|
||||||
|
{
|
||||||
|
Serial.println(val_1);
|
||||||
|
}
|
||||||
|
//delay(200);
|
||||||
|
}
|
||||||
|
avg_blueB1 = intensity_storage / temp_counter;
|
||||||
|
|
||||||
|
setOutput(0, GAIN_1, 1, 0);
|
||||||
|
setOutput(1, GAIN_1, 1, 0);
|
||||||
|
delay (100);
|
||||||
|
|
||||||
|
setOutput(1, GAIN_1, 1, 0);
|
||||||
|
setOutput(0, GAIN_1, 1, green_dac);
|
||||||
|
memset (moving_average_array, 0, 10);
|
||||||
|
temp_counter = 0;
|
||||||
|
intensity_storage = 0;
|
||||||
|
f = ADS.toVoltage(1); // voltage factor
|
||||||
|
for (int i = 0; i < green_samples + green_stable_time; i += 1)
|
||||||
|
{
|
||||||
|
|
||||||
|
int16_t val_0 = ADS.readADC(0);
|
||||||
|
int16_t val_1 = ADS.readADC(1);
|
||||||
|
int16_t val_2 = ADS.readADC(2);
|
||||||
|
int16_t val_3 = ADS.readADC(3);
|
||||||
|
moving_average_array[i % 10] = val_1;
|
||||||
|
for (int j = 0; j < 10; j++)
|
||||||
|
{
|
||||||
|
sorting_array[j] = moving_average_array[j];
|
||||||
|
}
|
||||||
|
if (i >= green_stable_time)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < 6; j++)
|
||||||
|
{
|
||||||
|
for (int k = 0; k < (9 - j); k++)
|
||||||
|
{
|
||||||
|
if (sorting_array[k] > sorting_array[k + 1])
|
||||||
|
{
|
||||||
|
temp_sort = sorting_array[k];
|
||||||
|
sorting_array[k] = sorting_array[k + 1];
|
||||||
|
sorting_array[k + 1] = temp_sort;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
moving_average = (sorting_array[4] / 2) + (sorting_array[5] / 2);
|
||||||
|
if ((val_1 > (moving_average * 0.9)) and (val_1 < (moving_average * 1.1)))
|
||||||
|
{
|
||||||
|
intensity_storage += val_1;
|
||||||
|
temp_counter++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (intensity_display == 1)
|
||||||
|
{
|
||||||
|
// Serial.print("DAC_value : "); Serial.print(i); Serial.print('\t'); Serial.print('\t'); Serial.print("Green_Resistor_drop: "); Serial.print(val_2);
|
||||||
|
// Serial.print('\t'); Serial.print('\t'); Serial.print("PD_output: "); Serial.print(val_1); Serial.print('\t'); Serial.print('\t'); Serial.print("PD_2X_output: "); Serial.println(val_0);
|
||||||
|
}
|
||||||
|
if (plotter == 1)
|
||||||
|
{
|
||||||
|
Serial.println(val_1);
|
||||||
|
}
|
||||||
|
//delay(200);
|
||||||
|
}
|
||||||
|
avg_greenB2 = intensity_storage / temp_counter;
|
||||||
|
delay(500);
|
||||||
|
|
||||||
|
setOutput(0, GAIN_1, 1, 0);
|
||||||
|
setOutput(1, GAIN_1, 1, blue_dac);
|
||||||
|
memset (moving_average_array, 0, 10);
|
||||||
|
temp_counter = 0;
|
||||||
|
intensity_storage = 0;
|
||||||
|
for (int i = 0; i < blue_samples + blue_stable_time; i += 1)
|
||||||
|
{
|
||||||
|
|
||||||
|
int16_t val_0 = ADS.readADC(0);
|
||||||
|
int16_t val_1 = ADS.readADC(1);
|
||||||
|
int16_t val_2 = ADS.readADC(2);
|
||||||
|
int16_t val_3 = ADS.readADC(3);
|
||||||
|
moving_average_array[i % 10] = val_1;
|
||||||
|
//Serial.println(moving_average_array[0]);
|
||||||
|
for (int j = 0; j < 10; j++)
|
||||||
|
{
|
||||||
|
sorting_array[j] = moving_average_array[j];
|
||||||
|
}
|
||||||
|
//Serial.println(sorting_array[0]);
|
||||||
|
if (i >= blue_stable_time)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < 6; j++)
|
||||||
|
{
|
||||||
|
for (int k = 0; k < (9 - j); k++)
|
||||||
|
{
|
||||||
|
if (sorting_array[k] > sorting_array[k + 1])
|
||||||
|
{
|
||||||
|
temp_sort = sorting_array[k];
|
||||||
|
sorting_array[k] = sorting_array[k + 1];
|
||||||
|
sorting_array[k + 1] = temp_sort;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
moving_average = (sorting_array[4] / 2) + (sorting_array[5] / 2);
|
||||||
|
if ((val_1 > (moving_average * 0.9)) and (val_1 < (moving_average * 1.1)))
|
||||||
|
{
|
||||||
|
intensity_storage += val_1;
|
||||||
|
|
||||||
|
temp_counter++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (intensity_display == 1)
|
||||||
|
{
|
||||||
|
// Serial.print("DAC_value : "); Serial.print(i); Serial.print('\t'); Serial.print('\t'); Serial.print("Blue_Resistor_drop: "); Serial.print(val_3);
|
||||||
|
// Serial.print('\t'); Serial.print('\t'); Serial.print("PD_output: "); Serial.print(val_1); Serial.print('\t'); Serial.print('\t'); Serial.print("PD_2X_output: "); Serial.println(val_0);
|
||||||
|
}
|
||||||
|
if (plotter == 1)
|
||||||
|
{
|
||||||
|
Serial.println(val_1);
|
||||||
|
}
|
||||||
|
//delay(200);
|
||||||
|
}
|
||||||
|
avg_blueB2 = intensity_storage / temp_counter;
|
||||||
|
|
||||||
|
setOutput(0, GAIN_1, 1, 0);
|
||||||
|
setOutput(1, GAIN_1, 1, 0);
|
||||||
|
delay (100);
|
||||||
|
setOutput(1, GAIN_1, 1, 0);
|
||||||
|
setOutput(0, GAIN_1, 1, green_dac);
|
||||||
|
memset (moving_average_array, 0, 10);
|
||||||
|
temp_counter = 0;
|
||||||
|
intensity_storage = 0;
|
||||||
|
f = ADS.toVoltage(1); // voltage factor
|
||||||
|
for (int i = 0; i < green_samples + green_stable_time; i += 1)
|
||||||
|
{
|
||||||
|
|
||||||
|
int16_t val_0 = ADS.readADC(0);
|
||||||
|
int16_t val_1 = ADS.readADC(1);
|
||||||
|
int16_t val_2 = ADS.readADC(2);
|
||||||
|
int16_t val_3 = ADS.readADC(3);
|
||||||
|
moving_average_array[i % 10] = val_1;
|
||||||
|
for (int j = 0; j < 10; j++)
|
||||||
|
{
|
||||||
|
sorting_array[j] = moving_average_array[j];
|
||||||
|
}
|
||||||
|
if (i >= green_stable_time)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < 6; j++)
|
||||||
|
{
|
||||||
|
for (int k = 0; k < (9 - j); k++)
|
||||||
|
{
|
||||||
|
if (sorting_array[k] > sorting_array[k + 1])
|
||||||
|
{
|
||||||
|
temp_sort = sorting_array[k];
|
||||||
|
sorting_array[k] = sorting_array[k + 1];
|
||||||
|
sorting_array[k + 1] = temp_sort;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
moving_average = (sorting_array[4] / 2) + (sorting_array[5] / 2);
|
||||||
|
if ((val_1 > (moving_average * 0.9)) and (val_1 < (moving_average * 1.1)))
|
||||||
|
{
|
||||||
|
intensity_storage += val_1;
|
||||||
|
temp_counter++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (intensity_display == 1)
|
||||||
|
{
|
||||||
|
// Serial.print("DAC_value : "); Serial.print(i); Serial.print('\t'); Serial.print('\t'); Serial.print("Green_Resistor_drop: "); Serial.print(val_2);
|
||||||
|
// Serial.print('\t'); Serial.print('\t'); Serial.print("PD_output: "); Serial.print(val_1); Serial.print('\t'); Serial.print('\t'); Serial.print("PD_2X_output: "); Serial.println(val_0);
|
||||||
|
}
|
||||||
|
if (plotter == 1)
|
||||||
|
{
|
||||||
|
Serial.println(val_1);
|
||||||
|
}
|
||||||
|
//delay(200);
|
||||||
|
}
|
||||||
|
avg_greenB3 = intensity_storage / temp_counter;
|
||||||
|
delay(500);
|
||||||
|
|
||||||
|
setOutput(0, GAIN_1, 1, 0);
|
||||||
|
setOutput(1, GAIN_1, 1, blue_dac);
|
||||||
|
memset (moving_average_array, 0, 10);
|
||||||
|
temp_counter = 0;
|
||||||
|
intensity_storage = 0;
|
||||||
|
for (int i = 0; i < blue_samples + blue_stable_time; i += 1)
|
||||||
|
{
|
||||||
|
|
||||||
|
int16_t val_0 = ADS.readADC(0);
|
||||||
|
int16_t val_1 = ADS.readADC(1);
|
||||||
|
int16_t val_2 = ADS.readADC(2);
|
||||||
|
int16_t val_3 = ADS.readADC(3);
|
||||||
|
moving_average_array[i % 10] = val_1;
|
||||||
|
//Serial.println(moving_average_array[0]);
|
||||||
|
for (int j = 0; j < 10; j++)
|
||||||
|
{
|
||||||
|
sorting_array[j] = moving_average_array[j];
|
||||||
|
}
|
||||||
|
//Serial.println(sorting_array[0]);
|
||||||
|
if (i >= blue_stable_time)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < 6; j++)
|
||||||
|
{
|
||||||
|
for (int k = 0; k < (9 - j); k++)
|
||||||
|
{
|
||||||
|
if (sorting_array[k] > sorting_array[k + 1])
|
||||||
|
{
|
||||||
|
temp_sort = sorting_array[k];
|
||||||
|
sorting_array[k] = sorting_array[k + 1];
|
||||||
|
sorting_array[k + 1] = temp_sort;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
moving_average = (sorting_array[4] / 2) + (sorting_array[5] / 2);
|
||||||
|
if ((val_1 > (moving_average * 0.9)) and (val_1 < (moving_average * 1.1)))
|
||||||
|
{
|
||||||
|
intensity_storage += val_1;
|
||||||
|
|
||||||
|
temp_counter++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (intensity_display == 1)
|
||||||
|
{
|
||||||
|
// Serial.print("DAC_value : "); Serial.print(i); Serial.print('\t'); Serial.print('\t'); Serial.print("Blue_Resistor_drop: "); Serial.print(val_3);
|
||||||
|
// Serial.print('\t'); Serial.print('\t'); Serial.print("PD_output: "); Serial.print(val_1); Serial.print('\t'); Serial.print('\t'); Serial.print("PD_2X_output: "); Serial.println(val_0);
|
||||||
|
}
|
||||||
|
if (plotter == 1)
|
||||||
|
{
|
||||||
|
Serial.println(val_1);
|
||||||
|
}
|
||||||
|
//delay(200);
|
||||||
|
}
|
||||||
|
avg_blueB3 = intensity_storage / temp_counter;
|
||||||
|
delay(100);
|
||||||
|
setOutput(0, GAIN_1, 1, 0);
|
||||||
|
setOutput(1, GAIN_1, 1, 0);
|
||||||
|
avg_blueB = (avg_blueB1 + avg_blueB2 + avg_blueB3) / 3;
|
||||||
|
avg_greenB = (avg_greenB1 + avg_greenB2 + avg_greenB3) / 3;
|
||||||
|
Serial.print("ok Green B Intensity: "); Serial.println(avg_greenB);
|
||||||
|
Serial.print("ok Blue B Intensity: "); Serial.println(avg_blueB);
|
||||||
|
Serial.println("#Buffer Completed");
|
||||||
|
Serial.println("#Place sample");
|
||||||
|
delay(200);
|
||||||
|
|
||||||
|
}
|
||||||
|
void startTask2() {
|
||||||
|
Serial.println("#Sample started");
|
||||||
|
setOutput(1, GAIN_1, 1, 0);
|
||||||
|
setOutput(0, GAIN_1, 1, green_dac);
|
||||||
|
memset (moving_average_array, 0, 10);
|
||||||
|
temp_counter = 0;
|
||||||
|
intensity_storage = 0;
|
||||||
|
float f = ADS.toVoltage(1); // voltage factor
|
||||||
|
for (int i = 0; i < green_samples + green_stable_time; i += 1)
|
||||||
|
{
|
||||||
|
|
||||||
|
int16_t val_0 = ADS.readADC(0);
|
||||||
|
int16_t val_1 = ADS.readADC(1);
|
||||||
|
int16_t val_2 = ADS.readADC(2);
|
||||||
|
int16_t val_3 = ADS.readADC(3);
|
||||||
|
moving_average_array[i % 10] = val_1;
|
||||||
|
for (int j = 0; j < 10; j++)
|
||||||
|
{
|
||||||
|
sorting_array[j] = moving_average_array[j];
|
||||||
|
}
|
||||||
|
if (i >= green_stable_time)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < 6; j++)
|
||||||
|
{
|
||||||
|
for (int k = 0; k < (9 - j); k++)
|
||||||
|
{
|
||||||
|
if (sorting_array[k] > sorting_array[k + 1])
|
||||||
|
{
|
||||||
|
temp_sort = sorting_array[k];
|
||||||
|
sorting_array[k] = sorting_array[k + 1];
|
||||||
|
sorting_array[k + 1] = temp_sort;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
moving_average = (sorting_array[4] / 2) + (sorting_array[5] / 2);
|
||||||
|
if ((val_1 > (moving_average * 0.9)) and (val_1 < (moving_average * 1.1)))
|
||||||
|
{
|
||||||
|
intensity_storage += val_1;
|
||||||
|
temp_counter++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (intensity_display == 1)
|
||||||
|
{
|
||||||
|
// Serial.print("DAC_value : "); Serial.print(i); Serial.print('\t'); Serial.print('\t'); Serial.print("Green_Resistor_drop: "); Serial.print(val_2);
|
||||||
|
// Serial.print('\t'); Serial.print('\t'); Serial.print("PD_output: "); Serial.print(val_1); Serial.print('\t'); Serial.print('\t'); Serial.print("PD_2X_output: "); Serial.println(val_0);
|
||||||
|
}
|
||||||
|
if (plotter == 1)
|
||||||
|
{
|
||||||
|
Serial.println(val_1);
|
||||||
|
}
|
||||||
|
//delay(200);
|
||||||
|
}
|
||||||
|
avg_greenS1 = intensity_storage / temp_counter;
|
||||||
|
delay(500);
|
||||||
|
|
||||||
|
setOutput(0, GAIN_1, 1, 0);
|
||||||
|
setOutput(1, GAIN_1, 1, blue_dac);
|
||||||
|
memset (moving_average_array, 0, 10);
|
||||||
|
temp_counter = 0;
|
||||||
|
intensity_storage = 0;
|
||||||
|
for (int i = 0; i < blue_samples + blue_stable_time; i += 1)
|
||||||
|
{
|
||||||
|
|
||||||
|
int16_t val_0 = ADS.readADC(0);
|
||||||
|
int16_t val_1 = ADS.readADC(1);
|
||||||
|
int16_t val_2 = ADS.readADC(2);
|
||||||
|
int16_t val_3 = ADS.readADC(3);
|
||||||
|
moving_average_array[i % 10] = val_1;
|
||||||
|
//Serial.println(moving_average_array[0]);
|
||||||
|
for (int j = 0; j < 10; j++)
|
||||||
|
{
|
||||||
|
sorting_array[j] = moving_average_array[j];
|
||||||
|
}
|
||||||
|
//Serial.println(sorting_array[0]);
|
||||||
|
if (i >= blue_stable_time)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < 6; j++)
|
||||||
|
{
|
||||||
|
for (int k = 0; k < (9 - j); k++)
|
||||||
|
{
|
||||||
|
if (sorting_array[k] > sorting_array[k + 1])
|
||||||
|
{
|
||||||
|
temp_sort = sorting_array[k];
|
||||||
|
sorting_array[k] = sorting_array[k + 1];
|
||||||
|
sorting_array[k + 1] = temp_sort;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
moving_average = (sorting_array[4] / 2) + (sorting_array[5] / 2);
|
||||||
|
if ((val_1 > (moving_average * 0.9)) and (val_1 < (moving_average * 1.1)))
|
||||||
|
{
|
||||||
|
intensity_storage += val_1;
|
||||||
|
|
||||||
|
temp_counter++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (intensity_display == 1)
|
||||||
|
{
|
||||||
|
// Serial.print("DAC_value : "); Serial.print(i); Serial.print('\t'); Serial.print('\t'); Serial.print("Blue_Resistor_drop: "); Serial.print(val_3);
|
||||||
|
// Serial.print('\t'); Serial.print('\t'); Serial.print("PD_output: "); Serial.print(val_1); Serial.print('\t'); Serial.print('\t'); Serial.print("PD_2X_output: "); Serial.println(val_0);
|
||||||
|
}
|
||||||
|
if (plotter == 1)
|
||||||
|
{
|
||||||
|
Serial.println(val_1);
|
||||||
|
}
|
||||||
|
//delay(200);
|
||||||
|
}
|
||||||
|
avg_blueS1 = intensity_storage / temp_counter;
|
||||||
|
|
||||||
|
setOutput(0, GAIN_1, 1, 0);
|
||||||
|
setOutput(1, GAIN_1, 1, 0);
|
||||||
|
delay(100);
|
||||||
|
setOutput(1, GAIN_1, 1, 0);
|
||||||
|
setOutput(0, GAIN_1, 1, green_dac);
|
||||||
|
memset (moving_average_array, 0, 10);
|
||||||
|
temp_counter = 0;
|
||||||
|
intensity_storage = 0;
|
||||||
|
f = ADS.toVoltage(1); // voltage factor
|
||||||
|
for (int i = 0; i < green_samples + green_stable_time; i += 1)
|
||||||
|
{
|
||||||
|
|
||||||
|
int16_t val_0 = ADS.readADC(0);
|
||||||
|
int16_t val_1 = ADS.readADC(1);
|
||||||
|
int16_t val_2 = ADS.readADC(2);
|
||||||
|
int16_t val_3 = ADS.readADC(3);
|
||||||
|
moving_average_array[i % 10] = val_1;
|
||||||
|
for (int j = 0; j < 10; j++)
|
||||||
|
{
|
||||||
|
sorting_array[j] = moving_average_array[j];
|
||||||
|
}
|
||||||
|
if (i >= green_stable_time)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < 6; j++)
|
||||||
|
{
|
||||||
|
for (int k = 0; k < (9 - j); k++)
|
||||||
|
{
|
||||||
|
if (sorting_array[k] > sorting_array[k + 1])
|
||||||
|
{
|
||||||
|
temp_sort = sorting_array[k];
|
||||||
|
sorting_array[k] = sorting_array[k + 1];
|
||||||
|
sorting_array[k + 1] = temp_sort;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
moving_average = (sorting_array[4] / 2) + (sorting_array[5] / 2);
|
||||||
|
if ((val_1 > (moving_average * 0.9)) and (val_1 < (moving_average * 1.1)))
|
||||||
|
{
|
||||||
|
intensity_storage += val_1;
|
||||||
|
temp_counter++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (intensity_display == 1)
|
||||||
|
{
|
||||||
|
// Serial.print("DAC_value : "); Serial.print(i); Serial.print('\t'); Serial.print('\t'); Serial.print("Green_Resistor_drop: "); Serial.print(val_2);
|
||||||
|
// Serial.print('\t'); Serial.print('\t'); Serial.print("PD_output: "); Serial.print(val_1); Serial.print('\t'); Serial.print('\t'); Serial.print("PD_2X_output: "); Serial.println(val_0);
|
||||||
|
}
|
||||||
|
if (plotter == 1)
|
||||||
|
{
|
||||||
|
Serial.println(val_1);
|
||||||
|
}
|
||||||
|
//delay(200);
|
||||||
|
}
|
||||||
|
avg_greenS2 = intensity_storage / temp_counter;
|
||||||
|
delay(500);
|
||||||
|
|
||||||
|
setOutput(0, GAIN_1, 1, 0);
|
||||||
|
setOutput(1, GAIN_1, 1, blue_dac);
|
||||||
|
memset (moving_average_array, 0, 10);
|
||||||
|
temp_counter = 0;
|
||||||
|
intensity_storage = 0;
|
||||||
|
for (int i = 0; i < blue_samples + blue_stable_time; i += 1)
|
||||||
|
{
|
||||||
|
|
||||||
|
int16_t val_0 = ADS.readADC(0);
|
||||||
|
int16_t val_1 = ADS.readADC(1);
|
||||||
|
int16_t val_2 = ADS.readADC(2);
|
||||||
|
int16_t val_3 = ADS.readADC(3);
|
||||||
|
moving_average_array[i % 10] = val_1;
|
||||||
|
//Serial.println(moving_average_array[0]);
|
||||||
|
for (int j = 0; j < 10; j++)
|
||||||
|
{
|
||||||
|
sorting_array[j] = moving_average_array[j];
|
||||||
|
}
|
||||||
|
//Serial.println(sorting_array[0]);
|
||||||
|
if (i >= blue_stable_time)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < 6; j++)
|
||||||
|
{
|
||||||
|
for (int k = 0; k < (9 - j); k++)
|
||||||
|
{
|
||||||
|
if (sorting_array[k] > sorting_array[k + 1])
|
||||||
|
{
|
||||||
|
temp_sort = sorting_array[k];
|
||||||
|
sorting_array[k] = sorting_array[k + 1];
|
||||||
|
sorting_array[k + 1] = temp_sort;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
moving_average = (sorting_array[4] / 2) + (sorting_array[5] / 2);
|
||||||
|
if ((val_1 > (moving_average * 0.9)) and (val_1 < (moving_average * 1.1)))
|
||||||
|
{
|
||||||
|
intensity_storage += val_1;
|
||||||
|
|
||||||
|
temp_counter++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (intensity_display == 1)
|
||||||
|
{
|
||||||
|
// Serial.print("DAC_value : "); Serial.print(i); Serial.print('\t'); Serial.print('\t'); Serial.print("Blue_Resistor_drop: "); Serial.print(val_3);
|
||||||
|
// Serial.print('\t'); Serial.print('\t'); Serial.print("PD_output: "); Serial.print(val_1); Serial.print('\t'); Serial.print('\t'); Serial.print("PD_2X_output: "); Serial.println(val_0);
|
||||||
|
}
|
||||||
|
if (plotter == 1)
|
||||||
|
{
|
||||||
|
Serial.println(val_1);
|
||||||
|
}
|
||||||
|
//delay(200);
|
||||||
|
}
|
||||||
|
avg_blueS2 = intensity_storage / temp_counter;
|
||||||
|
|
||||||
|
setOutput(0, GAIN_1, 1, 0);
|
||||||
|
setOutput(1, GAIN_1, 1, 0);
|
||||||
|
delay(100);
|
||||||
|
setOutput(1, GAIN_1, 1, 0);
|
||||||
|
setOutput(0, GAIN_1, 1, green_dac);
|
||||||
|
memset (moving_average_array, 0, 10);
|
||||||
|
temp_counter = 0;
|
||||||
|
intensity_storage = 0;
|
||||||
|
f = ADS.toVoltage(1); // voltage factor
|
||||||
|
for (int i = 0; i < green_samples + green_stable_time; i += 1)
|
||||||
|
{
|
||||||
|
|
||||||
|
int16_t val_0 = ADS.readADC(0);
|
||||||
|
int16_t val_1 = ADS.readADC(1);
|
||||||
|
int16_t val_2 = ADS.readADC(2);
|
||||||
|
int16_t val_3 = ADS.readADC(3);
|
||||||
|
moving_average_array[i % 10] = val_1;
|
||||||
|
for (int j = 0; j < 10; j++)
|
||||||
|
{
|
||||||
|
sorting_array[j] = moving_average_array[j];
|
||||||
|
}
|
||||||
|
if (i >= green_stable_time)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < 6; j++)
|
||||||
|
{
|
||||||
|
for (int k = 0; k < (9 - j); k++)
|
||||||
|
{
|
||||||
|
if (sorting_array[k] > sorting_array[k + 1])
|
||||||
|
{
|
||||||
|
temp_sort = sorting_array[k];
|
||||||
|
sorting_array[k] = sorting_array[k + 1];
|
||||||
|
sorting_array[k + 1] = temp_sort;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
moving_average = (sorting_array[4] / 2) + (sorting_array[5] / 2);
|
||||||
|
if ((val_1 > (moving_average * 0.9)) and (val_1 < (moving_average * 1.1)))
|
||||||
|
{
|
||||||
|
intensity_storage += val_1;
|
||||||
|
temp_counter++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (intensity_display == 1)
|
||||||
|
{
|
||||||
|
// Serial.print("DAC_value : "); Serial.print(i); Serial.print('\t'); Serial.print('\t'); Serial.print("Green_Resistor_drop: "); Serial.print(val_2);
|
||||||
|
// Serial.print('\t'); Serial.print('\t'); Serial.print("PD_output: "); Serial.print(val_1); Serial.print('\t'); Serial.print('\t'); Serial.print("PD_2X_output: "); Serial.println(val_0);
|
||||||
|
}
|
||||||
|
if (plotter == 1)
|
||||||
|
{
|
||||||
|
Serial.println(val_1);
|
||||||
|
}
|
||||||
|
//delay(200);
|
||||||
|
}
|
||||||
|
avg_greenS3 = intensity_storage / temp_counter;
|
||||||
|
delay(500);
|
||||||
|
|
||||||
|
setOutput(0, GAIN_1, 1, 0);
|
||||||
|
setOutput(1, GAIN_1, 1, blue_dac);
|
||||||
|
memset (moving_average_array, 0, 10);
|
||||||
|
temp_counter = 0;
|
||||||
|
intensity_storage = 0;
|
||||||
|
for (int i = 0; i < blue_samples + blue_stable_time; i += 1)
|
||||||
|
{
|
||||||
|
|
||||||
|
int16_t val_0 = ADS.readADC(0);
|
||||||
|
int16_t val_1 = ADS.readADC(1);
|
||||||
|
int16_t val_2 = ADS.readADC(2);
|
||||||
|
int16_t val_3 = ADS.readADC(3);
|
||||||
|
moving_average_array[i % 10] = val_1;
|
||||||
|
//Serial.println(moving_average_array[0]);
|
||||||
|
for (int j = 0; j < 10; j++)
|
||||||
|
{
|
||||||
|
sorting_array[j] = moving_average_array[j];
|
||||||
|
}
|
||||||
|
//Serial.println(sorting_array[0]);
|
||||||
|
if (i >= blue_stable_time)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < 6; j++)
|
||||||
|
{
|
||||||
|
for (int k = 0; k < (9 - j); k++)
|
||||||
|
{
|
||||||
|
if (sorting_array[k] > sorting_array[k + 1])
|
||||||
|
{
|
||||||
|
temp_sort = sorting_array[k];
|
||||||
|
sorting_array[k] = sorting_array[k + 1];
|
||||||
|
sorting_array[k + 1] = temp_sort;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
moving_average = (sorting_array[4] / 2) + (sorting_array[5] / 2);
|
||||||
|
if ((val_1 > (moving_average * 0.9)) and (val_1 < (moving_average * 1.1)))
|
||||||
|
{
|
||||||
|
intensity_storage += val_1;
|
||||||
|
|
||||||
|
temp_counter++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (intensity_display == 1)
|
||||||
|
{
|
||||||
|
// Serial.print("DAC_value : "); Serial.print(i); Serial.print('\t'); Serial.print('\t'); Serial.print("Blue_Resistor_drop: "); Serial.print(val_3);
|
||||||
|
// Serial.print('\t'); Serial.print('\t'); Serial.print("PD_output: "); Serial.print(val_1); Serial.print('\t'); Serial.print('\t'); Serial.print("PD_2X_output: "); Serial.println(val_0);
|
||||||
|
}
|
||||||
|
if (plotter == 1)
|
||||||
|
{
|
||||||
|
Serial.println(val_1);
|
||||||
|
}
|
||||||
|
//delay(200);
|
||||||
|
}
|
||||||
|
avg_blueS3 = intensity_storage / temp_counter;
|
||||||
|
|
||||||
|
setOutput(0, GAIN_1, 1, 0);
|
||||||
|
setOutput(1, GAIN_1, 1, 0);
|
||||||
|
avg_greenS = (avg_greenS1 + avg_greenS2 + avg_greenS3) / 3;
|
||||||
|
avg_blueS = (avg_blueS1 + avg_blueS2 + avg_blueS3) / 3;
|
||||||
|
Serial.print("ok Green Intensity: "); Serial.println(avg_greenS);
|
||||||
|
Serial.print("ok Blue Intensity: "); Serial.println(avg_blueS);
|
||||||
|
Serial.println("#Sample Completed");
|
||||||
|
delay(300);
|
||||||
|
}
|
||||||
45
hemocube/hemocube_mock.ino
Normal file
45
hemocube/hemocube_mock.ino
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
void setup() {
|
||||||
|
// put your setup code here, to run once:
|
||||||
|
Serial.begin(115200);
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
// put your main code here, to run repeatedly:
|
||||||
|
|
||||||
|
Serial.println("SN:182829");
|
||||||
|
while (Serial.available() == 0) {} //wait for data available
|
||||||
|
String bufferCommand = Serial.readString(); //read until timeout
|
||||||
|
bufferCommand.trim(); // remove any \r \n whitespace at the end of the String
|
||||||
|
if (bufferCommand == "B") {
|
||||||
|
Serial.println("#Start Buffer");
|
||||||
|
delay(2000);
|
||||||
|
Serial.println("#Buffer Completed");
|
||||||
|
}
|
||||||
|
|
||||||
|
while (Serial.available() == 0) {} //wait for data available
|
||||||
|
String SampleCommand = Serial.readString(); //read until timeout
|
||||||
|
SampleCommand.trim(); // remove any \r \n whitespace at the end of the String
|
||||||
|
if (SampleCommand == "S") {
|
||||||
|
Serial.println("#Sample Started");
|
||||||
|
delay(2000);
|
||||||
|
Serial.println("#Sample Completed");
|
||||||
|
}
|
||||||
|
|
||||||
|
while (Serial.available() == 0) {} //wait for data available
|
||||||
|
String resultCommand = Serial.readString(); //read until timeout
|
||||||
|
resultCommand.trim(); // remove any \r \n whitespace at the end of the String
|
||||||
|
if (resultCommand == "P") {
|
||||||
|
delay(3000);
|
||||||
|
Serial.println("RESULT SN 18291 1937.23 2828.11 28211.20 121829.12 REND");
|
||||||
|
delay(15000);
|
||||||
|
}
|
||||||
|
|
||||||
|
// while (Serial.available() == 0) {} //wait for data available
|
||||||
|
// String resultCommand = Serial.readString(); //read until timeout
|
||||||
|
// resultCommand.trim(); // remove any \r \n whitespace at the end of the String
|
||||||
|
// if (resultCommand == "B") {
|
||||||
|
// delay(3000);
|
||||||
|
// Serial.println("ERROR 500 REND");
|
||||||
|
// delay(15000);
|
||||||
|
// }
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user