Citazione:
Orginalmente inviato da bernie
Se sei sicuro che la batteria alimenta correttamente l'integrato ?
|
suppongo di si il mio modulo e il seguente
Citazione:
Orginalmente inviato da bernie
Quando spegni il PC , il circuito rimane alimentato ?
|
no spengo il pc si spegne tutto anche l'arduino perche e alimentato con usb
Citazione:
Orginalmente inviato da bernie
Non potrebbe essere che quando spegni il PC ti si resetta l'arduino e quando si rialimenta , rifa il ciclo e ricarica la "void setDateTime(){" ?
|
suppongo di no.
comunque o sostituito lo sketchup con il seguente inserendo anche il modulo DHT11
#define dht_dpin A0
byte bGlobalErr;
byte dht_dat[5];
#include "Wire.h"
#include <LiquidCrystal.h>
#define DS1307_ADDRESS 0x68 // Indirizzo dell'integrato DS1307
// come indicato nel datasheet
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
byte zero = 0x00;
struct tDataOra
{
byte second; //0-59
byte minute; //0-59
byte hour; //0-23
byte weekDay; //1-7
byte monthDay; //1-31
byte month; //1-12
byte year; //0-99
};
// Converte dalla notazione BCD alla notazione in base 10
byte bcdToDec(byte val)
{
// val % 16 => corrisponde ai 4 bit a destra di un byte
// (val - val % 16)/ 16 => corrisponde ai 4 bit a sinistra di un byte
// ovvero a shiftare verso destra di 4 bit quindi
// (val-val%16)/16 equivale a val >> 4
return ( (val-val%16)/16*10 + val%16 );
}
boolean getDateTime(void *V)
{
lcd.setCursor(0, 0);
tDataOra *D=(tDataOra *)V;
// inizializzo la trasmissione partendo
// dall'indirizzo 0x00
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(zero);
Wire.endTransmission();
// requestFrom e' utilizzato dal master per richiedere
// n byte alle device slave. In questo caso ne richiede
// 7 bytes alla device con l'indirizzo indicato
// il DS1307 utilizza 56 bit (7byte) per registrare la data/ora
Wire.requestFrom(DS1307_ADDRESS, 7);
if (Wire.available())
{
D->second = bcdToDec(Wire.read());
D->minute = bcdToDec(Wire.read());
D->hour = bcdToDec(Wire.read() & 0b111111); // modo 24 ore
// considero i primi 6 bit
D->weekDay = Wire.read(); // non mi serve convertire (Range da 1 a 7 => 3 bit)
D->monthDay = bcdToDec(Wire.read());
D->month = bcdToDec(Wire.read());
D->year = bcdToDec(Wire.read());
return true;
}
return false;
}
void printShortDateTime(void *V)
{
char buffer[25]={
'\0' };
tDataOra *D=(tDataOra *)V;
sprintf(buffer, "%02d/%02d/20%02d %02d:%02d:%02d",
D->monthDay,D->month,D->year,
D->hour, D->minute, D->second);
lcd.println(buffer);
}
void printLongDateTime(void *V)
{
const char* days[] = {
"Domenica", "Lunedi'", "Martedi'", "Mercoledi'",
"Giovedi'", "Venerdi'", "Sabato" };
const char* months[] = {
"Gennaio", "Febbraio", "Marzo", "Aprile",
"Maggio", "Giugno", "Luglio", "Agosto",
"Settembre", "Ottobre", "Novembre", "Dicembre" };
char buffer[40]={
'\0' };
tDataOra *D=(tDataOra *)V;
sprintf(buffer, "%s, %u %s 20%2u %02u:%02u:%02u",
days[D->weekDay-1], D->monthDay, months[D->month-1],D->year,
D->hour, D->minute, D->second);
Serial.println(buffer);
}
void setup()
{
lcd.begin(16, 2);
Wire.begin(); // Si connette al bus i2c
Serial.begin(9600);
InitDHT(); // funsion definida mas abajo para claridad del código principal
Serial.begin(9600);
delay(300);
Serial.println("Humedad y Temperatura\n\n");
delay(700);
}
void loop()
{
lcd.setCursor(0, 0);
tDataOra *D = new tDataOra();
if (getDateTime(D))
{
printLongDateTime(D);
printShortDateTime(D);
}
else
Serial.println("Errore di lettura Data/ora");
delay(1000);
lcd.setCursor(0, 1);
ReadDHT(); //función definida mas abajo para claridad del código principal
switch (bGlobalErr){
case 0:
lcd.print("umid");
lcd.print(dht_dat[0], DEC);
Serial.print(".");
Serial.print(dht_dat[1], DEC);
lcd.print("% ");
lcd.print("Temp");
lcd.print(dht_dat[2], DEC);
Serial.print(".");
Serial.print(dht_dat[3], DEC);
lcd.print("C ");
break;
case 1:
Serial.println("Error 1: DHT start condition 1 not met.");
break;
case 2:
Serial.println("Error 2: DHT start condition 2 not met.");
break;
case 3:
Serial.println("Error 3: DHT Suma de comprobación Error.");
break;
default:
Serial.println("Error: Código no Reconocido.");
break;
}
delay(1000);
}
void InitDHT(){
pinMode(dht_dpin,OUTPUT);
digitalWrite(dht_dpin,HIGH);
}
void ReadDHT(){
bGlobalErr=0;
byte dht_in;
byte i;
digitalWrite(dht_dpin,LOW);
delay(20);
digitalWrite(dht_dpin,HIGH);
delayMicroseconds(40);
pinMode(dht_dpin,INPUT);
//delayMicroseconds(40);
dht_in=digitalRead(dht_dpin);
if(dht_in){
bGlobalErr=1;
return;
}
delayMicroseconds(80);
dht_in=digitalRead(dht_dpin);
if(!dht_in){
bGlobalErr=2;
return;
}
delayMicroseconds(80);
for (i=0; i<5; i++)
dht_dat[i] = read_dht_dat();
pinMode(dht_dpin,OUTPUT);
digitalWrite(dht_dpin,HIGH);
byte dht_check_sum =
dht_dat[0]+dht_dat[1]+dht_dat[2]+dht_dat[3];
if(dht_dat[4]!= dht_check_sum)
{bGlobalErr=3;}
};
byte read_dht_dat(){
byte i = 0;
byte result=0;
for(i=0; i< 8; i++){
while(digitalRead(dht_dpin)==LOW);
delayMicroseconds(30);
if (digitalRead(dht_dpin)==HIGH)
result |=(1<<(7-i));
while (digitalRead(dht_dpin)==HIGH);
}
return result;
}
il problema persiste