64 lines
1.5 KiB
C++
64 lines
1.5 KiB
C++
#include <Adafruit_NeoPixel.h>
|
|
#include <avr/power.h>
|
|
|
|
#define PIN_RX 10
|
|
#define PIN_TX 11
|
|
#define PIXELS 24
|
|
|
|
// Prepare two independent strips for rx data and tx data
|
|
Adafruit_NeoPixel strip_rx = Adafruit_NeoPixel(PIXELS, PIN_RX, NEO_GRB + NEO_KHZ800);
|
|
Adafruit_NeoPixel strip_tx = Adafruit_NeoPixel(PIXELS, PIN_TX, NEO_GRB + NEO_KHZ800);
|
|
|
|
void setup() {
|
|
// Initialize both strips to off
|
|
strip_rx.begin(); strip_rx.show();
|
|
strip_tx.begin(); strip_tx.show();
|
|
|
|
// Initialize serial port to 115200 baud
|
|
Serial.begin(115200);
|
|
}
|
|
|
|
void loop() {
|
|
if (Serial.available() >= 3) {
|
|
byte b = Serial.read();
|
|
if (b == 0xFF) {
|
|
// Read next two bytes as rx and tx rate
|
|
byte rxrate = Serial.read();
|
|
byte txrate = Serial.read();
|
|
|
|
if (rxrate <= 100 && txrate <= 100) {
|
|
showPercentage_rx(strip_rx.Color(0, 0, 255), rxrate);
|
|
showPercentage_tx(strip_tx.Color(255, 0, 0), txrate);
|
|
}
|
|
}
|
|
}
|
|
delay(10);
|
|
}
|
|
|
|
void showPercentage_tx(uint32_t c, uint8_t perc) {
|
|
char lastPixel = (PIXELS * perc) / 100;
|
|
char i = 0;
|
|
while(i < lastPixel) {
|
|
strip_tx.setPixelColor(i, c);
|
|
++i;
|
|
}
|
|
while (i < PIXELS) {
|
|
strip_tx.setPixelColor(i, 0);
|
|
++i;
|
|
}
|
|
strip_tx.show();
|
|
}
|
|
|
|
void showPercentage_rx(uint32_t c, uint8_t perc) {
|
|
char lastPixel = (PIXELS * perc) / 100;
|
|
char i = 0;
|
|
while(i < lastPixel) {
|
|
strip_rx.setPixelColor(i, c);
|
|
++i;
|
|
}
|
|
while (i < PIXELS) {
|
|
strip_rx.setPixelColor(i, 0);
|
|
++i;
|
|
}
|
|
strip_rx.show();
|
|
}
|