Go Down

Topic: LER DATA E HORA NO ARDUINO . Erro no código (Read 15057 times) previous topic - next topic

bubulindo

Isto é o erro que te dá...

Quote
/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avr-g++ -c -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -mmcu=atmega168 -DF_CPU=8000000L -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=103 -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/variants/standard -I/Applications/Arduino.app/Contents/Resources/Java/libraries/DateTime -I/Applications/Arduino.app/Contents/Resources/Java/libraries/DateTimeStrings -I/Users/bubulindo/Documents/Arduino/libraries/Time /var/folders/b2/b2Qxxb0JHpulgWmJOPT3vU+++TI/-Tmp-/build3264005724631118976.tmp/sketch_jul17a.cpp -o /var/folders/b2/b2Qxxb0JHpulgWmJOPT3vU+++TI/-Tmp-/build3264005724631118976.tmp/sketch_jul17a.cpp.o
In file included from sketch_jul17a.ino:3:
/Users/bubulindo/Documents/Arduino/libraries/Time/Time.h:52:1: warning: "SECS_PER_DAY" redefined
In file included from sketch_jul17a.ino:1:
/Applications/Arduino.app/Contents/Resources/Java/libraries/DateTime/DateTime.h:25:1: warning: this is the location of the previous definition
In file included from sketch_jul17a.ino:3:
/Users/bubulindo/Documents/Arduino/libraries/Time/Time.h:53:1: warning: "DAYS_PER_WEEK" redefined
In file included from sketch_jul17a.ino:1:
/Applications/Arduino.app/Contents/Resources/Java/libraries/DateTime/DateTime.h:26:1: warning: this is the location of the previous definition
In file included from sketch_jul17a.ino:3:
/Users/bubulindo/Documents/Arduino/libraries/Time/Time.h:55:1: warning: "SECS_PER_YEAR" redefined
In file included from sketch_jul17a.ino:1:
/Applications/Arduino.app/Contents/Resources/Java/libraries/DateTime/DateTime.h:28:1: warning: this is the location of the previous definition
In file included from sketch_jul17a.ino:3:
/Users/bubulindo/Documents/Arduino/libraries/Time/Time.h:56:1: warning: "SECS_YR_2000" redefined
In file included from sketch_jul17a.ino:1:
/Applications/Arduino.app/Contents/Resources/Java/libraries/DateTime/DateTime.h:29:1: warning: this is the location of the previous definition
In file included from sketch_jul17a.ino:3:
/Users/bubulindo/Documents/Arduino/libraries/Time/Time.h:62:1: warning: "dayOfWeek" redefined
In file included from sketch_jul17a.ino:1:
/Applications/Arduino.app/Contents/Resources/Java/libraries/DateTime/DateTime.h:35:1: warning: this is the location of the previous definition
In file included from sketch_jul17a.ino:3:
/Users/bubulindo/Documents/Arduino/libraries/Time/Time.h:69:1: warning: "elapsedSecsThisWeek" redefined
In file included from sketch_jul17a.ino:1:
/Applications/Arduino.app/Contents/Resources/Java/libraries/DateTime/DateTime.h:40:1: warning: this is the location of the previous definition
/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avr-g++ -c -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -mmcu=atmega168 -DF_CPU=8000000L -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=103 -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/variants/standard -I/Applications/Arduino.app/Contents/Resources/Java/libraries/DateTime -I/Applications/Arduino.app/Contents/Resources/Java/libraries/DateTimeStrings -I/Users/bubulindo/Documents/Arduino/libraries/Time -I/Applications/Arduino.app/Contents/Resources/Java/libraries/DateTime/utility /Applications/Arduino.app/Contents/Resources/Java/libraries/DateTime/DateTime.cpp -o /var/folders/b2/b2Qxxb0JHpulgWmJOPT3vU+++TI/-Tmp-/build3264005724631118976.tmp/DateTime/DateTime.cpp.o
/Applications/Arduino.app/Contents/Resources/Java/libraries/DateTime/DateTime.cpp:15:20: warning: wiring.h: No such file or directory
/Applications/Arduino.app/Contents/Resources/Java/libraries/DateTime/DateTime.cpp: In member function 'void DateTimeClass::setTime(time_t)':
/Applications/Arduino.app/Contents/Resources/Java/libraries/DateTime/DateTime.cpp:28: error: 'millis' was not declared in this scope
/Applications/Arduino.app/Contents/Resources/Java/libraries/DateTime/DateTime.cpp: In member function 'time_t DateTimeClass::now()':
/Applications/Arduino.app/Contents/Resources/Java/libraries/DateTime/DateTime.cpp:43: error: 'millis' was not declared in this scope


E o sítio de onde tiraste esta biblioteca diz:

Quote
This library has been superseded by a newer version that is available here


Se não estivesses a fazer isto à pressa, terias feito download da outra biblioteca. Terias apagado a que tens actualmente e tudo bateria certo. Assim tens uma biblioteca que não funciona com a versão da IDE que tens no teu computador.

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

PedroS23

Eu fui à página: http://playground.arduino.cc/Code/Time
e fiz o download da biblioteca time e da Ethernet e String, pois dizia o seguinte:
To use all of the features in the library, you'll need the UDPbitewise library, found here. E fiz o download das duas livrarias anteriores.

Neste momento tenho as seguintes livrarias:



Uploaded with ImageShack.us


Pelo que me apercebo então, a livraria DateTime está desatualizada e tenho duvidas em relação à DatatimeStrings.

Depois disto, correndo o ficheiro time.h, devia conseguir ler Data e tempo no ecrã correto???

bubulindo

Tu não estavas a usar a DateTimeStrings...

Sim.
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

PedroS23

Olá Pessoal.

Agora posso dizer k já tenho novidades!!

Abri o seguinte exemplo retirado da biblioteca time:

Code: [Select]

/*
* TimeSerial.pde
* example code illustrating Time library set through serial port messages.
*
* Messages consist of the letter T followed by ten digit time (as seconds since Jan 1 1970)
* you can send the text on the next line using Serial Monitor to set the clock to noon Jan 1 2013
T1357041600 
*
* A Processing example sketch to automatically send the messages is inclided in the download
* On Linux, you can use "date +T%s > /dev/ttyACM0" (UTC time zone)
*/

#include <Time.h> 

#define TIME_HEADER  "T"   // Header tag for serial time sync message
#define TIME_REQUEST  7    // ASCII bell character requests a time sync message

void setup()  {
  Serial.begin(9600);
  while (!Serial) ; // Needed for Leonardo only
  pinMode(13, OUTPUT);
  setSyncProvider( requestSync);  //set function to call when sync required
// Serial.println("Waiting for sync message");
}






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() {
  unsigned long pctime;
  const unsigned long DEFAULT_TIME = 1357041600; // Jan 1 2013

  if(Serial.find(TIME_HEADER)) {
     pctime = Serial.parseInt();
     if( pctime >= DEFAULT_TIME) { // check the integer is a valid time (greater than Jan 1 2013)
       setTime(pctime); // Sync Arduino clock to the time received on the serial port
     }
  }
}

time_t requestSync()
{
  Serial.write(TIME_REQUEST); 
  return 0; // the time will be sent later in response to serial mesg
}

void loop(){   
  if (Serial.available()) {
    processSyncMessage();
  }
  if (timeStatus()!= timeNotSet) {
    digitalClockDisplay(); 
  }
  if (timeStatus() == timeSet) {
    digitalWrite(13, HIGH); // LED on if synced
  } else {
    digitalWrite(13, LOW);  // LED off if needs refresh
  }
  delay(1000);
 

  time_t t = now(); // Store the current time in time
                    //  variable t
                   
  hour(t);          // Returns the hour for the given
                    //  time t
  minute(t);        // Returns the minute for the given
                    //  time t
  second(t);        // Returns the second for the given
                    //  time t
  day(t);           // The day for the given time t

  weekday(t);       // Day of the week for the given
                    //  time t 
  month(t);         // The month for the given time t

  year(t);          // The year for the given time t
 
 

  Serial.print(year(t));
  Serial.print("/");
  Serial.print(month(t));
  Serial.print("/");
  Serial.print(day(t));
  Serial.print(" ");

  Serial.print(hour(t));
  printDigits(minute(t));
  printDigits(second(t));
  Serial.println("");
}


Retirei o time_t t = now(); do site onde fiz o download da biblioteca time.
De momento aparece-me no Serial Monitor desta forma: 1970/1/1 00:00:00 e como tenho o delay(1000) ele vai somando 1 segundo ao formato da hora aí.
Tenho no separador a classe time.h.

Alguem me sabe dizer como colocado a Data e Hora conetada com a do PC e para aparecer a atual?
Ou acham que depois de mandar gravar pelo Processing ele atualiza para a hora e data normal???
Os ciclos if já implementados para ativar as saídas do pin13 podem ser desativadas correto?

Obrigado a Todos!!!

bubulindo

Explica melhor a primeira pergunta.

Não sei o que é Processing.

Sim.
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

PedroS23

O processing é um completo do Arduino que permite gravar o que se visualiza no Serial Monitor do Arduino para um bloco de notas, ou seja, tudo o que fazes Serial.print(), pode ser gravado para um bloco de notas e está sempre a ser atualizado (preenchido), de x em x tempo, definido pelo teu Delay. O processing tem ligação direta com o Arduino.
Isso é o que eu pretendo, para depois fazer o upload do ficheiro para uma base de dados.

Indo de momento à minha questão, eu de momento tenho um delay(1000);

Os resultados no Serial.Monitor aparecem desta forma:



Gostaria de saber se é possível definir essa data e hora visualizada, para a Data e Hora Atual????????

Exemplo:

2013/07/17  17:10:00


Eu estou a imprimir esse resultados dentro do void loop(),(como mostrei no código publicado anteriormente) e foi retirado de uma linha de código que tirei da janela onde fiz o download da biblioteca time, sendo este o código que estou a utilizar:

Code: [Select]

  time_t t = now(); // Store the current time in time
                    //  variable t
                   
  hour(t);          // Returns the hour for the given
                    //  time t
  minute(t);        // Returns the minute for the given
                    //  time t
  second(t);        // Returns the second for the given
                    //  time t
  day(t);           // The day for the given time t

  weekday(t);       // Day of the week for the given
                    //  time t 
  month(t);         // The month for the given time t

  year(t);          // The year for the given time t
 
 

  Serial.print(year(t));
  Serial.print("/");
  Serial.print(month(t));
  Serial.print("/");
  Serial.print(day(t));
  Serial.print(" ");

  Serial.print(hour(t));
  printDigits(minute(t));
  printDigits(second(t));
  Serial.println("");


Obrigado!!

HugoPT

E que tal se usasses um RTC para obteres a data e hora actual em vez de usares essa lib?
Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

bubulindo


Gostaria de saber se é possível definir essa data e hora visualizada, para a Data e Hora Atual????????


Tens isto no teu programa...

Code: [Select]
void processSyncMessage() {
  unsigned long pctime;
  const unsigned long DEFAULT_TIME = 1357041600; // Jan 1 2013

  if(Serial.find(TIME_HEADER)) {
     pctime = Serial.parseInt();
     if( pctime >= DEFAULT_TIME) { // check the integer is a valid time (greater than Jan 1 2013)
       setTime(pctime); // Sync Arduino clock to the time received on the serial port
     }
  }
}

Para que serve?
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

bubulindo

Mais... se lesses um pouco a documentação encontrarias isto...

Quote
TimeSerial.pde shows Arduino as a clock without external hardware.
It is synchronized by time messages sent over the serial port.
  A companion Processing sketch will automatically provide these messages
  if it is running and connected to the Arduino serial port.


E isto:

Quote
The test sketch uses a message on the serial port to set the time. A Processing sketch that sends these messsages is included in the download but you can test this sketch by sending T1262347200 using the serial monitor (this sets the time to noon on Jan 1 2010). On a unix system, you can set the time with the shell command:


Por isso, quando dizes que não queres que façam o trabalho por ti... eu não acredito.
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Mortis


dentro da pasta Examples estarão os exemplos que o HugoPT falou ;)


dente eles o "\Arduino\libraries\Time\Examples\TimeSerial"
Code: [Select]

/*
* TimeSerial.pde
* example code illustrating Time library set through serial port messages.
*
* Messages consist of the letter T followed by ten digit time (as seconds since Jan 1 1970)
* you can send the text on the next line using Serial Monitor to set the clock to noon Jan 1 2010
T1262347200 
*
* A Processing example sketch to automatically send the messages is inclided in the download
*/

#include <Time.h> 

#define TIME_MSG_LEN  11   // time sync to PC is HEADER followed by unix time_t as ten ascii digits
#define TIME_HEADER  'T'   // Header tag for serial time sync message
#define TIME_REQUEST  7    // ASCII bell character requests a time sync message

void setup()  {
  Serial.begin(9600);
  setSyncProvider( requestSync);  //set function to call when sync required
  Serial.println("Waiting for sync message");
}

void loop(){   
  if(Serial.available() )
  {
    processSyncMessage();
  }
  if(timeStatus()!= timeNotSet)   
  {
    digitalWrite(13,timeStatus() == timeSet); // on if synced, off if needs refresh 
    digitalClockDisplay(); 
  }
  delay(1000);
}

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 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
    } 
  }
}

time_t requestSync()
{
  Serial.print(TIME_REQUEST,BYTE); 
  return 0; // the time will be sent later in response to serial mesg
}


As vezes as respostas estão muito mais próximas que as perguntas ;)

PedroS23

Olá, bom dia a todos!

Eu abri exatamente o exemplo do Serial, que vem com a biblioteca times e estava a ter trabalhar a partir daí.

Não consegui então voltar à data e hora atual e pensei:
Utilizo um RTC externo no arduino e o arduino vai lendo o rtc ate ser hora de ler os portos,
OU
Faço um ciclo no processing que vai lendo os timestamps e de n em n tempo pede ao arduino para ler os portos.

Como irei ter o arduino ligado ao PC a segunda opção é a melhor e mais barata.
(e corro o risco do RTC do arduino se atrasar alguns segundos/dia)

Então, irei ter de fazer um codigo no Processing para ir buscar a Data e Hora atual ao RTC do PC, tendo de fazer algo como um if ou while:

- tenho de ler a data/hora
- Verificar se segundos == 0?
   - Se não volta ao inicio
   - se sim envia uma comando ao arduino para ele ler a entrada A0
   - abre um ficheiro .txt e escreve a data/hora e o valor da tensão medida em A0


Tenho agora dúvidas se no Arduino tenho de manter a biblioteca time e classe time.h no separador e eventualmente algum código na main??
Ou se tenho apenas de incluir a classe e bliblioteca no próprio Processing!!????

Alguém me sabe responder??
Vi também nos exemplos da biblioteca Time, uma pasta chamada Processing com um exemplo, alguém me sabe dizer se o mesmo é para o Processing para fazer o que pretendo ou para o Arduino???

*Bubulindo, eu não tinha reparado nesses permonores e ainda estou um pouco confuso.
Pelo que entendi posso ir buscar o RTC do PC através do Processing, correto??
Obrigado pelas informações!!

bubulindo

O Arduino, consegue manter a hora de forma mais ou menos fiável... mas não é garantido que seja correcto durante dias ou semanas. Mas como estás a fazer isto em cima do joelho, não tens muito mais hipóteses.

Outra coisa que não percebo é para que precisas do relógio. Se o Arduino apenas serve para adquirir dados, porque é que não usas o relógio do PC para criar a data e hora a que tiraste determinada medição?

http://www.processing.org/discourse/beta/num_1202317523.html
http://forum.processing.org/topic/current-time-to-unix-timestamp-epoch
http://www.processing.org/discourse/beta/num_1169318286.html

Assim apenas tinhas de ter o teu processing a enviar um comando para o Arduino de segundo a segundo e o Arduino respondia com o que tinha medido no AD.

Ou seja, para recapitular... apagas todas as librarias do Time, etc... do Arduino.

Fazes um sketch similar a este:

Code: [Select]

void setup(){
Serial.begin(19200);

}

void loop(){

if (Serial.available() >0) {
   if (Serial.read() == 'M') {
       valAnalog = analogRead(PinAnalogA0);
       temp = (valAnalog * 5.0) /1024;
   
       Serial.print("  Tensao= " );
       Serial.print(temp);     
   }
}//end if

}


Assim sempre que enviares um M pela porta série, o Arduino lê e envia-te os dados.
Depois apenas tens de colocar a data e hora do processing (que vai buscar isso ao computador) e meter para o ficheiro txt das amostras.

Dito isto, se fosse a ti, estudava o formato de ficheiro .csv já que é bem mais simples de usar com folhas de cálculo como o Excel.

Estás agora a perceber? O Arduino não precisa de saber as horas. Apenas precisa de responder aos comandos do PC.
Se quiseres algo ainda mais simples, colocas o millis() a fazer com que os dados sejam enviados de segundo a segundo.
Depois o processing vê quando recebeu esses dados e junta isso ao teu ficheiro.

Isto não é difícil de fazer, mas se não sabes de programação ou sistemas não se faz dum dia para o outro.
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

PedroS23

*bubulindo eu basicamente já fiz o meu código para o Arduino!!

O código para o Arduino é o seguinte:
Code: [Select]

int PinAnalogA0 = 0;
float valAnalog=0;  // Coloca o Pino A0 a 0
int redPin=13;
int yellowPin=12;
int greenPin=11;

float temp = 0;
int samples[4]; // variavel para melhor precisão
float maxi=0, mini=1000000;


void setup()
{
  Serial.begin(9600);
 
    pinMode(redPin, OUTPUT); 
    pinMode(yellowPin, OUTPUT); 
    pinMode(greenPin, OUTPUT);   
}

void loop ()
{
//  for(i=0; i<=7; i++)
//  { // Obtem 8 amostras da temperatura
//    samples[i] = ( 5.0 * analogRead(PinAnalogA0)) / 1024;
//    temp = temp + samples[i];
//  delay(500);
//  }

    valAnalog = analogRead(PinAnalogA0);
    temp = (valAnalog * 5.0) /1024;
   
    if(temp > maxi)
    {
      maxi = temp;
    } // regista temperatura maxima
   
    if(temp < mini)
    {
      mini = temp;
    } // regista temperatura minima

    if(temp > 1.50)
    {
      digitalWrite(redPin, HIGH);   // set the green LED on
      digitalWrite(greenPin, LOW);
      digitalWrite(yellowPin, LOW);           
    }
   
    if(temp <= 0.50)
    {
      digitalWrite(redPin, LOW);   // set the red LED on
      digitalWrite(yellowPin, HIGH);
      digitalWrite(greenPin, LOW);
    }

    if(temp > 0.50 && temp <= 1.50)
    {
      digitalWrite(redPin, LOW);   // set the red LED on
      digitalWrite(greenPin, HIGH);
      digitalWrite(yellowPin, LOW);
    }

    Serial.print("  Tensao= " );
    Serial.print(temp);
    Serial.print(" || Tensao min= " );
    Serial.print(mini);
    Serial.print(" || Tensao max= " );
    Serial.print(maxi);
    Serial.println("");
 
    delay(2000);
}


O código que fiz para o Processing foi este:
Code: [Select]

import processing.serial.*; // Importa a biblioteca de comunicação serie
Serial myPort;// Cria um objeto para comunicação
String sensorReading="";
PFont font;
PrintWriter output; //escreve os dados recebidos pela porta


void setup()
{
  size(1100,200); // Define o tamanho da janela
  myPort = new Serial(this, "COM4", 9600);  //Conecta-se com a porta COM3
  myPort.bufferUntil('\n');  // Espera receber o primeiro sinal da usb
  font = createFont(PFont.list()[2],32);
  textFont(font);
  output = createWriter( "C:/Users/alunosdefi/Desktop/data.txt" ); //cria o ficheiro de texto neste caminho

}

void draw()
{
//Nao faz nada mas é necessario declarar


void serialEvent (Serial myPort)
{
sensorReading= myPort.readStringUntil('\n'); // Pega a primeira linha recebida na porta serial
  if(sensorReading != null)
  {   // Se a linha não estiver em branco
    sensorReading=trim(sensorReading); // remove os espaços em branco
// remove os espaços em branco
  }
  output.println(second() + "\t" + sensorReading); // escreve segundo tab e o valor da tensão x tab valor tensao y
output.flush(); //escreve todos os dados no ficheiro

writeText("Sensor Reading: " + sensorReading);
}
 
void writeText(String textToWrite){ //Mostra os valores de tensão numa nova janela com o formato writeText definido anteriormente
  background(230);             //cor de fundo da janela
  fill(0);
  text(textToWrite, width/20, height/2);   
}


Com este código já estou a gravar para um bloco de notas .txt, os valores da tensao lida de 1 em 1 segundo (definida pela delay) e o valor da tensao minima e maxima lida até o momento.

Pelo que percebi, devo manter o meu código de Arduino intacto.
Devo alterar apenas o Processing de forma a ir buscar a Data/hora do Pc imprimir e gravar os mesmos para o mesmo ficheiro txt. que estou a gravar a tensao correto??
O codigo será algo semelhante a este:
Date d = new Date();
long current = d.getTime()/1000; ???


Muito Obrigado

Mortis

Pedro,

Como o PC ficará o tempo todo conectado ao arduino, você pode seguir a sugestão do bubulindo e economizar com o RTC. Envia a solicitação de dados do PC para o arduino ('M') e o arduino imprime na serial os dados que já estás a ler.

Vá estudando, faça testes isolados (um sketch para testar a comunicação via serial, um para testar a livraria time, etc), tente entender cada linha do código de cada parte e depois junta tudo para o teu projeto final. Assim você encontra a forma que você acha melhor para fazer o que queres.

bubulindo

O meu código tem uma diferença... não existe delay. Se calhar devias tentar isso.
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Go Up