Here is the latest version:
#include "HX711.h"
#include <Adafruit_NeoPixel.h>
HX711 scale;
const int buttonPin = 5; // the number of the pushbutton pin
int buttonState = 0; // variable for reading the pushbutton status
#define PIXELS_PER_SEGMENT 4 // Number of LEDs in each Segment
#define PIXELS_DIGITS 3 // Number of connected Digits
#define PIXELS_PIN 2 // GPIO Pin
// scale pins
uint8_t dataPin = 4;
uint8_t clockPin = 5;
//scale
float w1, w2, previous = 0;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXELS_PER_SEGMENT * 7 * PIXELS_DIGITS, PIXELS_PIN, NEO_GRB + NEO_KHZ800);
//Pixel Arrangement
/*
a
f b
g
e c
d
*/
// Segment array
byte segments[7] = {
//abcdefg
0b0000001, // Segment g
0b0000100, // Segment e
0b0001000, // Segment d
0b0010000, // Segment c
0b0100000, // Segment b
0b1000000, // Segment a
0b0000010 // Segment f
};
//Digits array
byte digits[10] = {
//abcdefg
0b1111110, // 0
0b0110000, // 1
0b1101101, // 2
0b1111001, // 3
0b0110011, // 4
0b1011011, // 5
0b1011111, // 6
0b1110000, // 7
0b1111111, // 8
0b1110011 // 9
};
//Clear all the Pixels (possibly use with tare to reset leds)
void clearDisplay() {
for (int i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, strip.Color(0, 0, 0));
}
strip.show();
}
void setup() {
// initialize the LED display pin as an output:
pinMode(PIXELS_PIN, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
strip.begin();
Serial.begin(115200);
Serial.println(__FILE__);
Serial.print("HX711_LIB_VERSION: ");
Serial.println(HX711_LIB_VERSION);
Serial.println();
scale.begin(dataPin, clockPin);
Serial.print("UNITS: ");
Serial.println(scale.get_units(10));
// load cell factor 20 KG
// scale.set_scale(127.15);
// load cell factor 5 KG
scale.set_scale(420.0983); //calibrate scale
scale.tare();
Serial.print("UNITS: ");
Serial.println(scale.get_units(10));
}
void loop() {
// Tare button
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
// check if the pushbutton is pressed. If it is, the buttonState is HIGH:
if (buttonState == HIGH) {
// tare display to 000:
//void clearDisplay()
//scale.tare();
} else {
// do nothing
}
// scale
// read until stable
w1 = scale.get_units(10);
delay(100);
w2 = scale.get_units();
while (abs(w1 - w2) > 10)
{
w1 = w2;
w2 = scale.get_units();
delay(100);
}
Serial.print("UNITS: ");
Serial.print(w1);
if (w1 == 0)
{
Serial.println();
}
else
{
Serial.print("\t\tDELTA: ");
Serial.println(w1 - previous);
previous = w1;
}
delay(100);
//Neopixel strip (change for display)
disp_Digits(1000); // Show digits from 0-9 (DelayTime)
//disp_CountUP(500, 450); // Count numbers in Ascending order (NUMBER, DelayTime)
//disp_CountDOWN(500, 250); // Count numbers in Descending order (NUMBER, DelayTime)
}
void disp_Digits(int wait) {
clearDisplay();
for (int i = 0; i < 10; i++) {
for (int n = 0; n < PIXELS_DIGITS; n++) {
writeDigit(n, i);
}
strip.show();
delay(wait);
}
}
void disp_CountUP(int num, int wait) {
clearDisplay();
for (int i = 0; i <= num; i++) {
writeDigit(0, (i / 100) % 10);
writeDigit(1, (i / 10) % 10);
writeDigit(2, (i / 1) % 10);
strip.show();
delay(wait);
}
}
void disp_CountDOWN(int num, int wait) {
clearDisplay();
for (int i = num; i >= 0; i--) {
writeDigit(0, (i / 100) % 10);
writeDigit(1, (i / 10) % 10);
writeDigit(2, (i / 1) % 10);
strip.show();
delay(wait);
}
}
void writeDigit(int index, int val) {
byte digit = digits[val];
for (int i = 6; i >= 0; i--) {
int offset = index * (PIXELS_PER_SEGMENT * 7) + i * PIXELS_PER_SEGMENT;
uint32_t color;
if (digit & 0x01 != 0) {
if (val == 1) color = strip.Color(255, 0, 0);
if (val == 2) color = strip.Color(255, 0, 0);
if (val == 3) color = strip.Color(255, 0, 0);
if (val == 4) color = strip.Color(255, 0, 0);
if (val == 5) color = strip.Color(255, 0, 0);
if (val == 6) color = strip.Color(255, 0, 0);
if (val == 7) color = strip.Color(255, 0, 0);
if (val == 8) color = strip.Color(255, 0, 0);
if (val == 9) color = strip.Color(255, 0, 0);
if (val == 0) color = strip.Color(255, 0, 0);
}
else
color = strip.Color(0, 0, 0);
for (int j = offset; j < offset + PIXELS_PER_SEGMENT; j++) {
strip.setPixelColor(j, color);
}
digit = digit >> 1;
}
}
void writeSegment(int index, int val) {
byte seg = segments[val];
for (int i = 6; i >= 0; i--) {
int offset = index * (PIXELS_PER_SEGMENT * 7) + i * PIXELS_PER_SEGMENT;
uint32_t color;
if (seg & 0x01 != 0) {
if (val == 0) color = strip.Color(50, 0, 0);
if (val == 1) color = strip.Color(0, 50, 50);
if (val == 2) color = strip.Color(0, 50, 0);
if (val == 3) color = strip.Color(50, 0, 50);
if (val == 4) color = strip.Color(50, 50, 50);
if (val == 5) color = strip.Color(0, 0, 50);
if (val == 6) color = strip.Color(50, 50, 0);
}
else
color = strip.Color(0, 0, 0);
for (int j = offset; j < offset + PIXELS_PER_SEGMENT; j++) {
strip.setPixelColor(j, color);
}
seg = seg >> 1;
}
}