I was able to return to this project this weekend - after holding onto parts for nearly 2 months; life happens.
Below is the code. Please advise of smarter programming techniques.
Fact: Arduino compiler - 1.8.1
Fact: mini Arduino pro
Fact: OLED amazon.com
Fact: OLED library (IIC_OLED.zip) - adafruit
Fact: 36v booster - not yet implemented.
Demonstration video: simple meter
/*********************************************************************
This is an example for our Monochrome OLEDs based on SSD1306 drivers
Pick one up today in the adafruit shop!
------> http://www.adafruit.com/category/63_98
This example is for a 128x64 size display using I2C to communicate
3 pins are required to interface (2 I2C and one reset)
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
Written by Limor Fried/Ladyada for Adafruit Industries.
BSD license, check license.txt for more information
All text above, and the splash screen must be included in any redistribution
*********************************************************************/
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
//#define NUMFLAKES 10
//#define XPOS 0
//#define YPOS 1
#//define DELTAY 2
#define LOGO16_GLCD_HEIGHT 16
#define LOGO16_GLCD_WIDTH 16
#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif
int analogPin= 0;
int raw= 0;
int Vin= 5;
float Vout= 0;
float R1= 39000;
float R2= 0;
float old_R2=0;
float MYbuffer= 0;
float R2buff[10];
float sum= 0;
int slot;
char R2char[10];
char oldR2char[10];
bool shortckt;
bool openckt;
void setup() {
Serial.begin(9600);
delay(200);
//for(int i=0; i<255; i++){Serial.print(i); Serial.print(':'); Serial.println(char(i));}
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3D (for the 128x64)
display.display(); // show splashscreen per Ladyada's request; support her time/investment via purchasing power.
delay(2000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,5); display.print("Resistance: ");
}
unsigned long uptime = 0;
unsigned long old_uptime = 0;
void loop() {
raw= analogRead(analogPin);
MYbuffer= raw * Vin;
Vout= (MYbuffer)/1024.0;
MYbuffer= (Vin/Vout) -1;
R2= R1 * MYbuffer;
R2buff[slot] = R2;
slot++;
if(slot == 10){
GetAVGr2();
}
}
void clearScreen(){
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,5); display.print("Resistance: ");
}
void GetAVGr2(){
sum =0;
for(slot=0; slot<10; slot++){
sum = sum + R2buff[slot];
}
sum = sum/10;
slot = 0;
int real = sum;
if(real>0 && real <500) {printSHORT();}else{if(shortckt == true){clearScreen();} shortckt = false;}
if(real == 0){printOPEN() ;}else{if(openckt == true){clearScreen();} openckt = false;}
if(shortckt == true){return;}
if(openckt == true){return;}
if(sum>=1000){sum = sum/1000; real = sum;}
dtostrf(sum, 6, 2, R2char);
printR2();
dtostrf(sum, 6, 2, oldR2char);
}
void printR2(void){
R2char[6] = 'K';
for (int i=0; i<10; i++){
Serial.print(R2char[i]);
if(R2char[i] != oldR2char[i]) {selectValue(i, oldR2char[i], R2char[i]);}
}
delay(200);
}
void selectValue(int caseNUM, char oldCHAR, char newCHAR){
display.setTextSize(2);
int xval = 10;
int sep = 15;
switch (caseNUM){
case 0:
WriteValue(BLACK, xval + (sep*caseNUM), oldCHAR);
WriteValue(WHITE, xval + (sep*caseNUM), newCHAR);
break;
case 1:
WriteValue(BLACK, xval + (sep*caseNUM), oldCHAR);
WriteValue(WHITE, xval + (sep*caseNUM), newCHAR);
break;
case 2:
WriteValue(BLACK, xval + (sep*caseNUM), oldCHAR);
WriteValue(WHITE, xval + (sep*caseNUM), newCHAR);
break;
case 3:
WriteValue(BLACK, xval + (sep*caseNUM), oldCHAR);
WriteValue(WHITE, xval + (sep*caseNUM), newCHAR);
break;
case 4:
WriteValue(BLACK, xval + (sep*caseNUM), oldCHAR);
WriteValue(WHITE, xval + (sep*caseNUM), newCHAR);
break;
case 5:
WriteValue(BLACK, xval + (sep*caseNUM), oldCHAR);
WriteValue(WHITE, xval + (sep*caseNUM), newCHAR);
break;
case 6:
WriteValue(BLACK, xval + (sep*caseNUM), oldCHAR);
WriteValue(WHITE, xval + (sep*caseNUM), newCHAR);
break;
case 7:
WriteValue(BLACK, xval + (sep*caseNUM), oldCHAR);
WriteValue(WHITE, xval + (sep*caseNUM), newCHAR);
break;
case 8:
WriteValue(BLACK, xval + (sep*caseNUM), oldCHAR);
WriteValue(WHITE, xval + (sep*caseNUM), newCHAR);
break;
case 9:
WriteValue(BLACK, xval + (sep*caseNUM), oldCHAR);
WriteValue(WHITE, xval + (sep*caseNUM), newCHAR);
break;
}
display.display();
}
void WriteValue(uint16_t color, int x, char CHAR){
display.setTextColor(color);
display.setCursor(x,20);
display.print(CHAR);
}
void printSHORT(){
Serial.println("SHORT");
if(shortckt == true){return;}
memset(R2char, '\0', sizeof(R2char));
memset(oldR2char, '\0', sizeof(oldR2char));
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,5); display.print("Resistance: ");
display.setTextSize(3);
display.setCursor(10,20);
display.print("SHORT");
display.display();
shortckt = true;
}
void printOPEN(){
Serial.println("OPEN");
if(openckt == true){return;}
memset(R2char, '\0', sizeof(R2char));
memset(oldR2char, '\0', sizeof(oldR2char));
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,5); display.print("Resistance: ");
display.setCursor(10,20);
display.setTextSize(3);
display.print("OPEN");
display.display();
openckt = true;
}