#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
int Ve=13,calibre=1,intervlow=0,intervhigh=0; /* Applique le 5V*/ /*la var calibre permet de changer de calibre de mesure*/
const int ref1=1000,ref2=10000,ref3=100000,ref4=1000000; /*Résistance de référence de différent calibre*/
const int etat_bas1= 5;
const int etat_bas2= 6;
const int etat_bas3= 7;
const int etat_bas4= 8; /* D5 pour ref1 | D6 pour ref2 | D7 pour ref3 | D8 pour ref4 */
int Rm=0; /* Résistance à mesurer */
float buffer=0,input=A0,Vs=0; /* la variable buffer récupère la tension mesuré | input est la sonde de tension | Vs la tension de sortie*/
int x=1,y=1,i=0; /* variable qui commande la position de la fonction ohmlogo | i est utilisé dans le setup*/
void setup()
{
Serial.begin(9600);
pinMode(Ve, OUTPUT);
pinMode(etat_bas1, OUTPUT);
pinMode(etat_bas2, OUTPUT);
pinMode(etat_bas3, OUTPUT);
pinMode(etat_bas4, OUTPUT);
pinMode(input, INPUT);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
display.setTextSize( 2 );
display.setTextColor( WHITE );
display.clearDisplay();
display.setTextSize(2);
display.setCursor(20,6);
display.println("Ohmmetre");
display.setTextSize(1);
display.setCursor(20,25);
display.println("By DRS");
ohmlogo();
res();
for(i=0;i<=100;i++)
{
display.setTextSize( 2 );
display.setTextColor( WHITE );
display.clearDisplay();
display.setTextSize(2);
display.setCursor(20,6);
display.println("Ohmmetre");
display.setTextSize(1);
display.setCursor(20,25);
display.println("By DRS");
ohmlogo();
res();
display.setTextSize(2);
display.setCursor(65,35);
display.print(i);
display.println(" %");
delay(15);
display.display();
}
delay(500);
}
void loop()
{
switch(calibre){
case 1: /* calibre 0-1k*/
Serial.println("Cas n°1");
delay(500);
digitalWrite(Ve, HIGH); /* Applique le 5v */
pinMode(etat_bas1,OUTPUT); /* GND */
pinMode(etat_bas2, INPUT); /* HZ */
pinMode(etat_bas3, INPUT); /* HZ */
pinMode(etat_bas4, INPUT); /* HZ */
digitalWrite(etat_bas1, LOW);
Vs = analogRead(input);
buffer = ((Vs/1024.0)*5);
Rm = (((5/buffer)-1)*ref1);
intervlow = ref1-(ref1*0.1);
intervhigh = ref1+(ref1*0.1);
if(Rm==0){ rmnull(); }
else{
if(((Rm>=intervlow)&&(Rm<=intervhigh)) || (Rm<=ref1)){
display.clearDisplay();
display.setTextColor(WHITE);
display.clearDisplay();
display.setTextSize(1);
display.setCursor(5,20);
display.println("La resistance vaut: ");
display.setTextSize(2);
display.setCursor(15,35);
display.print(Rm);
display.println(" Ohm");
display.display();
calibre=1;
delay(2500);
}
else{
calibre = 2; /* permet de changer le calibre */
}
}
break;
case 2: /* calibre 1k-10k*/
Serial.println("Cas n°2");
delay(500);
digitalWrite(Ve, HIGH); /* Applique le 5v */
pinMode(etat_bas2, OUTPUT); /* GND */
pinMode(etat_bas1, INPUT); /* HZ */
pinMode(etat_bas3, INPUT); /* HZ */
pinMode(etat_bas4, INPUT); /* HZ */
digitalWrite(etat_bas2, LOW);
Vs = analogRead(input);
buffer = ((Vs/1024.0)*5);
Rm = (((5/buffer)-1)*ref2);
intervlow = ref2-(ref2*0.1);
intervhigh = ref2+(ref2*0.1);
if(Rm==0){ rmnull(); }
else{
if((Rm>=intervlow)&&(Rm<=intervhigh) || (Rm<=ref2)){
display.clearDisplay();
display.setTextColor(WHITE);
display.clearDisplay();
display.setTextSize(1);
display.setCursor(5,20);
display.println("La resistance vaut: ");
display.setTextSize(2);
display.setCursor(15,35);
display.print(Rm);
display.println(" Ohm");
display.display();
calibre=1;
delay(2500);
}
else{
calibre = 3; /* permet de changer le calibre */
}
}
break;
case 3:
Serial.println("Cas n°3");
delay(500); /* calibre 10k-100k*/
digitalWrite(Ve, HIGH); /* Applique le 5v */
pinMode(etat_bas3, OUTPUT); /* GND */
pinMode(etat_bas1, INPUT); /* HZ */
pinMode(etat_bas2, INPUT); /* HZ */
pinMode(etat_bas4, INPUT); /* HZ */
digitalWrite(etat_bas3, LOW);
Vs = analogRead(input);
buffer = ((Vs/1024.0)*5);
Rm = (((5/buffer)-1)*ref3);
intervlow = ref3-(ref3*0.1);
intervhigh = ref3+(ref3*0.1);
if(Rm==0){ rmnull(); }
else{
if((Rm>=intervlow)&&(Rm<=intervhigh) || (Rm<=ref3)){
display.clearDisplay();
display.setTextColor(WHITE);
display.clearDisplay();
display.setTextSize(1);
display.setCursor(5,20);
display.println("La resistance vaut: ");
display.setTextSize(1);
display.setCursor(15,35);
display.print(Rm);
display.println(" Ohm");
display.display();
calibre=1;
delay(2500);
}
else{
calibre = 4; /* permet de changer le calibre */
}
}
break;
case 4:
Serial.println("Cas n°4");
delay(500); /* calibre 100k-1M*/
digitalWrite(Ve, HIGH); /* Applique le 5v */
pinMode(etat_bas3, OUTPUT); /* GND */
pinMode(etat_bas1, INPUT); /* HZ */
pinMode(etat_bas2, INPUT); /* HZ */
pinMode(etat_bas4, INPUT); /* HZ */
digitalWrite(etat_bas3, LOW);
Vs = analogRead(input);
buffer = ((Vs/1024.0)*5);
Rm = (((5/buffer)-1)*ref4);
intervlow = ref4-(ref4*0.1);
intervhigh = ref4+(ref4*0.1);
if(Rm==0){ rmnull(); }
else{
if((Rm>=intervlow)&&(Rm<=intervhigh) || (Rm<=ref4)){
display.clearDisplay();
display.setTextColor(WHITE);
display.clearDisplay();
display.setTextSize(1);
display.setCursor(5,20);
display.println("La resistance vaut: ");
display.setTextSize(1);
display.setCursor(15,35);
display.print(Rm);
display.println(" Ohm");
display.display();
calibre=1;
delay(2500);
}
else{
/* calibre = 4; permet de changer le calibre si vous souhaitez un ajouter un */
}
}
break;
default:
break;
}
}
void ohmlogo(){
display.drawPixel(x+2,y+18,WHITE); display.drawPixel(x+2,y+19,WHITE); display.drawPixel(x+3,y+19,WHITE); display.drawPixel(x+4,y+19,WHITE); display.drawPixel(x+5,y+19,WHITE);
display.drawPixel(x+5,y+18,WHITE); display.drawPixel(x+4,y+17,WHITE); display.drawPixel(x+3,y+16,WHITE); display.drawPixel(x+3,y+15,WHITE); display.drawPixel(x+3,y+14,WHITE); display.drawPixel(x+4,y+13,WHITE); display.drawPixel(x+5,y+12,WHITE);
display.drawPixel(x+6,y+11,WHITE); display.drawPixel(x+7,y+11,WHITE); display.drawPixel(x+8,y+11,WHITE); display.drawPixel(x+9,y+11,WHITE);
display.drawPixel(x+10,y+12,WHITE); display.drawPixel(x+11,y+13,WHITE); display.drawPixel(x+12,y+14,WHITE); display.drawPixel(x+12,y+15,WHITE); display.drawPixel(x+12,y+16,WHITE); display.drawPixel(x+11,y+17,WHITE); display.drawPixel(x+10,y+18,WHITE); display.drawPixel(x+10,y+19,WHITE); display.drawPixel(x+11,y+19,WHITE); display.drawPixel(x+12,y+19,WHITE); display.drawPixel(x+13,y+19,WHITE); display.drawPixel(x+13,y+18,WHITE);
}
void res(){
int x=20; /* variable locale pour controler la postion de la fonction */
display.drawRect(15,x+25,5,1,WHITE); display.drawPixel(20,x+25,WHITE); display.drawPixel(20,x+24,WHITE); display.drawPixel(20,x+26,WHITE); display.drawPixel(21,x+23,WHITE); display.drawPixel(21,x+27,WHITE); display.drawRect(22,x+22,3,1,WHITE); display.drawRect(22,x+28,3,1,WHITE); display.drawRect(25,x+27,16,1,WHITE); display.drawRect(25,x+23,16,1,WHITE); display.drawRect(41,x+22,3,1,WHITE); display.drawRect(41,x+28,3,1,WHITE); display.drawPixel(44,x+23,WHITE); display.drawPixel(44,x+27,WHITE); display.drawPixel(45,x+24,WHITE); display.drawPixel(45,x+25,WHITE); display.drawPixel(45,x+26,WHITE); display.drawRect(46,x+25,5,1,WHITE); display.drawRect(28,x+24,2,3,WHITE); display.drawRect(34,x+24,2,3,WHITE);
}
void rmnull() /*fonction qui gère l'affichage quand la valeur de rm est nulle */
{
display.setTextColor( WHITE );
display.clearDisplay();
display.setTextSize(1);
display.setCursor(10,20);
display.println("Veuillez inserer une resistance");
res();
display.display();
delay(1000);
}