Show Posts
Pages: 1 ... 38 39 [40] 41 42 ... 49
586  International / Español / Re: problema pines analogicos on: August 20, 2011, 06:47:44 am
Hola fermg,
en el ejemplo tienes analogRead(0), yo creo que debes probar poniendo  analogRead(A0)
587  International / Español / guardar float en la EEPROM interna usando union (info) on: August 20, 2011, 01:11:04 am
Hola,
He encontrado en el foro italiano otra forma de convertir float o int a byte y viceversa: lo hace utilizando el tipo de dato union del lenguaje C
Para un float se define una union que contiene dos elementos, un float y un array de 4 bytes. Al contenido de esa union (que son 4 bytes) se puede acceder  como si se tratara de una variable float, o  como si se tratara de un array de 4 bytes. En el ejemplo de abajo se escribe un float en la EEPROM interna, y luego un int. Y se reconstruye el valor de las variables leyendo de la EEPROM.

Code:
#include <EEPROM.h>

union Float_Byte
{
 float datoF;
 byte  datoB[4];
} unionFB;

union Integer_Byte
{
 int  datoI;
 byte datoB[2];
} unionIB;


void setup()
{
   Serial.begin(9600);
}


void loop()
{
   unionFB.datoF = -12.13 ;

   Serial.print("\nFloat 1: ") ;
   Serial.println(unionFB.datoF);
   Serial.print("\nbyte1: ");  Serial.print(unionFB.datoB[0], DEC) ; // 123
   Serial.print("\nbyte2: ");  Serial.print(unionFB.datoB[1], DEC) ; // 20
   Serial.print("\nbyte3: ");  Serial.print(unionFB.datoB[2], DEC) ; // 66
   Serial.print("\nbyte4: ");  Serial.print(unionFB.datoB[3], DEC) ; // 193
  
   // guardar un float en la EEPROM en las posiciones 0-3
   EEPROM.write(0, unionFB.datoB[0]);
   EEPROM.write(1, unionFB.datoB[1]);
   EEPROM.write(2, unionFB.datoB[2]);
   EEPROM.write(3, unionFB.datoB[3]);
    
 
  
   // reconstuir el float leyendo la EEPROM
   unionFB.datoF = 0.0 ;
   unionFB.datoB[0] =  EEPROM.read(0);
   unionFB.datoB[1] =  EEPROM.read(1);
   unionFB.datoB[2] =  EEPROM.read(2);
   unionFB.datoB[3] =  EEPROM.read(3);

   Serial.print("\n\nFloat 2: ");
   Serial.println(unionFB.datoF);
      
   // guardar un int en las posiciones 4-5  de la EEPROM
   unionIB.datoI = -12 ;

   Serial.print("\nInt 1: ") ;
   Serial.println(unionIB.datoI);
  
   Serial.print("\nbyte1: ");  Serial.print(unionIB.datoB[0], DEC) ; // 244
   Serial.print("\nbyte2: ");  Serial.print(unionIB.datoB[1], DEC) ; // 255
      
   EEPROM.write(4, unionIB.datoB[0]);
   EEPROM.write(5, unionIB.datoB[1]);
  
   // reconstuir el int leyendo la EEPROM
   unionIB.datoI = 0 ;
   unionIB.datoB[0] =  EEPROM.read(4);
   unionIB.datoB[1] =  EEPROM.read(5);

   Serial.print("\n\nInt 2: ");
   Serial.println(unionIB.datoI);
  
   delay(5555); // para no desperdiciar ciclos
}

588  International / Español / Re: problema pines analogicos on: August 19, 2011, 10:37:44 pm
Hola,
en analogRead(0) estás usando el pin digital 0 (el RX). Los pines analógicos son los que van del 14 a 19.
589  International / Español / Re: Rellenar con ceros a la izquierda con Sprintf [SOLUCIONADO] on: August 19, 2011, 10:25:00 am
Hola Heke,
sprintf() funciona igual que fprintf(): este último escribe una salida formateada a un fichero, y el primero lo escribe a una cadena de caracteres.


590  International / Español / Re: Rellenar con ceros a la izquierda con Sprintf on: August 18, 2011, 10:35:42 pm
Hola,
prueba a hacer esto
Code:
  int dia;
  char diatxt[3];

  dia = 3;
  sprintf(diatxt, "%.2d", dia);
591  International / Español / Re: adaptar un reloj RTC al horario peninsular (info) on: August 18, 2011, 12:38:21 am
Hola,
en DS1307.h se definen los días,

#define MONDAY      1
#define TUESDAY      2
#define WEDNESDAY   3
#define THURSDAY   4
#define FRIDAY      5
#define SATURDAY   6
#define SUNDAY      7

El primero es el lunes, debe ser por aquello de "y al séptimo descansó"



592  International / Español / Re: Descomponer cifras del año que estan en DEC en un array de sus cuatro cifras on: August 17, 2011, 01:27:42 pm
Hola,
Yo haría así para pasar un int a cadena char:

Code:
int anno;
char annotxt[5];

anno = 2011;
sprintf(annotxt, "%d", anno);
593  International / Español / Re: Chip ATMega 328 de Arduino: Dos patillas de Vcc on: August 16, 2011, 09:09:24 am
Hola,
creo que el pin AVCC (patilla 20) es para el conversor analógico-digital.
594  International / Español / Re: ATmega328 with Arduino Bootloader: Duemilanove o Uno? on: August 16, 2011, 05:57:56 am
Eskerrik asko, CrossRoads
595  International / Español / Re: ATmega328 with Arduino Bootloader: Duemilanove o Uno? on: August 15, 2011, 10:58:37 pm
Hola,
resumiendo: ¿puedo construir un minimalista con un atmega328 que trae Bootloader UNO, como hacía hasta ahora con el anterior?
Gracias

596  International / Español / ATmega328 with Arduino Bootloader: Duemilanove o Uno? on: August 15, 2011, 11:55:58 am
Hola,
He solido  usar "ATmega328 with Arduino Duemilanove Bootloader" (Sparkfun) para montar Arduinos minimalistas (cristal 16MHZ, dos condensadores de 22pF, botón de reset con una resistencia y regulador de 5V). Para cargar los sketchs uso "FT232RL Breakout Board" de Sparkfun.

Ahora lo han retirado, y ofrecen "ATmega328 with Arduino Optiboot (Uno)". ¿Lo podría usar de la misma manera? ¿Qué tendría que cambiar?
Gracias.
597  International / Español / Re: adaptar un reloj RTC al horario peninsular (info) on: August 15, 2011, 08:14:52 am
Hola,
En cada ciclo de loop() se ejecuta la función que he denominado "leer_hora()", pero que en realidad en el sketch se llama
Code:
getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);

598  International / Español / adaptar un reloj RTC al horario peninsular (info) on: August 15, 2011, 01:28:58 am
Hola,
He montado un reloj RTC DS1307 (ebay 7,90 euros) con un atmega328 con los componentes mínimos, y funciona perfectamente. Voy a intentar que realice determinadas tareas en determinados días del calendario. Pero el  problema que se me ha planteado es el calendario peninsular, adelantado una hora al horario solar en invierno, y adelantado en dos horas en verano.

He ajustado el DS1307 al horario solar (dos horas menos que lo que indica ahora el reloj del PC), y he pensado esta solución para que

- el último domingo de marzo el Arduino se ajuste  al horario de verano
- el último domingo de octubre el Arduino se ajuste al horario de invierno

Code:
#define VERANO 2
#define INVIERNO 1

int adelanto;

setup()
{
   // realizar un primer ajuste por meses hasta que llegue un cambio de hora
   leer_hora();
   if(mes > MARZO && mes < NOVIEMBRE) adelanto = 2;
   else adelanto = 1;

}


loop()
{
leer_hora();
if(mes == MARZO && dia_mes > 24 && dia_semana == DOMINGO)
{
   if(adelanto == INVIERNO) adelanto = VERANO;
}

if(mes == OCTUBRE && dia_mes > 24 && dia_semana == DOMINGO)
{
   if(adelanto == VERANO) adelanto = INVIERNO;
}

El último domingo de un mes de 31 días es el domingo que toca a partir del día 25 ( si el 24 fuera domingo, también lo sería el 31)
En setup() se hace un primer ajuste por meses, para que sirva hasta que llegue la comprobación de marzo u octubre.
Seguro que esto estaba más que inventado, pero a mí me ha producido satisfacción el reinventarlo.
Acepto sugerencias para mejorar.

 




599  International / Español / Re: Alguien monto el RTC con el DS1703 (Circuito) on: August 07, 2011, 01:05:06 pm
Hola,
yo conozco el DS1307. Si este topic se refiere a ese reloj, mejor corregir la errata.
600  International / Español / Re: cámara y arduino on: August 01, 2011, 01:52:41 pm
Hola,
cuando conecto mi cámara por usb al PC, veo un disco lleno de carpetas que contienen fotos. ¿Cómo se puede utilizar esa conexión para disparar la cámara?
Pages: 1 ... 38 39 [40] 41 42 ... 49