Paso 6: Module1 - Arduino/RTC - prueba código
Tenga en cuenta que todo el código para este proyecto fue escrito en Arduino 0022. Aún no he probado 1.0.
No he podido subir ningún código como .pde archivos. No sé por qué. Nuevamente les he nombrado como .txt que se puede abrir en WordPad y copiar/pegar en el IDE o usted puede cambiar el nombre ellos .pde cuando ha descargado.
SUBIENDO:
Este pequeño Ardu' no disponen de un elegante auto-reset. Como resultado, necesitamos presionar el botón de reinicio en el momento correcto. He visto varias formas sugeridas para este momento, pero este funciona bien para mí:
1) - Conecte los pines Tx y Rx de su convertidor de USB a los encabezados en las patillas 2 y 3 de la viruta (D0 y D1).
2) - la placa de potencia (desde la USB si es posible - si no Asegúrese de que las conexiones de tierra están Unidas pero el + 5V no son!).
3) - Asegúrese de que seleccione "Duemilanove/Tiny con 328" como el tablero de la blanco.
4) - haga clic en el botón de carga en el IDE.
5) - mientras que el código compila, ver la línea de estado en la parte inferior de la ventana del IDE.
6) - tan pronto como la pequeña ventana en la parte inferior del IDE te dice el tamaño de su bosquejo compilado, pulse reset.
7) - las luces de Tx/Rx en su convertidor de USB deben flash por un tiempo.
Si por cualquier motivo no funciona la primera vez, lo hará tiempo después unos 30 segundos y usted puede intentarlo. Es muy raro para que tome más de dos intentos.
El código adjunto se establece inicialmente el tiempo y luego Mostrar la hora en la ventana de Monitor serie del IDE. En la rutina de "setup" usted puede enviar de un carácter "R" para ajustar el tiempo, así que nuevamente puede fijar el reloj cada vez que se reajuste su 328.
Luego preguntará por aspectos progresivamente menos significativos de la fecha y la hora y finalmente mostrar la configuración nuevo para confirmar. No es muy sofisticado, así que por favor, recuerde:
A cada entrada numérica requiere dos dígitos decimales, así que para el día 2 (martes) entrar en "02" en el monitor serial.
Cuando se solicita confirmación etc., se trata de caso específico, así para ajustar el reloj, solamente una "Y" hará como la respuesta final.
Una vez que el tiempo es el conjunto o "Q" de la rutina de ajuste entonces mostrará el tiempo de la RTC en el serial monitor cada segundo.
Obviamente, una vez que el RTC es su batería siga funcionando aún cuando se apague tu ardu' así que ahora puede ejecutar su propio bosquejo y látigo sólo algunas funciones de este bosquejo para el tiempo cuando lo necesite. Para el reloj terminado estableceremos el tiempo directo de la Ardu' pero necesitamos algunos insumos y una pantalla para eso! Tiempo de pasar a otro módulo...
****************
Bosquejo de reloj alarma luz de la Aurora de UGI.
Bosquejo de pruebas RTC
Licencia MIT
Esofagogastroduodenal Dic de 2012
Escrito por Arduino 022 en ATmega328.
requiere cable biblioteca
Conexiones de pines de Arduino:
A4 - 1307 (datos I2C)
A5 - 1307 (reloj I2C)
Configuración del reloj general:
#include < Wire.h > - / / analógico usees pines A4 (SDA - pin 27) y A5 (SCL pines 28) para los datos de 2 hilos.
byte const DS1307_Address = 0x68;
segundos bytes = 45, oldseconds = 0, minutos = 52, horas = 23, fecha = 8, mes = 12, día = 4 años = 11, proteger = 0; por defecto sólo para empezar por alguna parte.
byte NEWseconds = 45, NEWminutes = 52, NEWhours = 23, NEWdate = 8, NEWmonth = 12, NEWday = 4, AñoNuevo = 11; Estas son para el ajuste.
void setup() {}
Serial.Begin(9600); Serial.println ("DS1307 RTC basado en reloj - Ugi 2012");
Delay(2000); Dar RTC algunos tiempo de asentarse.
Wire.Begin(); Necesidad de RTC
RTCsetFromSerial(); Oportunidad para fijar hora de serie cada reset. Podrían permitir un tiempo de espera.
}
void loop() {}
RTCread();
RTCprintTime(); envía tiempo serie.
Delay(1000);
} / / Fin de bucle principal
Leer hora del RTC en variables de tiempo.
void RTCread() {}
datos del octeto [11] = {0,0,0,0,0,0,0,0,0,0,0};
Wire.beginTransmission(DS1307_Address);
Wire.Send(0); registro establecido al principio
Wire.endTransmission();
Wire.requestFrom (DS1307_Address, (byte) 10); Realice 7 bytes en búfer de RTC.
para (_loop byte = 0; _loop < 10; _loop ++) {}
Data[_loop]=(Wire.Receive());
}
segundos = (((B01110000 & datos [0]) >> 4) * 10) + (datos [0] & B00001111);
minutos = (((B01110000 & datos [1]) >> 4) * 10) + (datos [1] y B00001111);
horas = (((datos [2] y B00110000) >> 4) * 10) + (datos [2] y B00001111);
día = (datos [3] y B00000111);
fecha = (((datos [4] y B00110000) >> 4) * 10) + (datos [4] y B00001111);
mes = (((datos [5] y B00010000) >> 4) * 10) + (datos [5] y B00001111);
año = (((datos [6] y B11110000) >> 4) * 10) + (datos [6] y B00001111);
}
Escriba la hora actual a RTC
void RTCwrite() {/ / escribe todos los datos actuales en RTC - si solo desea escribir un parámetro luego de leer el reloj primero!
datos del octeto [7];
datos [0] = (segundos % 10) + ((seconds/10) << 4);
datos [1] = (minutos % 10) + ((minutes/10) << 4);
datos [2] = (horas % 10) + ((hours/10) << 4);
datos [3] = día;
datos [4] = (fecha % 10) + ((date/10) << 4);
datos [5] = (% mes 10) + ((month/10) << 4);
datos [6] = (año % 10) + ((year/10) << 4);
Wire.beginTransmission(DS1307_Address);
Wire.Send(0); registro establecido al principio
para (_loop byte = 0; _loop < 7; _loop ++) {}
Wire.Send(Data[_loop]);
}
Wire.endTransmission();
oldseconds = segundos;
} / / Fin función RTC escribir
Imprimir la hora actual Serial...
void RTCprintTime() {}
RTCread();
Serial.Print ("tiempo ="); Serial.Print (horas, DEC); Serial.Print(":"); Serial.Print (minutos, DEC); Serial.Print(":"); Serial.println (segundos, DEC);
Serial.Print ("fecha ="); Serial.Print (fecha, DEC); Serial.Print("/"); Serial.Print (mes, DEC); Serial.Print("/20"); Serial.Print (año, DEC);
}
byte RTCgetSerial (_val de byte, cadena _Str) {}
Serial.println("");
Serial.println ("***"+ _Str +"***");
Serial.Print ("valor ="); Serial.Print (_val, DEC); Serial.println ("" + _Str);
Serial.println ("Introduzca el nuevo valor (dos dígitos por ejemplo, '01'):");
Serial.Flush();
byte NEW_val = -1;
mientras que (Serial.available() < 2) {}
Delay(50);}
NEW_val = ((Serial.read()-48)*10);
NEW_val NEW_val = (Serial.read()-48);
Serial.Flush();
Serial.Print ("nuevo valor ="); Serial.Print (NEW_val, DEC); Serial.println ("" + _Str); Serial.println("");
Si (NEW_val > = 0) {vuelta NEW_val;}
Else {volver _val;}
}
Boolean RTCconfirm() {}
Serial.println("");
Serial.println("currently:");
RTCprintTime();
Serial.Flush();
Serial.println("");
¿Serial.println ("cambio a? (Y/N): ");
Serial.Print ("tiempo ="); Serial.Print (NEWhours, DEC); Serial.Print(":"); Serial.Print (NEWminutes, DEC); Serial.Print(":"); Serial.println (NEWseconds, DEC);
Serial.Print ("fecha ="); Serial.Print (NEWdate, DEC); Serial.Print("/"); Serial.Print (NEWmonth, DEC); Serial.Print("/20"); Serial.Print (AñoNuevo, DEC);
char ZMWS = -1;
mientras que (Serial.available() < 1) {}
Delay(50);}
ZMWS = Serial.read();
Serial.Flush();
Serial.Print ("confirmar dígitos ="); Serial.println(_conf);
if(_conf=='Y') {return true;}
Else {vuelta falso;}
}
Boolean RTCsetFromSerial() {}
Obtener nuevo ajuste del tiempo de puerto serie
Serial.Flush(); evitar cualquier al azar datos en buffer.
Ver si quiere actualizar
char _input = 'X';
mientras que (_input! = 'R' & & _input! = 'Q') {}
mientras que (Serial.available() < 1) {}
RTCprintTime(); A seguir mostrando la hora actual y ver si necesita actualizar.
Serial.println ("Enter 'R' por la entrada serial para volver a definir") o Q para salir de configuración de rutina;
Serial.println("");
Delay(1000);
}
_input = Serial.read();
Serial.Flush();
}
Si (_input! = ' R'){Serial.println(""); Serial.println ("*** fumar ***"); Serial.println(""); devuelven el valor false;}
Serial.println("");
Serial.println ("*** RTC reposición ***");
Serial.println("");
RTCprintTime();
AñoNuevo = RTCgetSerial (año, "años");
RTCprintTime();
NEWday = RTCgetSerial (día, "día de la semana");
RTCprintTime();
NEWmonth = RTCgetSerial (meses, "meses");
RTCprintTime();
NEWdate = RTCgetSerial (fecha, "días del mes");
RTCprintTime();
NEWhours = RTCgetSerial (horas, "Horas");
RTCprintTime();
NEWminutes = RTCgetSerial (minutos, "Minutos");
RTCprintTime();
NEWseconds = RTCgetSerial (segundos, "Segundos");
Si (RTCconfirm()) {}
segundos = NEWseconds;
minutos = NEWminutes;
horas = NEWhours;
fecha = NEWdate;
mes = NEWmonth;
día = NEWday;
año = AñoNuevo;
RTCwrite();
Serial.println ("");
Serial.println ("*** RTC actualizado ***");
verdaderas;
}
Else {}
Serial.println ("*** actualización cancelada ***");
}
devuelven el valor false;
}