#include <Adafruit_NeoPixel.h>
//----------------------------------------------------------
// HARDWARE CONFIGURATION
//----------------------------------------------------------
// Adafruit_NeoPixel
#define LED_PIN 3 // LED pin num wired to Arduino NANO
#define NUM_LEDS 1 // Number of LEDs
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);
// ADC Hardware configure
#define NUM_ADC_READ 4
int adcPins[] = { A0, A1, A2, A3 };
//----------------------------------------------------------
// DECLARATIONS of VARIABLES, FUNCTIONS
//----------------------------------------------------------
int adc_values[NUM_ADC_READ]; // ADC buffer
int mapped_values[NUM_ADC_READ]; // Mapped buffer
int MAP_VAL_MAX = 255; // LED max value
char strBuf[64]; // for Logging
void setup() {
Serial.begin(115200);
Serial.print("ADC 10-bit (default)");
strip.begin(); // Initialize NeoPixel lib.
strip.show();
strip.setBrightness(50); // set brightness level (0-255).
Serial.println("NeoPixel Single LED Test");
}
void loop() {
int force_sum = 0;
// READ ADC 4ch
for (int i = 0; i < NUM_ADC_READ; i++) {
// read analog values
adc_values[i] = analogRead(adcPins[i]);
if(adc_values[i] < 3) // remove noise
adc_values[i] = 0;
// map and sum
mapped_values[i] = map(adc_values[i], 0, 1024, 0, MAP_VAL_MAX); // 0~1024 to 0~MAP_VAL_MAX(255)
force_sum += mapped_values[i];
}
// PRINT ADC VALUES
sprintf(strBuf, "%3d,%3d,%3d,%3d", mapped_values[0], mapped_values[1], mapped_values[2], mapped_values[3]);
Serial.println(strBuf);
// SHOW RGB LED
int r, g, b;
convForce2RGB(force_sum, r, g, b);
strip.setPixelColor(0, strip.Color(r, g, b)); // 0: LED index
strip.show(); // shows led color
delay(100); // removable
}
// CONVERSION FROM ADC VALUE TO RGB VALUES
// ADC(0~240) ==> R, G, B
void convForce2RGB(int force_val, int &r_val, int &g_val, int &b_val) {
if (240 < force_val)
force_val = 240;
/*
color rgb range : 0~240
blue : 0, 0, 240
green : 0, 240, 0
yellow : 240, 240, 0
orange : 240, 160, 0
red : 240, 0, 0
*/
if (force_val < 1) { // Zero
r_val = 0;
g_val = 0;
b_val = 0;
} else if ((1 <= force_val) && (force_val < 80)) { // Blue to Green
r_val = 0;
g_val = map(force_val, 0, 80, 0, 240); // 0 --> 240
b_val = map(force_val, 0, 80, 240, 0); // 240 --> 0
} else if ((80 <= force_val < 160) && (force_val < 160)) { // Green to Yellow
r_val = map(force_val, 80, 160, 0, 240); // 0 --> 240
g_val = 240;
b_val = 0;
} else if ((160 <= force_val) && (force_val < 240)) { // Yellow to Orange and Red
r_val = 240;
g_val = map(force_val, 160, 240, 240, 160); // 240 --> 0
b_val = 0;
} else { // Red
r_val = 240;
g_val = 0;
b_val = 0;
}
// print log
sprintf(strBuf, "force sum = %d, r=%3d, g=%3d, b=%3d \n", force_val, r_val, g_val, b_val);
Serial.println(strBuf);
}