Show Posts
Pages: 1 [2] 3 4 ... 6
16  International / Software / Re: Temporizando luces con arduino y alarma, DUDA. on: April 26, 2012, 11:27:02 am
Pues asi me aparece el siguente error:

_2sensores.cpp: In function 'void loop()':
_2sensores:116: error: 'hour' was not declared in this scope

y el codigo simpre para probar que use es este:

Code:
// Alarma Chalet
#include <Wire.h>                   // Libreria para I2C
#include <LiquidCrystal_I2C.h>      // Libreria para LCD
#define DS1307_I2C_ADDRESS 0x68     // Direccion bus Reloj

LiquidCrystal_I2C lcd(0x27,16,2);  // Direccion de bus pantalla

const int pir1 = 2;            // Pin de entrada señal Pir 1
const int pir2 = 4;            // Pin de entrada señal Pir 2
const int ledEstado = 13;      // Led en pin 13 salto Pir 1 y Pir 2
int estadoPir1 = 0;            // Estado de Pir 1 "0"
int estadoPir2 = 0;            // Estado de Pir 2 "0"

byte decToBcd(byte val)
{
  return ( (val/10*16) + (val%10) );
}

// Convierte BCD (binario decimal codificado) a números normales decimales
byte bcdToDec(byte val)
{
  return ( (val/16*10) + (val%16) );
}

// 1) Sets the date and time on the ds1307
// 2) Starts the clock
// 3) Sets hour mode to 24 hour clock

void setDateDs1307(byte second,        // 0-59
                   byte minute,        // 0-59
                   byte hour,          // 1-23
                   byte dayOfWeek,     // 1-7
                   byte dayOfMonth,    // 1-28/29/30/31
                   byte month,         // 1-12
                   byte year)          // 0-99
{
   Wire.beginTransmission(DS1307_I2C_ADDRESS);
   Wire.send(0);
   Wire.send(decToBcd(second));   
   Wire.send(decToBcd(minute));
   Wire.send(decToBcd(hour));     
   Wire.send(decToBcd(dayOfWeek));
   Wire.send(decToBcd(dayOfMonth));
   Wire.send(decToBcd(month));
   Wire.send(decToBcd(year));
   Wire.endTransmission();
}

// Establece la fecha y la hora del reloj
void getDateDs1307(byte *second,
          byte *minute,
          byte *hour,
          byte *dayOfWeek,
          byte *dayOfMonth,
          byte *month,
          byte *year)
{
  // Resetea el registro puntero
  Wire.beginTransmission(DS1307_I2C_ADDRESS);
  Wire.send(0);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

  // Alguno de estos necesitan enmascarar porque ciertos bits son bits de control   

  *second     = bcdToDec(Wire.receive() & 0x7f);
  *minute     = bcdToDec(Wire.receive());
  *hour       = bcdToDec(Wire.receive() & 0x3f); 
  *dayOfWeek  = bcdToDec(Wire.receive());
  *dayOfMonth = bcdToDec(Wire.receive());
  *month      = bcdToDec(Wire.receive());
  *year       = bcdToDec(Wire.receive());
}

void setup()

{
  lcd.init();                  // Inicializacion LCD
  pinMode(ledEstado, OUTPUT);  // Funcion de salida LedEstado pin 13
  pinMode(pir1, INPUT);        // Funcion de entrada Pir 1 pin 2
  pinMode(pir2, INPUT);        // Funcion de entrada Pir 2 pin 4
 
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  Wire.begin();
 
 
 
  // la primera vez debemos poner en hora, active esta parte y luego vuelva a quitarla
  /*second = 00;
  minute = 33;
  hour = 15;
  dayOfWeek = 6;
  dayOfMonth = 11;
  month = 2;
  year = 12;
 
  setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year); */
   
 
}

void loop()
{
  if (hour == 11 && minute >15)
  {
  digitalWrite (LedEstado, HIGH);
 
 
   lcd.backlight();             // Iluminacion LCD
   lcd.setCursor(0,0);          // Seleccionamos posicion del cursor
   
 
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;

  getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); 

  lcd.setCursor(6,0);
    lcd.print(year, DEC);
  lcd.setCursor(2,0);
  lcd.print("/");
  lcd.setCursor(3,0);
    if (month < 10) lcd.print("0");
  lcd.print(month, DEC); 
  lcd.setCursor(5,0);
  lcd.print("/");   
  lcd.setCursor(0,0);
    if (dayOfMonth < 10) lcd.print("0");
  lcd.print(dayOfMonth, DEC);
  lcd.print("");
  lcd.setCursor(0,1);
    if (hour < 10) lcd.print("0");
  lcd.print(hour, DEC);
  lcd.setCursor(2,1);
  lcd.print(":"); 
  lcd.setCursor(3,1);
    if (minute < 10) lcd.print("0");
  lcd.print(minute, DEC);
  lcd.setCursor(5,1);
  lcd.print(":");
    if (second < 10) lcd.print("0");
  lcd.print(second, DEC); 
 
     switch (dayOfWeek)
   
    {
     
    case 1:
      lcd.setCursor(9,0);
      lcd.print("Lunes");
      break;
    case 2:
      lcd.setCursor(9,0);
      lcd.print("Martes");
      break;
    case 3:
      lcd.setCursor(9,0);
      lcd.print("Miercoles");
      break;
    case 4:
      lcd.setCursor(9,0);
      lcd.print("Jueves");
      break;
    case 5:
      lcd.setCursor(9,0);
      lcd.print("Viernes");
      break;
    case 6:
      lcd.setCursor(9,0);
      lcd.print("Sabado");
      break;
    case 7:
      lcd.setCursor(9,0);
      lcd.print("Domingo");
      break;
   }
   
   

  delay(1000); //Pausa durante 1 segundo
 
 
 
  estadoPir1 = digitalRead(pir1);  // Leer estado Pir 1
  estadoPir2 = digitalRead(pir2);  // Leer estado Pir 2
 
  lcd.backlight();             // Iluminacion LCD
  lcd.setCursor(9,1);          // Seleccionamos posicion del cursor

  if (estadoPir1 == HIGH) {        // Si esta sl sensor Pir 1 activado activa led Pin 13
      //Pone led Estado pin 13 a nivel alto
  lcd.print("Pir 1");            // Aparece en pantalla Pir 1
 
  }
 
  else {                           // Si no se da las condiciones anteriores pone led Estado a nivel bajo
 
    lcd.setCursor(9,1);
       
     if (estadoPir2 == HIGH) {        // Si esta sl sensor Pir 2 activado activa led Pin 13
     lcd.print("Pir 2");            // Aparece en pantalla Pir 2
 
 
 
  }
 
  else {                           // Si no se da las condiciones anteriores pone led Estado a nivel bajo
 
    lcd.setCursor(9,1);
    lcd.print("OK   ");             // Aparece en pantalla OK
   

 
  }
     
 }
}
17  International / Software / Re: Temporizando luces con arduino y alarma, DUDA. on: April 26, 2012, 05:52:00 am
Buenas de nuevo, he encontrado como encienden y apagan luces sin usar millis, asi tambien me podria servir la temporizacion de luces verdad?

Code:
//Control de iluminacion
void Luces()
{
 
  // A las 10:00 empiezan a encenderse los led blancos y azules
  if (hour == 10 && minute ==1)
  {
    ledon();
    Lcdini();
    Serial.print("Comienza a salir el Solete      ");
    for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=1) { //EFECTO FADING EN LUZ LUNA LEDS
    analogWrite(Lazul, fadeValue); 
    analogWrite(Lblanco, fadeValue);     
    delay(1000); 
    }
    lcdoff();
    ledoff();
  }
     
 
  // A las 11:00 empieza 50% led alta potencia y apagamos los led de amanecer
 
  if (hour == 11 && minute ==1)
  {
  digitalWrite (Rele3, HIGH);
  digitalWrite (Lazul,LOW);
  digitalWrite (Lblanco,LOW);
  }
 
  //A las 11.15 se encienden 100% luces
  if (hour == 11 && minute >15)
  {
  digitalWrite (Rele3, HIGH);
  digitalWrite (Rele4, HIGH);
  digitalWrite (Lazul,LOW);
  digitalWrite (Lblanco,LOW);
  }
 
  // Desde 12:00 hasta 20:00 100% luces
  if (hour >= 12 && hour < 20 )
  {
  digitalWrite (Rele4, HIGH);
  digitalWrite (Rele3, HIGH);
  digitalWrite (Lazul,LOW);
  digitalWrite (Lblanco,LOW);
  }
 
   if (hour == 21 && minute < 50)
  {
  digitalWrite (Rele4, HIGH); 
  digitalWrite (Rele3, HIGH);
  digitalWrite (Lazul,LOW);
  digitalWrite (Lblanco,LOW);
  }
 
  // A las 21:50 50% luces
 
  if (hour == 21 && minute > 50)
  {
  digitalWrite (Rele4, HIGH); 
  digitalWrite (Rele3, LOW);
  digitalWrite (Lazul,LOW);
  digitalWrite (Lblanco,LOW);
  }
 
  // A las 22:15 solo leds anochecer
 
  if (hour == 22 && minute > 14 && minute <44)
  {
  digitalWrite (Lazul, HIGH);
  digitalWrite (Lblanco, HIGH);
  digitalWrite (Rele4, LOW);
 
  }
 
  // A las 22:30h comienza anochecer
 
  if (hour == 22 && minute >30 && anochecer == 0)
  {
    Lcdini();
    ledon();
    Serial.print("    Comienza    a ponerse el Sol");
    for(int fadeValue = 255 ; fadeValue >= 100; fadeValue -=1) {
    analogWrite(Lblanco, fadeValue);
    analogWrite(Lazul, fadeValue); 
    delay(1500);
    }
    lcdoff();
    ledoff();
    anochecer = 1;
  }
 
    // A las 22.45 se va apagando el blanco
   
    if (hour == 22 && minute > 45 && anochecer== 1)
   {
    Lcdini();
    ledon();
    Serial.print("    El Sol          se acuesta   ");
    for(int fadeValue = 100 ; fadeValue >= 0; fadeValue -=1) {
    analogWrite(Lblanco, fadeValue); 
    delay(1000);
    }
    for(int fadeValue = 100 ; fadeValue >= 50; fadeValue -=1) {
    analogWrite(Lazul, fadeValue); 
    delay(1000);
    }
    ledoff();
    lcdoff();
    anochecer = 2;
       
 }
  // A las 23:10 se va apagando
 
  if (hour == 23 && minute  >10 && anochecer ==2)
   {
    Lcdini();
    ledon();
    Serial.print("La luna esconde   Buenas noches");
    for(int fadeValue = 50 ; fadeValue >= 0; fadeValue -=1) {
    analogWrite(Lazul, fadeValue); 
    p();
    }   
    ledoff();
    lcdoff();
    anochecer = 0;
   }
   
}
 

Esto es de un proyecto para automatizar un acuario, de todas formas sigo interesado tambien en usar bien millis ya que el saber no ocupa lugar.

Saludos
18  International / Software / Re: Temporizando luces con arduino y alarma, DUDA. on: April 26, 2012, 04:51:34 am
Podrias ponerme un pequeño ejemplo? porque se a lo que te refieres pero asi de primeras no soy capaz de meterle mano jejejej  smiley-confuse

Saludos y gracias
19  International / Software / Re: Temporizando luces con arduino y alarma, DUDA. on: April 25, 2012, 02:48:31 am
Code:
/* Parpadeo sin delay()
Enciende y apaga un LED conectado a un pin digital sin utilizar la función delay(). Esto significa que otro código se puede ejecutar al mismo tiempo sin ser interrumpido por el código que controla el parpadeo del LED
Circuito: Un LED conectado entre el pin 13 y el pin GND.
Nota: en muchos Arduinos hay un LED en la placa conectado al pin 13, por lo que no sería necesario un LED externo para este ejemplo.
Creado en 2005 por David A. Mellis, modificado el 8/2/2010 por Paul Stoffregen.
Este ejemplo es de dominio público*/

// las constantes no cambian. Las usamos aquí para establecer los números de los pines.
int ledPin = 13;   // el número del pin conectado al LED

//  variables que cambiarán de valor.
int ledState = LOW;   // ledState se usará para establecer el estado del LED

long previousMillis = 0;   // almacenará la última vez que el estado del LED
//se actualizó

// la siguiente variable es del tipo long por que el tiempo medido en
// milisegundos supera rápidamente al número que puede ser almacenado en una
// variable del tipo int
long interval = 1000;   // intervalo del parpadeo (en milisegundos)

void setup()
{
// establece el pin digital como salida:
pinMode(ledPin, OUTPUT);
}

void loop()
{
// Aquí es donde pondríamos el código que debe ejecutarse durante todo el
// tiempo.

// Se comprobará si es el momento de parpadear el LED, esto es, si la
// diferencia entre el tiempo transcurrido y el tiempo en que parpadeó
// por última vez el LED es mayor que el intervalo que establecimos en
// la declaración de variables.

unsigned long currentMillis = millis();    // Se toma el tiempo actual

// se comprueba si el tiempo actual menos el tiempo en que el LED cambió
// de estado por última vez es mayor que el intervalo.
if (currentMillis - previousMillis > interval){

// Si se cumple la condición se guarda el nuevo tiempo
// en el que el LED cambia de estado
previousMillis = currentMillis;

// Y ahora cambiamos de estado el LED, si está encendido a
// apagado o viceversa.
if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;

// Hacemos que el contenido de la variable llegue al LED
digitalWrite(ledPin, ledState);
}
}

Buenas, encontre este codigo que es el mismo pero en castellano ejje porque de inglis ando un poco chungo jeje asi tambien para que la gente que este como yo lo entienda mejor.

Ya tengo mas o menos entendido bien como funciona, pero tengo una duda.
Como hago para para encender y apagar cosas a unas horas y unos dias de la semana especificos?
Porque asi como esta este ejemplo lo que hace es cuenta desde que inicia el programa y no usa el reloj en tiempo real.

Saludos
20  International / Software / Re: Temporizando luces con arduino y alarma, DUDA. on: April 22, 2012, 09:04:01 am
Si, el reloj ya lo tengo funcionando, puesto en hora y mostrando en el LCD, lo que me daba miedo era usar millis jeje que ya lo intente y se resistió.

probare a hacer algo simple y luego ya lo complicare un poco mas.

Saludos y gracias.
21  International / Software / Temporizando luces con arduino y alarma, DUDA. on: April 22, 2012, 08:09:35 am
Buenas a todos, estoy armando una alamar para un chalet que tengo, ya tengo solucionado el funcionamiento de sensores, el armado y desarmado con su correspondiente cuenta atras y hasta hay todo bien.

Pero ahora tengo el problema a temporizar las luces, no se como tengo tengo que hacerlo para que salte a una determinada hora y decirle que tiempo tienen que estar encendidas, porque claro Delay no lo puedo usar porque si pongo 4 horas de estar las luces encendidas con Delay, pues estaria 4 Horas el programa parado alli.

Hay alguna otra manera de hacerlo sin usar Delay y millis? porque con este ultimo por mas que lo he intentado nunca me ha salido.ç


Saludos y gracias
22  International / Español / Re: Necesito ayuda con mi display de DFrobot I2C on: April 06, 2012, 10:27:49 pm
Pon el programa que le pasas.

Yo lo tengo todo conectado asi y me va bien, pero lo conecto todo y despues le doy alimentacion al arduino.

Pero vamos sin meterle programa ami nunca me mostró nada en el LCD solo se enciende la iluminacion del LCD y ya esta.

23  International / Español / Re: Necesito ayuda con mi display de DFrobot I2C on: April 05, 2012, 10:42:13 am
Hola Tiozes, como lo tienes conectado al arduino, tengo la libreria de DFrobot y ya me compila bien y me lo pasa al arduino, pero no me hace nada el display la fila uno se me queda toda encendida los cuadritos

Buenas, pues el terminal de la pantalla SDA al pin 4 de las entradas analogicas del Arduino y SCL al pin 5 de las entradas analogicas del arduino y ya con la libreria funciona, metiendole la alimentacion al LCD claro esta.

Saludos
24  International / Español / Re: Cuenta atras para alarma Nuevo PROBLEMA on: April 05, 2012, 10:04:14 am
Buenas, voy a intentar modificar este codigo para usar millis en vez de delay.

Code:
// Se inicializan las constantes (variables cuyo valor no cambiara durante la ejecución del programa) y se le asignan los números de pin.
#include <Wire.h>                   // Libreria para I2C
#include <LiquidCrystal_I2C.h>      // Libreria para LCD

LiquidCrystal_I2C lcd(0x27,16,2);  // Direccion de bus pantalla


void setup(){
 
  lcd.init();
  lcd.backlight();
 
 
  // Se ajusta la salida de datos del puerto serie a 9600 baudios.
  Serial.begin(9600);
 
}
 
void loop(){
 
 
  // Se inicia un bucle que va marcha atrás de modo que a cada vuelta obtenemos que i vale: 3, 2, 1 y 0.
  for ( int i=26; i>=0; i-- ){
 
    // Se imprime en pantalla el valor del array que corresponda a la vuelta del for.
    Serial.println(i);
    lcd.setCursor(0,0);
    lcd.print(i);
      if (i < 10) lcd.print(" ");
   
     delay(1000);
    }
 
  }
 

 

El primer intento ha sido un fracaso jeje, espero tener mas suerte en el segundo.
25  International / Español / Re: Cuenta atras para alarma Nuevo PROBLEMA on: April 05, 2012, 09:30:03 am
Uff, estoy mirando todo mi codigo y para usar el reloj en tiempo real ya usa delay ya que no encontre una libreria que funcionara y la unica manera de hacer que funcionara fue asi.

como me esta costando lo que voy hacer es cambiar el codigo que escribi donde solo tengo la cuenta atras sin ponerlo en el codigo donde tengo configurado los sensores y ver si soy capaz de hacerlo.

ire informando..
26  International / Español / Re: Cuenta atras para alarma Nuevo PROBLEMA on: April 05, 2012, 08:48:27 am
Yo he realizado varias alarmas. Las primeras eran prehistóricas pero ahora ya tienen su punto. Lo único que me falta es poder guardar los eventos en la eeprom en función del reloj. Sigo tu post atento.
Si necesitas ideas o ayudas aquí me tienes.

Ok, muchas gracias, de momento a ver si puedo cambiar lo de delay y asi poder desconectar la alarma y ir añadiendo sensores.

Tambien tengo pensado poner un modulo reproductor de audio para simular jaleo de gente en la casa, grabando unas cuantas horas para no reproducir lo mismo, aunque me parece que me queda tiempo para llegar a tanto jejeej.
27  International / Español / Re: Programador AVR TTL o convesor usb TTL? on: April 05, 2012, 08:44:58 am
Es verdad, perdona, se me paso el enlace jejeje.

El programador seria este:

http://www.ebay.es/itm/USBASP-USBISP-AVR-Programmer-USB-ATMEGA8-ATMEGA128-New-/370532286436?pt=LH_DefaultDomain_0&hash=item564571ffe4

28  International / Español / Re: Cuenta atras para alarma Nuevo PROBLEMA on: April 04, 2012, 06:37:50 am
Tiozes,

No tienes que utilizar delay(), sino usar variables para compararlas con el tiempo que lleva arduino encendido, de esta forma puedes decidir cuando mostrar el siguiente número en tu LCD sin parar el código.

ejemplo:

Var A = millis() --> Guarda en A el tiempo actual (en milisegundos)
...
...
if (millis() >= A+1000) --> esto se puede leer como: "Si ha pasado un segundo entonces"
{
*** representa el siguiente numero ***
A = millis()  ---> vuelves a guardar el nuevo “tiempo” para el próximo chequeo
}

Lógicamente lo que te he puesto no es código... sino para que se entienda.

No he leído todo tu código, pero supongo que tendrás que modificarlo bastante para que te funcione. En un sistema de alarma no puedes utilizar ni un solo delay() porque podría dar la casualidad de que en ese justo segundo pase algo de lo que te quieras enterar... smiley-wink

Un Saludo


Ummmm, no habia caido en lo de usar delay, porque claro usandolo se para el codigo alli durante el tiempo marcado, espero haberlo entendido bien.

Pues a modificarlo... a ver que tal queda la cosa, despues de comer me pondre a ello a ver que sale.

Muchas gracias
29  International / Español / Programador AVR TTL o convesor usb TTL? on: April 04, 2012, 05:15:18 am
Buenas a todos, voy a montar unas placas standalone de estas:

http://arduino.cc/es/Main/Standalone

Pero no le quiero poner el puerto usb.

Podria usar este programador para programarlo como se hace con placa arduino uno y leer los datos del puerto serial cuando conecte el programador?

o este programador solo sirve para meterle el boorloader?

y para hacer lo que quiero necesito un conversor de usb a ttl como este:

http://www.ebay.es/itm/FT232RL-Mini-USB-to-serial-TTL-5V-3-3V-module-for-Arduino-Duemilanove-Mega-/390370158855?pt=LH_DefaultDomain_0&hash=item5ae3dfe907#ht_1412wt_952

Saludos y gracias
30  International / Español / Re: Necesito ayuda con mi display de DFrobot I2C on: April 04, 2012, 04:49:16 am
Yo tengo funcionando una pantalla = a esa y 0 problemas, si que no estoy usando la ultima version del IDE porque no soportaba la libreria y no encontre ninguna que funcionara, asi esque uso la version anterior y de momento bien.


Pages: 1 [2] 3 4 ... 6