Ciao a tutti, sono in dirittura d'arrivo con questo mio primo progetto, ma vorrei se posso chiedere il vostro supporto su due cose:
1 banalmente confermarmi la presenza o meno di errori sul codice,funzionano perfettamente ma gradirei un supporto... 
2 avere la possibilità di avere la lettura del VCC di arduino essendo questo alimentato da una batteria da 3.7v, oltre alla lettura vorrei anche convertirlo con la funzione map in % di batteria rimanente...da leggere poi sul display... leggevo del Secret Arduino Voltmeter e parallelamente sto capendo come funziona prima di implementarlo nel codice di lettura dell'umidità del terreno, mi manca di capire perchè il vcc letto va convertito se si usa una batteria.... e come....
allego anche foto del progetto che manca solo del case.
grazie a tutti
codice lettura unidità terreno(i led sono in forse se metterli o no... per quello sono "definiti", in caso li tolgo...:
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
#define LED 13
#define LED 8
int sensorValue=0;
int umidita=0;
void setup() {
Serial.begin(9600);
// by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3D (for the 128x64). Change address from 0x3D to 0x3C
// init done
// Show image buffer on the display hardware.
// Since the buffer is intialized with an Adafruit splashscreen
// internally, this will display the splashscreen.
display.display();
delay(2000);
}
void loop() {
float s = sensorValue = analogRead(0);
float x = umidita = map (sensorValue, 184, 1010, 100, 0);
// Clear the buffer.
display.clearDisplay();
// text display tests
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Rh % terreno:");
display.setTextSize(2);
display.setTextColor(WHITE); // 'inverted' text
display.println(x);
display.setTextSize(1);
display.setTextColor(WHITE);
display.println("prova");
display.display();
delay(100);
}
codice su cui sto lavorando per la lettura del VCC(copiato volgarmente da internet... e riadattato:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); //dichiara il display "lcd" di tipo 16x2 all'indirizzo 0x20
float iREF = 1.24; //internal reference cal factor
void setup() {
// put your setup code here, to run once:
analogReference(EXTERNAL);
//burn some ADC readings after reference change
for (int i = 0; i < 8; i++) analogRead(A0);
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("V:");
}
void loop() {
// put your main code here, to run repeatedly:
delay(100);
Serial.print("Measured battery voltage is: ");
Serial.println(fReadVcc());
Serial.println();
lcd.setCursor(0, 1);
lcd.print(fReadVcc());
}
//This function uses the known internal reference value of the 328p (~1.1V) to calculate the VCC value which comes from a battery
//This was leveraged from a great tutorial found at https://code.google.com/p/tinkerit/wiki/SecretVoltmeter?pageId=110412607001051797704
float fReadVcc() {
ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
delay(3); //delay for 3 milliseconds
ADCSRA |= _BV(ADSC); // Start ADC conversion
while (bit_is_set(ADCSRA, ADSC)); //wait until conversion is complete
int result = ADCL; //get first half of result
result |= ADCH << 8; //get rest of the result
float batVolt = (iREF / result) * 1024; //Use the known iRef to calculate battery voltage
return batVolt;
}
foto progetto in allegato