Asignar valor a variables desde Serial.


buenas tardes todos, tengo una duda con este programa:
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 ?


Arduino Forum > International > Español > Software (Moderators: surbyte, Hector_A) > Asignar valor a variables desde Serial.


arduino

Comments