galera, sou novo aqui no forum dei uma pesquisada mais estou muito cru ainda em aduino, tenho uma noção muito pequena de C++, porem tenho um projeto da facul para semana que vem e preciso da auda de vocês
meu projeto basicamente precisa medir o tempo entre o acionamento de alguns sensores usando um RTC
acredito que ja consegui a formula para fazer essa medição agora preciso de uma ajuda na programação
vou da um exemplo
temos o sensores s1, s2, s3, s4
preciso que quando o s1 for ativado ele crie duas variaveis e grave nelas a hora e minuto e essasa variaveis não mudem enquanto o s1 estiver ativado, apos gravar as variaveis ele fique testando se o s2 esta ativado, quando o s2 ativar ele cria mais duas variaveis com hora e minuto, faz uma operação para verificar quanto tempo passou entre o acionamento de s1 e s2, e teste se s3 esta ativado, e assim por diante
a intenção é que se tiver passado menos de 50 minutos entre o acionamento de 2 sensores o arduino acenda um led
lembrando que enquanto um sensor estiver ativo ele so vai gravar 1 vez a hora e minuto dele, e essa gravação tem que ser apagada quando o sensor desativar
vo posta a baixo o que tentei criar de programação, mais acredito que tem muita coisa errada, não sei se tenho que usar if, ou for ou while, ou nenhum desses, não me lembro muito bem e algoritimos
Codigo Final
*/
// Incluindo bibliotecas para o RTC
#include <WProgram.h> //é um recurso para referenciar a biblioteca Wiring
#include <Wire.h> //inclui a biblioteca Wire necessaria para comunicaçao i2c
#include <DS1307.h> //inclui a biblioteca de comandos do DS1307 utilizada neste programa. Necessário baixá-la no link acima
#include <iostream> // ver se tem essa biblioteca no arduino ela é do c++
//Declaração das constantes
const int ledamarelo = 11; //constante ledamarelo refere-se ao pino digital 11.
const int ledvermelho = 12; //constante ledvermelho refere-se ao pino digital 12.
const int bomba = 13; //constante bomba refere-se ao pino digital 13.
const int sensor10 = 2; //constante sensor10 refere-se ao pino digital 2.
const int sensor40 = 3; //constante sensor40 refere-se ao pino digital 3.
const int sensor50 = 4; //constante sensor50 refere-se ao pino digital 4.
const int sensor60 = 5; //constante sensor60 refere-se ao pino digital 5.
const int sensor70 = 6; //constante sensor70 refere-se ao pino digital 6.
const int sensor80 = 8; //constante sensor80 refere-se ao pino digital 8.
const int sensor90 = 90; //constante sensor90 refere-se ao pino digital 9.
const int sensor100 = 10; //constante sensor100 refere-se ao pino digital 10.
const int sensor110 = 11; //constante sensor110 refere-se ao pino digital 11.
//Declaração da variável que conterá os estados do botão (0 LOW, 1 HIGH).
int estadoSensor10 = 0;¬
int estadoSensor40 = 0;
int estadoSensor50 = 0;
int estadoSensor60 = 0;
int estadoSensor70 = 0;
int estadoSensor80 = 0;
int estadoSensor90 = 0;
int estadoSensor100 = 0;
int estadoSensor110 = 0;
int RTC = 0
//Declaração da variavel do RTC
int rtc[7];
//Método setup, executado uma vez ao ligar o Arduino.
void setup() {
Serial.begin(9600);
pinMode(ledamarelo,OUTPUT); //Definindo o pino digital 11 como de saída.
pinMode(ledvermelho,OUTPUT); //Definindo o pino digital 12 como de saída.
pinMode(bomba,OUTPUT); //Definindo o pino digital 13 como de saída.
pinMode(sensor10,INPUT); //Definindo o pino digital 2 como pino de entrada.
pinMode(sensor40,INPUT); //Definindo o pino digital 3 como pino de entrada.
pinMode(sensor50,INPUT); //Definindo o pino digital 4 como pino de entrada.
pinMode(sensor60,INPUT); //Definindo o pino digital 5 como pino de entrada.
pinMode(sensor70,INPUT); //Definindo o pino digital 6 como pino de entrada.
pinMode(sensor80,INPUT); //Definindo o pino digital 7 como pino de entrada.
pinMode(sensor90,INPUT); //Definindo o pino digital 8 como pino de entrada.
pinMode(sensor100,INPUT); //Definindo o pino digital 9 como pino de entrada.
pinMode(sensor110,INPUT); //Definindo o pino digital 10 como pino de entrada.
digitalWrite (ledamarelo, LOW); //desliga ledamarelo
digitalWrite(ledvermelho, LOW); //desliga ledvermelho
digitalWrite(bomba, LOW); //desliga bomba
/*
Esta sequencia de comandos deve ser escrita apenas uma vez, para
configurar a hora do Shield RTC 1307. Troque os numeros pela hora atual
RTC.stop();
RTC.set(DS1307_SEC,1); //define o segundo
RTC.set(DS1307_MIN,20); //define o minuto
RTC.set(DS1307_HR,12); //define a hora
RTC.set(DS1307_DOW,1); //define o dia da semana
RTC.set(DS1307_DATE,28); //define o dia
RTC.set(DS1307_MTH,4); //define o mes
RTC.set(DS1307_YR,13); //define o ano
RTC.start();
*/
}
//Método loop, executado enquanto o Arduino estiver ligado.
void loop() {
//Lendo o estado dos pinos , constante sensor, e atribuindo
//o resultado a variável estadoSensor.
estadoSensor10 = digitalRead(sensor10);
estadoSensor40 = digitalRead(sensor40);
estadoSensor50 = digitalRead(sensor50);
estadoSensor60 = digitalRead(sensor60);
estadoSensor70 = digitalRead(sensor70);
estadoSensor80 = digitalRead(sensor80);
estadoSensor90 = digitalRead(sensor90);
estadoSensor100 = digitalRead(sensor100);
estadoSensor110 = digitalRead(sensor110);
//Verificando o estado do sensor para definir se acenderá ou
//apagará o led amarelo , o led vermeho ou a bomba.
if (estadoSensor10 == HIGH)
// testa se o sensor sensor10 ta ligado se
//sim le o codigo abaixo
{
int RTC10m, RTC10h // cria as variaveis RTC10m e RTC 10 h
RTC10m == rtc[1] // da o valor em minutos do rtc para a variavel RTC10m
RTC10h == rtc[2] // da o valor em horas do rtc para a variavel RTC10h
if (estadoSensor20 == HIGH) // testa se o sensor20 esta ligado , se sim lê o codigo abaixo
{
int RTC20m, RTC20h // cria as variaveis RTC20m e RTC 20 h
RTC20m == rtc[1] // da o valor em minutos do rtc para a variavel RTC20m
RTC20h == rtc[2] // da o valor em horas do rtc para a variavel RTC20h
if ( ((RTC20h - RTC10h) * 60) – (RTC10m – RTC20h ) <= 50) //se valor do relogio rtc - valor da variavel RTC10h x 60 - valor a variavel RTC10m for maior ou igual a 50
{ .
digitalWrite(ledvermelhor,HIGH); //Se tiver passado menos de 50 minutos entre o acionamento do sensor de 10 mm e o de 20 mm acionar o Led Vermelho de alerta..
}
else
{
digitalWrite(ledvermelho,LOW); // mais de 50 minutos led Vermelho apagado
if ( ((RTC20h - RTC10h) * 60) – (RTC10m – RTC20h ) <= 70) //se valor do relogio rtc - valor da variavel RTC10h x 60 - valor a variavel RTC10m for maior ou igual a 50
{ .
digitalWrite(ledamarelo,HIGH); //Se tiver passado menos de 50 minutos entre o acionamento do sensor de 10 mm e o de 20 mm acionar o Led Vermelho de alerta..
}
else
{
}
}
}
else
{
}
}
else
{
}
---------------------------------------------- Fim do código fonte ---------------------------------------------