LusoRobótica - Robótica em Português

Robótica => Projectos de robótica => Tópico iniciado por: danuca em 07 de Setembro de 2012, 14:40

Título: Sistema Rega Automático com interface VB
Enviado por: danuca em 07 de Setembro de 2012, 14:40
Boas
Estou a fazer um Sistema de rega automático com interface VB para facilitar a interacçao com o utilizador.

A programação tem de ser em arduino UNO, ou seja nao precisamos do pc ligado para funcionar.
Fiz um relógio em arduino, que funciona bem, o meu problema para já é como fazer para acertar o relógio.

O meu programa é este:

char hor,*hor2;
int horas;

int seg=0;
int minu=0;
 

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

void loop()

 
    processSyncMessage();
 

if(horas < 24 && horas >0){ 
static unsigned long ult_tempo=0;
int tempo = millis();
if(tempo - ult_tempo >= 1000){
  ult_tempo=tempo;
  seg++;
}
if (seg>=60) {
   seg=0;
   minu++;
}

if (minu>=60) {
   minu=0;
   horas++;
}

if (horas>=24) {
   horas=0;
   minu=0;
}
Serial.print(horas);
Serial.print(":");
Serial.print(minu);
Serial.print(":");
Serial.println(seg);
delay(1000);
}

}


void processSyncMessage() {

      if(Serial.available()>0 )
    {
      for(int i=0; i<2; i++) {
      hor=Serial.read();
      if( hor >= '0' && hor <= '9'){ 
      *hor2=hor;
      horas=atoi(hor2);
      }
     
    }
    //Serial.println(horas);
    }
}



O problema é que inserindo por exemplo 22 no serial monitor, o relógio apenas fica com o valor de horas 2, e eu nao percebo porquê.

Desde já obrigado.
Cumprimentos
Título: Re: Sistema Rega Automático com interface VB
Enviado por: Pedrock em 07 de Setembro de 2012, 15:44
Isso assim vai atrasar rapidamente.
O melhor é comprares um módulo "real time clock" ou então podes usar esta biblioteca:
http://arduino.cc/playground/Code/Time (http://arduino.cc/playground/Code/Time)
Título: Re: Sistema Rega Automático com interface VB
Enviado por: dropes em 07 de Setembro de 2012, 16:00
Sim, sem um RTC não vais longe, comunicam via I²C e o acerto pode ser realizado por interface do arduino ao PC.
Deve-se manter o RTC em funcionamento quando o arduino está desligado, o consumo é insignificante pelo que funciona com pilha tipo botão de 3V ou supercap (em caso de falha de alimentação).
Título: Re: Sistema Rega Automático com interface VB
Enviado por: danuca em 07 de Setembro de 2012, 16:33
Pois, mas não posso mesmo comprar o RTC, eu já tinha visto muito pessoal a dizer que era muito porreiro mas o máximo que posso fazer é usar a biblioteca TIMER. Eu também já tinha tentado fazer o relógio com a biblioteca Time, mas usando o exemplo que eles têm do TimeSerial, nao consigo acerta-lo.

Por exemplo: usando a biblioteca deles do TimeSerial, eles têm esta função que calcula o tempo:


void processSyncMessage() {
  // if time sync available from serial port, update time and return true
  while(Serial.available() >=  TIME_MSG_LEN ){  // time message consists of a header and ten ascii digits
    char c = Serial.read() ;
    Serial.print(c); 
    if( c == TIME_HEADER ) {       
      time_t pctime = 0;
      for(int i=0; i < TIME_MSG_LEN -1; i++){   
        c = Serial.read();         
        if( c >= '0' && c <= '9'){   
          pctime = (10 * pctime) + (c - '0') ; // convert digits to a number   
        }
      }   
      setTime(pctime);   // Sync Arduino clock to the time received on the serial port
    } 
  }
}

Só que esta função pelo que eu entendo transforma 10 caracteres ascii numa data e o que eu queria era que por exemplo ao escrever no serial monitor 23:10:00 12/12/2012
acertasse a hora, e nao como eles têm.

Obrigado pelas rápidas respostas.
Cumprimentos
Título: Re: Sistema Rega Automático com interface VB
Enviado por: Sextafeira em 07 de Setembro de 2012, 17:04
uma duvida isso vais estar sempre ligado a um pc ? (ou seja para realizar a comunicação com o visual basic ?)
Título: Re: Sistema Rega Automático com interface VB
Enviado por: danuca em 07 de Setembro de 2012, 17:08
Vai estar sempre ligado ao pc, mas se desligares o pc o objectivo é que ele continue a funcionar, daí eu precisar de fazer o relógio e as comparações no arduino. Ou seja, marcamos uma hora com o pc para ele regar, e mesmo despois do pc desligado, o objectivo é ele continuar a funcionar. Mas eu pra já apenas queria era fazer o relógio com o TimeSerial e conseguir acerta-lo.

Cumprimentos
Título: Re: Sistema Rega Automático com interface VB
Enviado por: danuca em 07 de Setembro de 2012, 21:45
Boas

Consegui resolver o primeiro problema: ou seja, tennho um relógio e consigo programa-lo pelo serial monitor:

#include <Time.h> 


String readString;


void setup()  {
  Serial.begin(9600);
  Serial.println("Waiting for sync message");
}

void loop(){   
  if(Serial.available() )
  {
    processSyncMessage();
  }
  delay(1000);
  digitalClockDisplay();
 
 }
 
 
 void digitalClockDisplay(){
  // digital clock display of the time
  Serial.print(hour());
  printDigits(minute());
  printDigits(second());
  Serial.print(" ");
  Serial.print(day());
  Serial.print(" ");
  Serial.print(month());
  Serial.print(" ");
  Serial.print(year());
  Serial.println();
}

void printDigits(int digits){
  // utility function for digital clock display: prints preceding colon and leading 0
  Serial.print(":");
  if(digits < 10)
    Serial.print('0');
  Serial.print(digits);
}


void processSyncMessage() {
 
 
if(Serial.available() >=  8 ){
   char number1[3] = { Serial.read(), Serial.read() , ':'};
   Serial.read();//flush the delim
   char number2[3] = { Serial.read(), Serial.read() , ':' };
   Serial.read();//flush the delim
   char number3[3] = { Serial.read(), Serial.read() , '-' };
   Serial.read();//flush the delim
   char number4[3] = { Serial.read(), Serial.read() , '/' };
   Serial.read();//flush the delim
   char number5[3] = { Serial.read(), Serial.read() , '/' };
   Serial.read();//flush the delim
   char number6[5] = { Serial.read(), Serial.read() , Serial.read(), Serial.read(), '\0' };
 
   int number10=atoi(number1);
   Serial.println(number10);
   int number11=atoi(number2);
   Serial.println(number11);
   int number12=atoi(number3);
   Serial.println(number12);
   int number13=atoi(number4);
   Serial.println(number13);
   int number14=atoi(number5);
   Serial.println(number14);
   int number15=atoi(number6);
   Serial.println(number15);
   setTime(number10,number11,number12,number13,number14,number15);
 }
}


e com este programa fico com este output:
0:00:17 1 1 1970
0:00:18 1 1 1970
0:00:19 1 1 1970
22
10
2
9
10
2011
22:10:03 9 10 2011
22:10:04 9 10 2011
22:10:05 9 10 2011
22:10:06 9 10 2011

O problema é que agora eu precisava de enviar uma string pelo visual basic ( ex: uma textbox) e depois precisava de guardar essa string para depois o programa inicializar com o novo horário.

Alguém tem alguma ideia ?
Título: Re: Sistema Rega Automático com interface VB
Enviado por: Pedrock em 07 de Setembro de 2012, 21:49
Acho que é melhor pores um botão (ou então mesmo no início do programa VB) com uma função que vê a hora do PC e envia-a para o Arduino.
Título: Re: Sistema Rega Automático com interface VB
Enviado por: danuca em 07 de Setembro de 2012, 22:31
Sim e eu coloquei um botão no VB. Só que eu nao quero enviar a hora do pc para o arduino, apenas quero enviar uma string que acerta a hora.

Porque eu já tenho um relógio em arduino, que começa por defeito em 1970. Só que interessa-me agora que seja o utilizador e acertar o relógio, a dizer a que horas é que o sistema activa a rega, essas coisas.. mas isso em VB, para ser mais fácil para o utilizador.

Só que já fiz uma pesquisa e não encontro nada de como enviar uma string do VB para o arduino.

Título: Re: Sistema Rega Automático com interface VB
Enviado por: Pedrock em 07 de Setembro de 2012, 22:36
Não sei se é bem isso que queres, mas não seria melhor acertar o relógio do Arduino com o do PC, e depois o utilizador dizia a que horas era para ligar? Horas estas que eram enviadas para o Arduino.
Quando ao enviar dados do VB.net para o Arduino, tens este tutorial aqui:
http://www.instructables.com/id/Using-Visual-Basic-to-control-Arduino-Uno/ (http://www.instructables.com/id/Using-Visual-Basic-to-control-Arduino-Uno/)
Título: Re: Sistema Rega Automático com interface VB
Enviado por: Sextafeira em 07 de Setembro de 2012, 22:45
acho que primeiro tens de fazer a leitura do relógio do arduino para uma label no visual basic e depois enviar o acerto para la.

eu também tive este problema mas acabei por resolver, sem querer eu comprei um Magalhães 10€ liguei la o arduino e estou a fazer uma aplicação com as comunicações serial e tcp/ip este é para depois comunicar com uma web form, e os tempos é dado pela minha aplicação em vb como esta sempre ligado
Título: Re: Sistema Rega Automático com interface VB
Enviado por: rglove em 07 de Setembro de 2012, 23:49
Para não estares sempre preocupado a ver a porta a que o arduino está ligado podes através da função Serialportx.getportnames() (não tenho a certeza se é assim, mas é algo parecido) e obter todas as portas seriais ligadas ao computador. Depois com um for loop envias para todas as portas um byte qualquer ou vários bytes.
Programas o arduino para quando receber x byte ou x bytes enviar outro byte/s de resposta e o software que criares vai identificar a porta a que o arduino está ligado assim. No outro dia fiz isto e ficou fixe, detectava sempre a porta. Acho que não guardei o código, mas não é complicado.
Título: Re: Sistema Rega Automático com interface VB
Enviado por: danuca em 08 de Setembro de 2012, 16:19
Boas pessoal

Com as vossas sugestões estive a tentar concluir este problema mas não consegui.
O que eu queria para já, era enviar uma data e hora pelo Visual basic usando a porta série, e depois, usando o serial monitor do arduino, verificar se o meu relógio fica ou não acertado. Pelo que percebi é impossível, pois vai-me dar conflitos entre portas.

Porque como estou com o serial monitor aberto, ao carregar no botao que supostamente envia a hora do textbox ele da-me logo erro de conflitos de porta.

Alguém tem alguma solução para isto ?


Deixo aqui os dois programas de teste que estive a fazer:

VB

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        SerialPort1.Close()

        SerialPort1.BaudRate = 9600

        SerialPort1.DataBits = 8

        SerialPort1.StopBits = IO.Ports.StopBits.One

        SerialPort1.Parity = IO.Ports.Parity.None

        SerialPort1.PortName = "COM7"





    End Sub


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim horario As String
        horario = TextBox1.Text


        SerialPort1.Open()
        SerialPort1.Write("horario")
        SerialPort1.Close()


    End Sub
End Class

----------------------------------------------------------------//------------------------------------------------------------

ARDUINO

void setup()  {
  Serial.begin(9600);
  Serial.println("Waiting for sync message");
}


void loop(){   
  if(Serial.available() )
  {
    int val= Serial.read() - '0';
    Serial.println(val);
   }
  Serial.flush();
}


PEDROCK: o toturial que me deste tá muito porreiro, mas o gajo diz mesmo que para conseguir correr os programas, teve de deixar o serial monitor desligado, senao dáva conflitos.

Se alguém tiver alguma sugestão como dar a volta a isto agradecia.

Cumprimentos
   
Título: Re: Sistema Rega Automático com interface VB
Enviado por: Sextafeira em 08 de Setembro de 2012, 16:22
porta fechada

   SerialPort1.Close()

mete em open ou primeiro fecha e abre a seguir
Título: Re: Sistema Rega Automático com interface VB
Enviado por: senso em 08 de Setembro de 2012, 16:23
Não podes ter duas aplicações a aceder á mesma porta COM/serial, porque é que não lês o tempo no programa em VB ou então envias tudo pelo Monitor Serial, se bem que esse monitor não é grande coisa.
Título: Re: Sistema Rega Automático com interface VB
Enviado por: rglove em 08 de Setembro de 2012, 16:24
Se criares uma richtextbox e criares um sub para quando houver informação para ler na serial port podes mostrar a informação numa richtextbox. Não podes ter 2 programas abertos a usar a mesma serial port.

EDIT: Podes usar Serialportx.write(). Dá para enviares bytes assim, ou seja, valores entre 0 e 255. O arduino vai ler também valores entre 0 e 255. Assim não tens de subtrair 48 ou '0'. Como as horas e datas não ultrapassam valores de 255...
Título: Re: Sistema Rega Automático com interface VB
Enviado por: danuca em 08 de Setembro de 2012, 16:32
Mas eu no VB abri primeiro a porta e depois fechei .

Eu pra já só queria ver no serial monitor porque eu prefiro fazer a programação por passos. No final é pra ficar tudo visivel no VB.

Se puderem pegar nos meus exemplos e exemplificarem por favor, nao estou a perceber muito bem o porquê de isto funcionar, se eu abro a porta e depois fecho.
Título: Re: Sistema Rega Automático com interface VB
Enviado por: Hugu em 08 de Setembro de 2012, 16:37
posta aí uns print screens do teu interface e da evoluçao do projecto para irmos regalando os olhos!  ::)

ja agora pk n metes um RTC ou entao um receptor do sinal atomico europeu? terias smp as horas certas!
Título: Re: Sistema Rega Automático com interface VB
Enviado por: danuca em 08 de Setembro de 2012, 16:53
Porque é um projecto de faculdade, e nao dá pa gastar muito dinheiro. Acaba por nao ser importante ter as horas completamente certas.

Ainda nao tá acabado, mas fica aí o que tenho pra já. Os tomates e pimentos são apenas ilustrativos lol
Título: Re: Sistema Rega Automático com interface VB
Enviado por: Sextafeira em 08 de Setembro de 2012, 16:56
fiz isto para de explicar

ve o anexo

espero que ajude
Título: Re: Sistema Rega Automático com interface VB
Enviado por: danuca em 08 de Setembro de 2012, 17:22
Obrigado SextaFeira. Diz-me só uma coisa, como fizeste para abrires a ' private sub Form1_FormClosed' ?
Título: Re: Sistema Rega Automático com interface VB
Enviado por: Pedrock em 08 de Setembro de 2012, 17:28
Obrigado SextaFeira. Diz-me só uma coisa, como fizeste para abrires a ' private sub Form1_FormClosed' ?
É um evento. Nessa imagem, em cima, onde diz "Button2", clica aí e escolhe Form1. À direita, onde na imagem diz "Click", escolhe "FormClosed".
Título: Re: Sistema Rega Automático com interface VB
Enviado por: danuca em 08 de Setembro de 2012, 17:59
SextaFeira eu testei o teu programa. E pelo que percebi, enviamos informação pela porta serie do textbox 3 para o textbox2 certo ?

O que eu precisava era de quando enviasse a string da hora para o arduino, ele guardasse essa string, e depois podia ser com o VB desligado, o relógio em arduino começasse da hora que foi inserida pelo VB. É possível isto ?

Porque eu nunca vou usar o serial monitor do arduino, só preciso é que ele tenha um relógio sempre a funcionar, e que as ordens sejam dadas pelo VB, por exemplo: quero que ligue um led ás 22h de hoje, digito as 22h no VB, desligo o computador, e o arduino as 22h liga o LED.

Desculpem se nao estou a ser muito claro.

Título: Re: Sistema Rega Automático com interface VB
Enviado por: rglove em 08 de Setembro de 2012, 18:16
Dá uma vista de olhos no código que usei para o transmissor:
http://lusorobotica.com/index.php?topic=5125.0 (http://lusorobotica.com/index.php?topic=5125.0)

Enviavas uma string pelo serial monitor e a string era guardada no arduino. Não sei se ajuda alguma coisa.
Título: Re: Sistema Rega Automático com interface VB
Enviado por: danuca em 08 de Setembro de 2012, 18:29
Pois, eu pelo serial monitor consigo enviar uma string e imprimi-la, pelo VB é que não, porque só sei fazer pelo exemplo que o PEDROCK me deu daquele toturial, que faz o envio mas nao posso abrir o serial monitor. Eu gostava de saber se é possível enviar a string pelo VB, guarda-la no arduino, fechar o VB, e abrir o serial monitor do arduino e o relógio começar a dar com a string que foi guardada.
Título: Re: Sistema Rega Automático com interface VB
Enviado por: rglove em 08 de Setembro de 2012, 18:34
Possível é... Se leres o código que eu meti para o transmissor vês uma forma de guardar todos os bytes que envias pelo vb numa char array.
Depois abres o serial monitor, e se tiveres programado o arduino para se por exemplo receber um byte qualquer te enviar a string que tinha guardada...
Lembrei-me agora que quando abres o serial monitor do arduino IDE o arduino faz reset, portanto esquece esse serial monitor, tenta arranjar outro software para isso. Ou então podes fazer no vb como já te disseram...
Título: Re: Sistema Rega Automático com interface VB
Enviado por: danuca em 08 de Setembro de 2012, 18:40
Pois, também já tinha lido que o serial monitor faz reset ao arduino. Vou tentar enviar as horas para o VB então.
Título: Re: Sistema Rega Automático com interface VB
Enviado por: Sextafeira em 08 de Setembro de 2012, 18:59
a text 3 é para envio 

a text 2 le esta associada a um timer que esta sempre a ler a porta serial o que la cair aparece na text 2

envia em separado  2 mais 2 que ira fazer 22

Serial.write 2
Serial.write 2

depois no arduino fazes duas variáveis e colocas o 2 numa e outro noutra variável e depois fazes a soma das duas e guardas

ideia estúpida mas pode ser que resulte
Título: Re: Sistema Rega Automático com interface VB
Enviado por: Tech_JA em 08 de Setembro de 2012, 19:15
Porque é um projecto de faculdade, e nao dá pa gastar muito dinheiro.
danuca,
Não leves a mal o pessoal insistir mas já viste o preço de um RTC?
http://www.dealextreme.com/p/i2c-rtc-ds1307-24c32-real-time-clock-module-for-arduino-blue-149493?item=4 (http://www.dealextreme.com/p/i2c-rtc-ds1307-24c32-real-time-clock-module-for-arduino-blue-149493?item=4)
Título: Re: Sistema Rega Automático com interface VB
Enviado por: zordlyon em 08 de Setembro de 2012, 19:42
Pois, também já tinha lido que o serial monitor faz reset ao arduino. Vou tentar enviar as horas para o VB então.

Podes ter sempre um cartão de memória ligado ao arduino e em vez de guardar no arduino guardas num .txt dentro do cartão depois e só fazer o read() do cartão para o arduino, e mesmo que o arduino faça reset tens lá sempre os dados no cartão...
Título: Re: Sistema Rega Automático com interface VB
Enviado por: senso em 08 de Setembro de 2012, 19:43
Mas o tempo não aumenta enquanto o arduino está a fazer reset, fica logo com o tempo errado.
O mais facil é mesmo usar um rtc, até pode pedir uma amostra, compra a pilha e o cristal e gasta 1€.
Título: Re: Sistema Rega Automático com interface VB
Enviado por: danuca em 08 de Setembro de 2012, 19:48
Eu vou falar com o meu prof mas em principio nao vai dar.

Eu agora estou a ler no VB a hora do arduino, apesar de ainda nao estar a conseguir ler os valores correctos, mas acho que nao vou conseguir acertar isto :S
Título: Re: Sistema Rega Automático com interface VB
Enviado por: zordlyon em 08 de Setembro de 2012, 21:12
Mas o tempo não aumenta enquanto o arduino está a fazer reset, fica logo com o tempo errado.
O mais facil é mesmo usar um rtc, até pode pedir uma amostra, compra a pilha e o cristal e gasta 1€.

Esqueci-me desse pormenor...

Um pouco fora de comum, sabendo o tempo de reset do arduino nao dava para "acertar" as horas sempre que ele fizesse reset??

Título: Re: Sistema Rega Automático com interface VB
Enviado por: senso em 08 de Setembro de 2012, 21:41
Mas o tempo não aumenta enquanto o arduino está a fazer reset, fica logo com o tempo errado.
O mais facil é mesmo usar um rtc, até pode pedir uma amostra, compra a pilha e o cristal e gasta 1€.

Esqueci-me desse pormenor...

Um pouco fora de comum, sabendo o tempo de reset do arduino nao dava para "acertar" as horas sempre que ele fizesse reset??



E como sabes se foi um simples reset ou se esteve desligado durante 12h?
Título: Re: Sistema Rega Automático com interface VB
Enviado por: danuca em 08 de Setembro de 2012, 21:48
Não sei zordlyon mas talvez funcionasse.
Mas eu neste momento queria era ter isto a funcionar. Vou deixar aqui em anexo o meu programa arduino e VB 2010.

Tenho uma label no VB que deveria ler as horas, mas nem sempre lê bem, por exemplo depois de ligado fica a ler, mas passado cerca de 2 min desaparece, ou entao aparecem caracteres estranhos.
O botao que tenho no VB é para acertar a hora que é digitada na única textbox que lá tenho, mas nao estou a conseguir pôr a dar.

Se alguém tiver um tempinho e possa dar uma vista de olhos no meu programa agradecia.

É que depois de eu conseguir acertar a hora, penso que depois será mais fácil receber outros valores para accionar a rega e assim, se alguém me puder ajudar era fantástico.

Título: Re: Sistema Rega Automático com interface VB
Enviado por: Pedrock em 08 de Setembro de 2012, 22:19
Acho que estão a complicar isto um bocado...
Se não pode usar RTC, usa a biblioteca Time, que é acertada pelo PC.
Depois o PC envia a que horas é que é para ligar e o Arduino guarda essa informação.
O Arduino vai verificando se já chegou a essa hora, e caso sim, liga a rega.

EDIT:
Estive a ver o teu código...
SerialPort1.Write("TextBox1.Text")  ::) Tira as aspas.
e
System.Threading.Thread.Sleep(250) num timer...

EDIT2:
E tem vários problemas.
Abres o serial no início e fechas no fim, mas durante o programa estás sempre a abri-las e fechá-las. Isso está mal. E não precisas disto: System.Threading.Thread.Sleep(250) se tirares os SerialPort1.Open() e SerialPort1.Close(), mas tens que fazer umas alterações...

EDIT3:
O programa do Arduino também não está bem. O que é isto?:
Serial.read();//flush the delim
Título: Re: Sistema Rega Automático com interface VB
Enviado por: zordlyon em 09 de Setembro de 2012, 00:44
Mas o tempo não aumenta enquanto o arduino está a fazer reset, fica logo com o tempo errado.
O mais facil é mesmo usar um rtc, até pode pedir uma amostra, compra a pilha e o cristal e gasta 1€.

Esqueci-me desse pormenor...

Um pouco fora de comum, sabendo o tempo de reset do arduino nao dava para "acertar" as horas sempre que ele fizesse reset??



E como sabes se foi um simples reset ou se esteve desligado durante 12h?

True...esquece lá a ideia...há coisas que mais valia a pena estarmos calados...  ;D
Título: Re: Sistema Rega Automático com interface VB
Enviado por: danuca em 09 de Setembro de 2012, 01:28
PEDROCK: desde já obrigado pela disponibilidade. Esta linha no arduino 'Serial.read();//flush the delim' eu nao sei o que faz, só sei que se correres o programo arduino que eu enviei, e se meteres por exemplo:22:22:12-01/02/1992' no serial monitor, ele acerta as horas, no entanto se tirar isso como disseste já nao dá.

Em relação ao VB, eu preciso mesmo de abrir e fechar as portas porque eu nao quero estar sempre a enviar os mesmos caracteres pelo SerialPort, porque se vires nas imagens que eu deixei, a form4 vai ter várias funções, ou seja acho que vou ter de estar sempre a abrir e fechar o SerialPort, mas não tenho a certeza.

Tirei as aspas no SerialPort1.Write("TextBox1.Text") mas continuo sem conseguir valores nenhuns, e o mais estranho é a label nao receber correctamente os valores da hora default.

Mas diz-me o que achas que tenho de mudar para pôr isto a dar.

Título: Re: Sistema Rega Automático com interface VB
Enviado por: senso em 09 de Setembro de 2012, 01:42
Esse serial.read() serve para "comer" os caracteres que usas como delimitador de cada valor, ou seja os : / e - que não são numeros, é uma maneira um bocado feia de fazer isso..
Isso resolve-se numa linha usando o sscanf, recebes a string toda e parsas com o scanf e ficas logo com os valores todos separados em variaveis.
Título: Re: Sistema Rega Automático com interface VB
Enviado por: danuca em 09 de Setembro de 2012, 02:56
Boas novamente pessoal

Sei que já é um bocado tarde, mas consegui agora o que queria para já. Ou seja, tenho o relógio no arduino sempre a funcionar, consigo envia-lo para o VB, e consigo alterar a hora no VB.

Com as dicas do PEDROCK e mudando a linha do VB ' ReadExisting' para 'Readline' consegui pôr a dar.

Deixo aqui os dois programas para quem quiser ver ou experimentar.

Em principio terei mais problemas antes de acabar o projecto, por isso devo vir aqui chatear a cabeça ao pessoal.

Obrigado pela ajuda .
Título: Re: Sistema Rega Automático com interface VB
Enviado por: danuca em 10 de Setembro de 2012, 17:34
Boas pessoal

Como eu calculei, vou precisar novamente da vossa ajuda se puderem.

Se ainda se lembram, eu neste momento consigo ler o relógio do arduino no VB, e acerta-lo no VB.
Adicionei uma nova textbox e um novo botao, para enviar um horário e ligar um led quando esse horário coincidisse com a hora actual. O problema é que como estou a usar muito o serial read, isto está uma confusão. O que me está a acontecer quando envio o novo horário para ligar o LED, é que ele assume o serial read, e corrige a hora.

Alguém tem uma ideia para o novo horário apenas servir de comparação com o horário actual ?


código VB


    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        SerialPort1.Open()
        SerialPort1.Write("c")
        SerialPort1.Write(TextBox2.Text)
        SerialPort1.Close()


    End Sub
End Class



-----------------//--------------------

ARDUINO

#include <Time.h> 

String readString;
int ledPin=13;

void setup()  {
  Serial.begin(9600);
  //Serial.println("Waiting for sync message");
  pinMode(ledPin,OUTPUT);
  digitalWrite(ledPin,LOW);
}

void loop(){   
  char on_sensor =  'n';
  if(Serial.available()>0)
  {
   
    on_sensor=Serial.read();
   
  }
    if(on_sensor == 'c')
    {
      time_t t= now();
      char on_rega[20] = { Serial.read(), Serial.read() , ':',Serial.read(), Serial.read() , ':', Serial.read(), Serial.read() , '-', Serial.read(), Serial.read() , '/', Serial.read(), Serial.read() , '/',Serial.read(), Serial.read() , Serial.read(), Serial.read() };
     
      if (on_rega[20] == t)
      {
        digitalWrite(ledPin,HIGH);
      }
  }
  (...)


Obrigado
Título: Re: Sistema Rega Automático com interface VB
Enviado por: Sextafeira em 10 de Setembro de 2012, 21:04
eu fiz assim

criei duas variáveis,

envio o "R" para a porta e o arduino fica em modo de read só lê a serial.

envio o "W" para a porta e o arduino fica em modo write, ou seja faz os serial prints e writes mas não le

isto eu fiz para a configuração de um delay para poder variar o tempo pelo vb e chamar diferentes sub rotinas.

os read é só para ler as entradas e etc.


poderá existir outras formas, mas de arduino não percebo nada...um exemplo era enviar para serial "W800"
em que W serial de write e os "800" para a variável, para isso serial necessário um split ou mid qualquer assim. xD
Título: Re: Sistema Rega Automático com interface VB
Enviado por: danuca em 10 de Setembro de 2012, 23:32
Mas o problema é que eu estou sempre a enviar as horas actuais, e dá conflito com a hora que eu quero enviar para regar. A minha prof sugeriu comprar um RTC:

http://pt.farnell.com/microchip/mcp7940m-i-ms/rtc-i2c-64bytes-sram-8msop/dp/2098889?in_merch=Produtos%20novos&MER=i-9b10-00002068 (http://pt.farnell.com/microchip/mcp7940m-i-ms/rtc-i2c-64bytes-sram-8msop/dp/2098889?in_merch=Produtos%20novos&MER=i-9b10-00002068)

Sabem onde posso comprar um deste género ?
Alguém já trabalhou com algum destes RTC e com arduino ?

Cumps
Título: Re: Sistema Rega Automático com interface VB
Enviado por: Sérgio_Sena em 11 de Setembro de 2012, 00:37
Mas o problema é que eu estou sempre a enviar as horas actuais, e dá conflito com a hora que eu quero enviar para regar. A minha prof sugeriu comprar um RTC:

http://pt.farnell.com/microchip/mcp7940m-i-ms/rtc-i2c-64bytes-sram-8msop/dp/2098889?in_merch=Produtos%20novos&MER=i-9b10-00002068 (http://pt.farnell.com/microchip/mcp7940m-i-ms/rtc-i2c-64bytes-sram-8msop/dp/2098889?in_merch=Produtos%20novos&MER=i-9b10-00002068)

Sabem onde posso comprar um deste género ?
Alguém já trabalhou com algum destes RTC e com arduino ?

Cumps


fala com a G7, eles têem lá outro parecido mas que tem muito código espalhado na internet já feito.

Título: Re: Sistema Rega Automático com interface VB
Enviado por: danuca em 11 de Setembro de 2012, 02:47
ASENA: estás a falar deste correcto ?

http://www.g7electronica.net/pt/ics/329-ds1307.html (http://www.g7electronica.net/pt/ics/329-ds1307.html)
Título: Re: Sistema Rega Automático com interface VB
Enviado por: Sérgio_Sena em 11 de Setembro de 2012, 10:45
ASENA: estás a falar deste correcto ?

http://www.g7electronica.net/pt/ics/329-ds1307.html (http://www.g7electronica.net/pt/ics/329-ds1307.html)


correcto.
Título: Re: Sistema Rega Automático com interface VB
Enviado por: danuca em 13 de Setembro de 2012, 01:25
Boas pessoal

Como foi sugerido por voces, comprei um módulo RTC ds1307.

Experimentei vários códigos hoje, inclusive um de um toturial que estava aqui do tr3s, e tenho sempre o mesmo output, e nao consigo perceber porquê.

EX1:
45:85:85      165/45/2165
45:85:85      165/45/2165
45:85:85      165/45/2165
45:85:85      165/45/2165
45:85:85      165/45/2165
45:85:85      165/45/2165
45:85:85      165/45/2165
45:85:85      165/45/2165
45:85:85      165/45/2165




Ex2:
Sao:    45:85:85   DiaDeSaoNunca-feira dia 45 de Oufevulhosto de 2165
Sao:    45:85:85   DiaDeSaoNunca-feira dia 45 de Oufevulhosto de 2165
Sao:    45:85:85   DiaDeSaoNunca-feira dia 45 de Oufevulhosto de 2165
Sao:    45:85:85   DiaDeSaoNunca-feira dia 45 de Oufevulhosto de 2165
Sao:    45:85:85   DiaDeSaoNunca-feira dia 45 de Oufevulhosto de 2165
Sao:    45:85:85   DiaDeSaoNunca-feira dia 45 de Oufevulhosto de 2165
Sao:    45:85:85   DiaDeSaoNunca-feira dia 45 de Oufevulhosto de 2165
Sao:    45:85:85   DiaDeSaoNunca-feira dia 45 de Oufevulhosto de 2165
Sao:    45:85:85   DiaDeSaoNunca-feira dia 45 de Oufevulhosto de 2165
Sao:    45:85:85   DiaDeSaoNunca-feira dia 45 de Oufevulhosto de 2165


Acho um bocado estranho darem exactamente os mesmos valores, além disso o tempo nunca é incrementado em todos os programas que experimentei, por isso certamente nao será dos programas. Alguém tem alguma ideia ?

Cumps
Título: Re: Sistema Rega Automático com interface VB
Enviado por: Sérgio_Sena em 13 de Setembro de 2012, 01:27
Boas pessoal

Como foi sugerido por voces, comprei um módulo RTC ds1307.

Experimentei vários códigos hoje, inclusive um de um toturial que estava aqui do tr3s, e tenho sempre o mesmo output, e nao consigo perceber porquê.

EX1:
45:85:85      165/45/2165
45:85:85      165/45/2165
45:85:85      165/45/2165
45:85:85      165/45/2165
45:85:85      165/45/2165
45:85:85      165/45/2165
45:85:85      165/45/2165
45:85:85      165/45/2165
45:85:85      165/45/2165




Ex2:
Sao:    45:85:85   DiaDeSaoNunca-feira dia 45 de Oufevulhosto de 2165
Sao:    45:85:85   DiaDeSaoNunca-feira dia 45 de Oufevulhosto de 2165
Sao:    45:85:85   DiaDeSaoNunca-feira dia 45 de Oufevulhosto de 2165
Sao:    45:85:85   DiaDeSaoNunca-feira dia 45 de Oufevulhosto de 2165
Sao:    45:85:85   DiaDeSaoNunca-feira dia 45 de Oufevulhosto de 2165
Sao:    45:85:85   DiaDeSaoNunca-feira dia 45 de Oufevulhosto de 2165
Sao:    45:85:85   DiaDeSaoNunca-feira dia 45 de Oufevulhosto de 2165
Sao:    45:85:85   DiaDeSaoNunca-feira dia 45 de Oufevulhosto de 2165
Sao:    45:85:85   DiaDeSaoNunca-feira dia 45 de Oufevulhosto de 2165
Sao:    45:85:85   DiaDeSaoNunca-feira dia 45 de Oufevulhosto de 2165


Acho um bocado estranho darem exactamente os mesmos valores, além disso o tempo nunca é incrementado em todos os programas que experimentei, por isso certamente nao será dos programas. Alguém tem alguma ideia ?

Cumps



# Já acertaste as horas no chip? Esses valores podem estar a "crashar" a lógica interna e pode ser por isso que ele não incrementa.

# Tens que ligar o oscilador interno, para ele começar a contar o tempo. Datasheet explica tudo.
Título: Re: Sistema Rega Automático com interface VB
Enviado por: senso em 13 de Setembro de 2012, 01:28
Como é que tens isso ligado?
Já usei a biblioteca da Adafruit, com tutorial, aqui:
http://www.ladyada.net/learn/breakoutplus/ds1307rtc.html (http://www.ladyada.net/learn/breakoutplus/ds1307rtc.html)
Título: Re: Sistema Rega Automático com interface VB
Enviado por: danuca em 13 de Setembro de 2012, 01:38
Já estive a ver o datasheet:

The contents of the time and calendar registers are in the BCD format.  Bit 7 of register 0
is the clock halt (CH) bit.  When this bit is set to a 1, the oscillator is disabled.  When cleared to a 0, the
oscillator is enabled.
Please note that the initial power-on state of all registers is not defined.  Therefore, it is important
to enable the oscillator (CH bit = 0) during initial configuration.

MAs eu acho que o toturial do tr3s faz enable ao oscilador...

Liguei exactamente como neste toturial:
http://www.glacialwanderer.com/hobbyrobotics/?p=12 (http://www.glacialwanderer.com/hobbyrobotics/?p=12)

Título: Re: Sistema Rega Automático com interface VB
Enviado por: senso em 13 de Setembro de 2012, 01:40
Mas compraste o chip, ou uma placa com o chip soldado, com o cristal, condensador de decoupling e suporte de bateria?
Título: Re: Sistema Rega Automático com interface VB
Enviado por: danuca em 13 de Setembro de 2012, 01:42
Comprei a placa toda, com ship  cristal bateria..

o toturial faz enable ao CH:

if(v<60 && v>-1){            // Desta forma consegue-se manter o clock actual
      §byte state=rtc_bcd[DS1307_SEG] & DS1307_CLOCKHALT;
Título: Re: Sistema Rega Automático com interface VB
Enviado por: senso em 13 de Setembro de 2012, 01:48
Cheira-me a bugs pelo código..
Que simbolo é este:
      §
Está no inicio da segunda linha.
Título: Re: Sistema Rega Automático com interface VB
Enviado por: danuca em 13 de Setembro de 2012, 01:50
Esse símbolo foi um erro meu a copiar, desculpa.


Eu usei o código do tr3s, toda a gente tava a dizer que dava, pra mim o mais estranho é o relógio nem sequer incrementar..
Título: Re: Sistema Rega Automático com interface VB
Enviado por: danuca em 13 de Setembro de 2012, 02:08
senso:

Com essa biblioteca o output muda realmente, mas ainda fica pior:

Ì¥ÚáÆcF³?)Ô§ÂÃB'©ä"åKMÉSÀcBsèAaùRL¡ «9?âöâ ItùRLå ¯9?âÖâ I    È"çKMÉSÈcbsèA2M?ù7¸YÙ3/&ÂâB:'Ï+»ù"Y£Á;Ðbbr

Aconteceu-te isto ?
Título: Re: Sistema Rega Automático com interface VB
Enviado por: danuca em 13 de Setembro de 2012, 02:11
Já descobri. O baudrate estava mal

Mas tenhos os mesmos valores que os outros programas :s


2165/165/165 165:165:85
 since midnight 1/1/1970 = 1402703185s = 16234d
 now + 7d + 30s: 2014/6/20 23:46:55
Título: Re: Sistema Rega Automático com interface VB
Enviado por: senso em 13 de Setembro de 2012, 02:17
De onde compras-te a placa, manda link e tira umas fotos, tens os pull-ups nas linhas do i2c?
Título: Re: Sistema Rega Automático com interface VB
Enviado por: danuca em 13 de Setembro de 2012, 02:22
http://www.ebay.com/itm/5V-I2C-RTC-DS1307-module-/270992195070?pt=UK_BOI_Electrical_Components_Supplies_ET&hash=item3f1864bdfe (http://www.ebay.com/itm/5V-I2C-RTC-DS1307-module-/270992195070?pt=UK_BOI_Electrical_Components_Supplies_ET&hash=item3f1864bdfe)

Sim tenho duas resistencias de 2,2k. e já utilizei também de 4.7k
Título: Re: Sistema Rega Automático com interface VB
Enviado por: senso em 13 de Setembro de 2012, 02:27
Nenhuma das patas do cristal está partida?
Como está solto(pelo menos nas fotos), pode-se ter partido com vibração, e já agora, experimenta tirar a bateria e desligar o rtc da alimentação durante uns minutos, pode ter a bateria descarregada e ter ficado nalgum estado estranho.
Título: Re: Sistema Rega Automático com interface VB
Enviado por: danuca em 13 de Setembro de 2012, 02:38
Não, está impecável.

Tirei a bateria, e fiz o upload sem a pilha e tenho este output:


Sao:    23:15:0   Quinta-feira dia 12 de Marco de 2009
Sao:    0:0:0   Segunda-feira dia 1 de Fevereiro de 2000
Sao:    0:0:0   Segunda-feira dia 1 de Fevereiro de 2000
Sao:    0:0:0   Segunda-feira dia 1 de Fevereiro de 2000
Sao:    0:0:0   Segunda-feira dia 1 de Fevereiro de 2000
Sao:    0:0:0   Segunda-feira dia 1 de Fevereiro de 2000
Sao:    0:0:0   Segunda-feira dia 1 de Fevereiro de 2000
Sao:    0:0:0   Segunda-feira dia 1 de Fevereiro de 2000


mas depois volto a por a pilha e volta ao mesmo output de á bocado :s
Título: Re: Sistema Rega Automático com interface VB
Enviado por: senso em 13 de Setembro de 2012, 02:55
Mostra o teu código sff, o primeiro print é da hora de compilação se estás a usar a biblioteca da Adafruit, depois disso faz reset, portanto algo deve estar errado no código, mede a voltagem da bateria e não a montes, porque o rtc só precisa dela para continuar a funcionar se perder a alimentação principal, se volta ao estado estranho, a bateria deve estar morta.
Título: Re: Sistema Rega Automático com interface VB
Enviado por: danuca em 13 de Setembro de 2012, 03:00
// Date and time functions using a DS1307 RTC connected via I2C and Wire lib

#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 RTC;

void setup () {
    Serial.begin(9600);
    Wire.begin();
    RTC.begin();

  if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }
}

void loop () {
    DateTime now = RTC.now();
   
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
   
    Serial.print(" since midnight 1/1/1970 = ");
    Serial.print(now.unixtime());
    Serial.print("s = ");
    Serial.print(now.unixtime() / 86400L);
    Serial.println("d");
   
    // calculate a date which is 7 days and 30 seconds into the future
    DateTime future (now.unixtime() + 7 * 86400L + 30);
   
    Serial.print(" now + 7d + 30s: ");
    Serial.print(future.year(), DEC);
    Serial.print('/');
    Serial.print(future.month(), DEC);
    Serial.print('/');
    Serial.print(future.day(), DEC);
    Serial.print(' ');
    Serial.print(future.hour(), DEC);
    Serial.print(':');
    Serial.print(future.minute(), DEC);
    Serial.print(':');
    Serial.print(future.second(), DEC);
    Serial.println();
   
    Serial.println();
    delay(3000);
}



OUTPUT sem a pilha:


RTC is NOT running!
2012/9/13 2:49:16
 since midnight 1/1/1970 = 1347504556s = 15596d
 now + 7d + 30s: 2012/9/20 2:49:46

2000/1/1 0:0:0
 since midnight 1/1/1970 = 946684800s = 10957d
 now + 7d + 30s: 2000/1/8 0:0:30

2000/1/1 0:0:0
 since midnight 1/1/1970 = 946684800s = 10957d
 now + 7d + 30s: 2000/1/8 0:0:30

2000/1/1 0:0:0
 since midnight 1/1/1970 = 946684800s = 10957d
 now + 7d + 30s: 2000/1/8 0:0:30

2000/1/1 0:0:0
 since midnight 1/1/1970 = 946684800s = 10957d
 now + 7d + 30s: 2000/1/8 0:0:30


É mesmo estranho porque o primeiro print ele fica com a hora actual
Título: Re: Sistema Rega Automático com interface VB
Enviado por: danuca em 13 de Setembro de 2012, 03:02
Senso: a bateria tem 3,2V por isso está boa :S
Título: Re: Sistema Rega Automático com interface VB
Enviado por: danuca em 13 de Setembro de 2012, 03:39
Descobri o erro. Soldei mal a perna do GND, testei com o multimetro e vi que nao estavam em contacto. Agora todos os programas funcionam.

Mais uma vez obrigado pelas ajudas.

Cumps
Título: Re: Sistema Rega Automático com interface VB
Enviado por: danuca em 13 de Setembro de 2012, 22:00
Pessoal, tenho outra dúvida. Já tenho o relógio a funcionar, as horas no Visual Basic, e consigo por a ligar um LED á hora que quiser.

Agora eu queria que passado x tempo, em x é dado pelo utilizador( ou seja pelo VB, tem uma textbox e um botao), o led desligasse, e simulasse o final da rega.

Alguém tem alguma ideia ?
Vou deixar os dois códigos que tou a usar:

VB:

Public Class Form1



    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        SerialPort1.BaudRate = 9600

        SerialPort1.DataBits = 8

        SerialPort1.StopBits = IO.Ports.StopBits.One

        SerialPort1.Parity = IO.Ports.Parity.None

        SerialPort1.PortName = "COM7"






        Timer1.Enabled = True






    End Sub

    Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click

    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        SerialPort1.Open()
        'SerialPort1.Write("a")
        'System.Threading.Thread.Sleep(250)
        Dim i As String = SerialPort1.ReadLine
        Label1.Text = i
        ListBox1.Items.Add(i)

        SerialPort1.Close()




    End Sub


    Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        SerialPort1.Open()
        SerialPort1.Write(TextBox2.Text)

        SerialPort1.Close()

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        SerialPort1.Open()
        SerialPort1.Write(TextBox1.Text)

        SerialPort1.Close()
    End Sub
End Class

-------------------------------//-----------------------------------

ARDUINO:#include <Wire.h>       // Para a EEPROM 24LC256 DS1621 DS1307 e dispositivos i2c

#define HORAS 2         // S?o os mesmos valores que est?o definidos no ficheiro ds1307.pde, os de offset
#define MINUTOS 1
#define SEGUNDOS 0   
#define DIASEMANA 3     // QUAL ? O MELHOR N?MERO? :D
#define DIAMES 4 
#define MES 5
#define ANO 6
int horas2;
int minutos2;
int segundos2;
int ledPin=13;
int HORAS3;
int MINUTOS3;
int SEGUNDOS3;

void setup(void){
  Serial.begin(9600);   // Valor pequeno mas bom, eu gosto assim :D
  Wire.begin();         // Iniciar liga??es i2c - IMPORTANT?SSIMO
  //ds1307setup();        // Se for a primeira vez que o RTC ? iniciado/ligado esta chamada ? necess?ria para o RTC come?ar a contar
  pinMode(ledPin,OUTPUT);
  digitalWrite(ledPin,LOW);
}

void loop(){
  printData();
  delay(1000);
 
  if(Serial.available()>0)
        {
            char horas[3] = { Serial.read(), Serial.read(), ':'};
            Serial.read();
            horas2=atoi(horas);
            Serial.println(horas2);
            char minutos[3] = { Serial.read(), Serial.read(), ':'};
            Serial.read();
            minutos2=atoi(minutos);
            Serial.println(minutos2);
            char segundos[3] = { Serial.read(), Serial.read(), ':'};
            Serial.read();
            segundos2=atoi(segundos);
            Serial.println(segundos2);
           
           
         }
    if(horas2==HORAS3 && minutos2==MINUTOS3 && minutos2==SEGUNDOS3){
    digitalWrite(ledPin,HIGH);}
       
 
}


void printData(){
  int rtc[7];
  ds1307get(rtc,true);
  Serial.print("Sao:    ");
  HORAS3=rtc[HORAS];
  Serial.print(HORAS3,DEC);
  Serial.print(":");               
  MINUTOS3=rtc[MINUTOS];
  Serial.print(MINUTOS3,DEC);
  Serial.print(":");               
  SEGUNDOS3=rtc[SEGUNDOS];
  Serial.print(SEGUNDOS3,DEC);
  /*switch(rtc[DIASEMANA]){
    case 0:Serial.print("   Domingo"); break;     
    case 1:Serial.print("   Segunda-feira"); break;
    case 2:Serial.print("   Ter?a-feira"); break;
    case 3:Serial.print("   Quarta-feira"); break;
    case 4:Serial.print("   Quinta-feira"); break;
    case 5:Serial.print("   Sexta-feira"); break;
    case 6:Serial.print("   Sabado"); break;
    default:Serial.print("   DiaDeSaoNunca-feira");
  }*/
  Serial.print(" dia ");
  Serial.print(rtc[DIAMES]); 
  Serial.print(" de");
    switch(rtc[MES]){
    case 0:Serial.print(" Janeiro"); break;     
    case 1:Serial.print(" Fevereiro"); break;
    case 2:Serial.print(" Marco"); break;
    case 3:Serial.print(" Abril"); break;
    case 4:Serial.print(" Maio"); break;
    case 5:Serial.print(" Junho"); break;
    case 6:Serial.print(" Julho"); break;
    case 7:Serial.print(" Agosto"); break;
    case 8:Serial.print(" Setembro"); break;
    case 9:Serial.print(" Outubro"); break;
    case 10:Serial.print(" Novembro"); break;
    case 11:Serial.print(" Dezembro"); break;
    default:Serial.print(" Oufevulhosto");   
  }
  Serial.print(" de ");
  Serial.println(rtc[ANO],DEC);
}


Cumps