add new led ring progress
This commit is contained in:
parent
7ea0d2200b
commit
f3df0b0d98
|
@ -12,18 +12,20 @@
|
|||
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
|
||||
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
|
||||
|
||||
void display_init();
|
||||
bool display_init();
|
||||
void display_update();
|
||||
|
||||
void display_init(){
|
||||
bool display_init(){
|
||||
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
|
||||
Serial.println(F("SSD1306 allocation failed"));
|
||||
return false;
|
||||
}
|
||||
display.clearDisplay();
|
||||
display.setTextSize(1); // Normal 1:1 pixel scale
|
||||
display.setTextColor(SSD1306_WHITE); // Draw white text
|
||||
display.setCursor(0,0); // Start at top-left corner
|
||||
display.display();
|
||||
return true;
|
||||
}
|
||||
|
||||
void display_update(){
|
||||
|
|
|
@ -17,27 +17,110 @@ Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRBW + NEO_KHZ800);
|
|||
unsigned long last_ledupdate=0;
|
||||
#define LEDUPDATEINTERVAL 100
|
||||
|
||||
uint8_t led_errorcount=0; //count led progress errors. used for delay at end if any errors occured
|
||||
|
||||
void led_dotcircle(unsigned long loopmillis);
|
||||
|
||||
void init_led() {
|
||||
strip.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
|
||||
strip.show(); // Turn OFF all pixels ASAP
|
||||
strip.setBrightness(BRIGHTNESS);
|
||||
}
|
||||
|
||||
void led_update(unsigned long loopmillis) {
|
||||
void led_testLEDSBlocking(){
|
||||
strip.clear();
|
||||
strip.show();
|
||||
delay(10);
|
||||
uint32_t color=strip.Color(0, 0, 0, 0);
|
||||
|
||||
for(int i=0; i<strip.numPixels()*4; i++) { // For each pixel in strip...
|
||||
switch(i/strip.numPixels()) {
|
||||
case 0:
|
||||
color=strip.Color(255, 0, 0, 0);
|
||||
break;
|
||||
case 1:
|
||||
color=strip.Color(0, 255, 0, 0);
|
||||
break;
|
||||
case 2:
|
||||
color=strip.Color(0, 0, 255, 0);
|
||||
break;
|
||||
case 3:
|
||||
color=strip.Color(0, 0, 0, 255);
|
||||
break;
|
||||
}
|
||||
strip.setPixelColor(i%strip.numPixels(), color);
|
||||
strip.show();
|
||||
delay(25);
|
||||
}
|
||||
strip.clear();
|
||||
strip.show();
|
||||
}
|
||||
|
||||
void led_simpeProgress(uint8_t progressID,uint8_t result){
|
||||
if (result!=1) {
|
||||
led_errorcount++;
|
||||
}
|
||||
uint32_t color=strip.Color(0, 0, 0, 0);
|
||||
switch(result) {
|
||||
case 0: //fail
|
||||
color=strip.Color(255, 0, 0, 0);
|
||||
break;
|
||||
case 1: //success
|
||||
color=strip.Color(0, 255, 0, 0);
|
||||
break;
|
||||
case 2: //warning
|
||||
color=strip.Color(127, 127, 0, 0);
|
||||
break;
|
||||
}
|
||||
strip.setPixelColor(progressID, color);
|
||||
strip.show();
|
||||
}
|
||||
|
||||
void led_simpleProgressWait() {
|
||||
if (led_errorcount>0) {
|
||||
delay(5000);
|
||||
}else{
|
||||
delay(100);
|
||||
}
|
||||
}
|
||||
|
||||
void led_update(unsigned long loopmillis,ESCSerialComm& escFront, ESCSerialComm& escRear) {
|
||||
if (loopmillis>last_ledupdate+LEDUPDATEINTERVAL) {
|
||||
last_ledupdate=loopmillis;
|
||||
uint32_t color=strip.Color(0, 0, 0, 255);
|
||||
uint32_t colorOff=strip.Color(30, 0, 0, 0);
|
||||
uint8_t position=(loopmillis/100)%strip.numPixels();
|
||||
for(int i=0; i<strip.numPixels(); i++) { // For each pixel in strip...
|
||||
if (i==position) {
|
||||
strip.setPixelColor(i, color); // Set pixel's color (in RAM)
|
||||
}else{
|
||||
strip.setPixelColor(i, colorOff); // Set pixel's color (in RAM)
|
||||
}
|
||||
}
|
||||
|
||||
float vbat=min(escRear.getFeedback_batVoltage(),escFront.getFeedback_batVoltage());
|
||||
|
||||
//led_dotcircle(loopmillis);
|
||||
led_voltage(loopmillis,vbat,3*12,4.2*12);
|
||||
strip.show(); // Update strip to match
|
||||
}
|
||||
}
|
||||
|
||||
void led_voltage(unsigned long loopmillis,float vbat,float vbat_min,float vbat_max) {
|
||||
uint32_t colorBG=strip.Color(0, 255, 0, 0);
|
||||
uint32_t colorEmpty=strip.Color(255, 0, 0, 0);
|
||||
uint8_t position=map( max(min(vbat,vbat_max),vbat_min) ,vbat_min,vbat_max, 0,strip.numPixels());
|
||||
for(int i=0; i<strip.numPixels(); i++) { // For each pixel in strip...
|
||||
uint8_t pp=i%strip.numPixels()+8; //Offset
|
||||
if (i<position) {
|
||||
strip.setPixelColor(pp, colorBG); // Set pixel's color (in RAM)
|
||||
}else{
|
||||
strip.setPixelColor(pp, colorEmpty); // Set pixel's color (in RAM)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void led_dotcircle(unsigned long loopmillis) {
|
||||
uint32_t color=strip.Color(0, 0, 0, 255);
|
||||
uint32_t colorOff=strip.Color(30, 0, 0, 0);
|
||||
uint8_t position=(loopmillis/100)%strip.numPixels();
|
||||
for(int i=0; i<strip.numPixels(); i++) { // For each pixel in strip...
|
||||
if (i==position) {
|
||||
strip.setPixelColor(i, color); // Set pixel's color (in RAM)
|
||||
}else{
|
||||
strip.setPixelColor(i, colorOff); // Set pixel's color (in RAM)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
|
@ -10,11 +10,11 @@
|
|||
boolean datalogging=true;
|
||||
String datalogging_filename="UNKNOWN.txt";
|
||||
|
||||
void initLogging();
|
||||
bool initLogging();
|
||||
void loggingLoop(unsigned long loopmillis,ESCSerialComm& escFront, ESCSerialComm& escRear);
|
||||
void writeLogComment(unsigned long time, String msg);
|
||||
|
||||
void initLogging() {
|
||||
bool initLogging() {
|
||||
Serial.print("Initializing SD card...");
|
||||
// see if the card is present and can be initialized:
|
||||
if (!SD.begin(SDCHIPSELECT)) {
|
||||
|
@ -22,6 +22,7 @@ void initLogging() {
|
|||
display.print(F("Fail!")); display.display();
|
||||
datalogging=false; //disable logging
|
||||
delay(1000);
|
||||
return false;
|
||||
}else{
|
||||
Serial.println("Card initialized.");
|
||||
display.print(F("LOG=")); display.display();
|
||||
|
@ -41,6 +42,7 @@ void initLogging() {
|
|||
display.print(datalogging_filename); display.display();
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -81,52 +81,62 @@ void setup()
|
|||
|
||||
|
||||
init_led();
|
||||
led_update(millis());
|
||||
led_testLEDSBlocking();
|
||||
|
||||
|
||||
delay(2000);
|
||||
Serial.println("Init Functions");
|
||||
led_update(millis());
|
||||
led_simpeProgress(0,1);
|
||||
|
||||
bool initResult=false;
|
||||
|
||||
initResult=display_init();
|
||||
led_simpeProgress(1,initResult);
|
||||
|
||||
|
||||
|
||||
display_init();
|
||||
led_update(millis());
|
||||
|
||||
initLogging();
|
||||
led_update(millis());
|
||||
initResult=initLogging();
|
||||
led_simpeProgress(2,initResult);
|
||||
|
||||
escFront.init();
|
||||
led_update(millis());
|
||||
led_simpeProgress(3,true);
|
||||
escRear.init();
|
||||
led_update(millis());
|
||||
led_simpeProgress(4,true);
|
||||
|
||||
delay(2000);
|
||||
Serial.println("Wait finished. Booting..");
|
||||
led_update(millis());
|
||||
led_simpeProgress(5,true);
|
||||
|
||||
//init ADS1115
|
||||
if (!ADS.begin()) {
|
||||
Serial.println("Error:"); delay(2000); Serial.println("ADS1115 Init Error!");
|
||||
led_simpeProgress(6,false);
|
||||
writeLogComment((unsigned long)millis(), "Error ADS1115 Init");
|
||||
}else{
|
||||
ADS.setGain(0);
|
||||
ADS.setDataRate(7);// Read Interval: 7-> 2ms, 6-> 3-4ms , 5-> 5-6ms, 4-> 9ms, 0-> 124ms
|
||||
// also set ADSREADPERIOD to at least the read interval
|
||||
ADS.requestADC(0); //Start requesting a channel
|
||||
led_simpeProgress(6,true);
|
||||
}
|
||||
ADS.setGain(0);
|
||||
ADS.setDataRate(7);// Read Interval: 7-> 2ms, 6-> 3-4ms , 5-> 5-6ms, 4-> 9ms, 0-> 124ms
|
||||
// also set ADSREADPERIOD to at least the read interval
|
||||
ADS.requestADC(0); //Start requesting a channel
|
||||
delay(10);
|
||||
led_update(millis());
|
||||
|
||||
|
||||
setSyncProvider(getTeensy3Time); //See https://www.pjrc.com/teensy/td_libs_Time.html#teensy3
|
||||
if (timeStatus()!= timeSet) {
|
||||
Serial.println("Unable to sync with the RTC");
|
||||
led_simpeProgress(7,false);
|
||||
} else {
|
||||
Serial.println("RTC has set the system time");
|
||||
led_simpeProgress(7,true);
|
||||
}
|
||||
led_update(millis());
|
||||
|
||||
|
||||
|
||||
writeLogComment(millis(), "Setup Finished");
|
||||
led_update(millis());
|
||||
led_simpeProgress(15,true);
|
||||
|
||||
led_simpleProgressWait(); //wait longer if any errors were displayed with led_simpeProgress()
|
||||
}
|
||||
|
||||
unsigned long loopmillis;
|
||||
|
@ -234,7 +244,7 @@ void loop() {
|
|||
loggingLoop(loopmillis,escFront,escRear);
|
||||
|
||||
leds();
|
||||
led_update(loopmillis);
|
||||
led_update(loopmillis,escFront,escRear); //ws2812 led ring
|
||||
|
||||
static unsigned long last_display_update=0;
|
||||
if (loopmillis - last_display_update > DISPLAYUPDATEPERIOD) {
|
||||
|
|
Loading…
Reference in New Issue