if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
RTC.adjust(DateTime(DATE, TIME));
}
}
O programa esta funcionando, o problema é que estou tendo conflito entre o Ethernet Shield e RTC.
Estou procurando uma solução e vi que eles utilizam o i2c ao mesmo tempo. Estou matando o ethernet para rodar o programa. Existe algum jeito de corrigir isso?
Esta tudo funcionando. Mas para isso tive que anular a parte do código do Ethernet shield. Transformei em texto.
Motor, sensor ultrassônico, sensor resistivo, RTC.... tudo funciona. Mas hora que coloco o Ethernet no código, trava tudo.
// INCLUSÃO DAS BIBLIOTECAS
#include <SPI.h> //Biblioteca geral
#include <Ethernet.h> // Bibiblioteca Ethernet Shield
#include <Servo.h> //Biblioteca para Servo Motor
#include <Ultrasonic.h> //Biblioteca para o sensor ultrasonico
#include <Wire.h> // Biblioteca para o Real Time Clock
#include <RTClib.h> //Biblioteca para o Real Time Clock
RTC_DS1307 RTC;
// CONFIGURAÇÃO DO SENSOR ULTRASSOM
#define echoPin 9 //Pino 1 recebe o pulso do echo
#define trigPin 8 //Pino 2 envia o pulso para gerar o echo
Ultrasonic ultrasonic(8,9);
// CONFIGURAÇÃO ETHERNET
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // Endereço MAC do controlador
byte ip[] = { 192, 168, 0, 4 }; // IP usado pelo Arduino na rede - VERIFICAR!!!
byte server[] = { 200, 98, 199, 90 }; // IP do servidor SMTP UOL Host para envio de emails - VERIFICAR!!!
// CONFIGURAÇÃO DE HORÁRIO INICIAL PARA ALIMENTAÇÃO
int hconst = 11; // constante para definição de hora 00 hrs - 23 hrs (08 = octal constant)
int mconst = 40; // constante para definição de minuto 00 min - 59 min
// VARIÁVEIS DO SISTEMA
int horas = 0; // Variável de armazenamento horas recebidas
int minutos = 0; // Variável de armazenamento minutos recebidas
int distancia; // Variável de armazenamento distância do sensor ultrassom
int pos = 0; // Variavel para armazenar a posição do servo
int time = 5000; // Constante de tempo 1
int wait = 2000; // Constante de tempo 2
Servo myservo; // Cria um objeto do tipo myservo para acessar os metodos
EthernetClient client; // Ethernet shield como cliente
// VARIÁVEIS DO SENSOR RESISTIVO
int fsrPin = 0; // Sensor Resistivo e resistor de pulldown conectados ao a0
int fsrReading; // Leitura analógica do divisor FSR - resistor
int fsrVoltage; // Leitura analógica convertido em voltagem
unsigned long fsrResistance; // Voltagem convertida para resistância
unsigned long fsrConductance; // Voltagem convertida para condutância
long fsrForce; // Finalmente, a resistência convertida em força
// CONFIGURAÇÕES DE SETUP
void setup()
{
// CONFIGURAÇÃO SENSOR ULTRASSOM E SERVO MOTOR
pinMode(echoPin, INPUT); // define o pino 9 como entrada (recebe)
pinMode(trigPin, OUTPUT); // define o pino 8 como saida (envia)
myservo.attach(5); // atribui o pino 5 do arduino para ser controlado pelo objeto
// ABRIR COMUNICAÇÃO SERIAL
Serial.begin(57600);
Wire.begin();
RTC.begin();
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
RTC.adjust(DateTime(__DATE__, __TIME__));
}
// INICIANDO ETHERNET
/* if (Ethernet.begin(mac) == 0)
{
Serial.println("Failed to configure Ethernet using DHCP");
// no point in carrying on, so do nothing forevermore:
for(;;)
;
}*/
}
// CONFIGURAÇÃO LOOP DA PARTE LÓGICA DE PROGRAMAÇÃO
void loop()
{
DateTime now = RTC.now();
horas = now.hour();
Serial.print(horas, DEC);
Serial.print("h:");
minutos = now.minute();
Serial.print(minutos, DEC);
Serial.println("m");
// COMPARAÇÃO DE HORÁRIO ADQUIRIDO COM O PROGRAMADO NAS VARIÁVEIS HCONST E MCONST
if (horas == hconst)//Primeiro verifica a hora
{
if (minutos == mconst)//Em seguida é feito a verificação dos minutos
{
// APÓS COMPARAÇÃO DO HORARIO, É INICIADA A ALEITURA DO NÍVEL DE RAÇÃO NO RESERVATÓRIO
//seta o pino 6 com um pulso baixo "LOW" ou desligado ou ainda 0
digitalWrite(trigPin, LOW);
// delay de 2 microssegundos
delayMicroseconds(2);
//seta o pino 6 com pulso alto "HIGH" ou ligado ou ainda 1
digitalWrite(trigPin, HIGH);
//delay de 10 microssegundos
delayMicroseconds(10);
//seta o pino 6 com pulso baixo novamente
digitalWrite(trigPin, LOW);
// função Ranging, faz a conversão do tempo de
//resposta do echo em centimetros, e armazena
//na variavel distancia
distancia = (ultrasonic.Ranging(CM));
Serial.print("Distancia em CM: ");//Exibe mensagem da distancia
Serial.println(distancia);//Exibe o valor da distancaia
Serial.flush();
delay(1000);
// IDENTIFICANDO RAÇÃO NA BANDEJA
fsrReading = analogRead(fsrPin);
Serial.print("Analog reading = ");
Serial.println(fsrReading);
// analog voltage reading ranges from about 0 to 1023 which maps to 0V to 5V (= 5000mV)
fsrVoltage = map(fsrReading, 0, 1023, 0, 5000);
Serial.print("Voltage reading in mV = ");
Serial.println(fsrVoltage);
if (fsrVoltage == 0) {
Serial.println("No pressure");
} else {
// The voltage = Vcc * R / (R + FSR) where R = 10K and Vcc = 5V
// so FSR = ((Vcc - V) * R) / V yay math!
fsrResistance = 5000 - fsrVoltage; // fsrVoltage is in millivolts so 5V = 5000mV
fsrResistance *= 100000; // 10K resistor
fsrResistance /= fsrVoltage;
Serial.print("FSR resistance in ohms = ");
Serial.println(fsrResistance);
fsrConductance = 1000000; // we measure in micromhos so
fsrConductance /= fsrResistance;
Serial.print("Conductance in microMhos: ");
Serial.println(fsrConductance);
// Use the two FSR guide graphs to approximate the force
if (fsrConductance <= 1000) {
fsrForce = fsrConductance / 80;
Serial.print("Force in Newtons: ");
Serial.println(fsrForce);
} else {
fsrForce = fsrConductance - 1000;
fsrForce /= 30;
Serial.print("Force in Newtons: ");
Serial.println(fsrForce);
}
}
Serial.println("--------------------");
Serial.flush();
delay(1000);
#define echoPin 9 //Pino 1 recebe o pulso do echo
#define trigPin 8 //Pino 2 envia o pulso para gerar o echo
Ultrasonic ultrasonic(8,9);
Se fizeste um define, usa o define. Não um valor numérico. Não é isto o teu problema, mas um dia mais tarde nunca se sabe.
Quando dizes que trava tudo o que acontece? Recebes algo pela porta série? Faz um Serial.println("setup complete"); no final da setup e vê o que acontece.
Outra coisa que reparei:
Defines o mac, ip, etc, etc... e depois só usas o mac? Sem a gateway, não pode haver DHCP, né?
Experimenta isto:
Ethernet.begin(mac, ip, gateway, subnet); E claro, define isso correctamente para o teu caso.