buenas tardes todos, tengo una duda con este programa:
lo que pasa es que este programa lo que hace es apagar y encender dos cargas en cierto horario, además de que permite configurar hora y fecha desde el puerto serial pero necesito además de eso agregar una variable que permita configurar la hora de encendido y apagado de las cargas, además de los días en que debe funcionar o no esa cargas ya que necesito realizar esas funcionalidades con un modulo serial bluetooth, podían apoyarme en este caso? de antemano gracias. (una disculpa por lo de las normas, y si, la conexión deseo usarla desde un celular mandando caracteres al puerto serial pero necesito configurar esas opciones desde el celular como sería el control de luces y la hora en que deben apagarse y prenderse además de la configuración de hora y fecha desde el puerto serial.)
code: [select]
#include <wire.h>
#include <liquidcrystal.h>
liquidcrystal lcd(8, 9, 4, 5, 6, 7);
long previousmillis = 0, interval = 100;
const byte ds1307_id = 0x68;
const byte nocampos = 7;
byte second, minute, hour;
byte wday, day, month, year;
//hora, fecha y ctrl sec min hr wd dia mes año ctrl
//byte horayfecha[nocampos + 1] = {0x00, 0x20, 0x12, 0x05, 0x21, 0x02, 0x15, 0x00};
const int ledpin2 = 12;
const int ledpin = 13;
bool ledstate = low;
int fieldindex = 0; // índice
int values[nocampos]; // arreglo para guardar datos recibidos
void setup() {
pinmode (ledpin, output);
pinmode (ledpin2, output);
wire.begin();
//lcd.print("rtc via i2c");
{
serial.begin(9600);
}
}
void loop() {
unsigned long currentmillis = currentmillis - millis();
if (currentmillis - previousmillis > interval)
{
previousmillis = currentmillis;
rtc_read();
rtc_print();
rtc_write();
long hrcompleta = hour;
hrcompleta = (hrcompleta << 8) + minute;
if (hrcompleta == 0x0700 && hrcompleta < 0x2000)
{
digitalwrite(ledpin, high);
digitalwrite(ledpin2, high);
}
else
{
digitalwrite(ledpin, low);
digitalwrite(ledpin2, low);
}
if (wday == 0x01 || wday == 0x07)
{
digitalwrite (ledpin2, low);
}
}
}
void rtc_read() {
wire.begintransmission(ds1307_id);
wire.write(0x00);
wire.endtransmission();
wire.requestfrom(ds1307_id, nocampos);
second = wire.read() & 0x7f;
minute = wire.read();
hour = wire.read() & 0x3f;
wday = wire.read() & 0x07;
day = wire.read();
month = wire.read() & 0x1f;
year = wire.read();
}
void rtc_print() {
serial.print("fecha: ");
if (day < 10) serial.print("0");
serial.print(day, hex);
serial.print("-");
if (month < 10) serial.print("0");
serial.print(month, hex);
serial.print("-");
serial.print("20");
if (year < 10) serial.print("0");
serial.print(year, hex);
serial.print(" ");
serial.print("hora: ");
if (hour < 10) serial.print("0");
serial.print(hour, hex);
serial.print(":");
if (minute < 10) serial.print("0");
serial.print(minute, hex);
serial.print(":");
if (second < 10) serial.print("0");
serial.print(second, hex);
serial.print(" ");
serial.print("dia numero:");
serial.print(wday, hex);
serial.println(" ");
//al lcd
lcd.begin(16, 2);
lcd.print("fecha:");
if (day < 10) lcd.print("0");
lcd.print(day, hex);
lcd.print("-");
if (month < 10) lcd.print("0");
lcd.print(month, hex);
lcd.print("-");
lcd.print("20");
if (year < 10) lcd.print("0");
lcd.print(year, hex);
lcd.print(" ");
lcd.setcursor (0, 1);
lcd.print("hora: ");
if (hour < 10) lcd.print("0");
lcd.print(hour, hex);
lcd.print(":");
if (minute < 10) lcd.print("0");
lcd.print(minute, hex);
lcd.print(":");
if (second < 10) lcd.print("0");
lcd.print(second, hex);
lcd.print(" ");
}
void rtc_write() {
if ( serial.available())
{
char ch = serial.read();
if (ch >= '0' && ch <= '9') // es un caracter válido ?
{
//si, acumular el valor
values[fieldindex] = (values[fieldindex] * 16) + (ch - '0');
}
else if (ch == ',') // la ',' es el separador y se incrementa el índice
{
// if (fieldindex < horayfecha - 1)
fieldindex++; // incremento del índice
}
else
{
// al recibir cualquier caracter diferente de '0'-'9' o ','
serial.print( fieldindex + 1);
serial.println(" fields received:");
wire.begintransmission(ds1307_id);
wire.write(0x00);
for (int = 0; <= fieldindex; i++)
{
serial.println(values[i], hex);
wire.write(values[i]);
values[i] = 0;
// inicialización de valores 0
}
// inicialización del índice 0
fieldindex = 0;
wire.endtransmission();
}
}
}
lo que pasa es que este programa lo que hace es apagar y encender dos cargas en cierto horario, además de que permite configurar hora y fecha desde el puerto serial pero necesito además de eso agregar una variable que permita configurar la hora de encendido y apagado de las cargas, además de los días en que debe funcionar o no esa cargas ya que necesito realizar esas funcionalidades con un modulo serial bluetooth, podían apoyarme en este caso? de antemano gracias. (una disculpa por lo de las normas, y si, la conexión deseo usarla desde un celular mandando caracteres al puerto serial pero necesito configurar esas opciones desde el celular como sería el control de luces y la hora en que deben apagarse y prenderse además de la configuración de hora y fecha desde el puerto serial.)
un par de cosa, seguro algun pesadito te va decir , que uses el "[c.ode][/c.ode]", para ingresarl tu code.
segundo no dices con que lo vas conectar, no es lo mismo conectarlo un pc que un celular por ejemmplo.
tercero, si es la pc , con que programa te vas conecrte ?
segundo no dices con que lo vas conectar, no es lo mismo conectarlo un pc que un celular por ejemmplo.
tercero, si es la pc , con que programa te vas conecrte ?
Arduino Forum > International > Español > Software (Moderators: surbyte, Hector_A) > Asignar valor a variables desde Serial.
arduino
Comments
Post a Comment