Pages: [1]   Go Down
Author Topic: Notificador de E-Mail, Ajuda na leitura do parsing da string enviada.  (Read 1586 times)
0 Members and 1 Guest are viewing this topic.
Portugal
Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bom dia, ando a fazer um programita para quando receber um email o arduino acender um LED e mostrar num LCD o assunto e o nº de emails lidos.
Basicamente tenho um programa no PC (feito em VB.net) que lê o Atom https://mail.google.com/mail/feed/atom do gmail e obtem a informaçao necessaria. A parte do computador ja está quase feita (encontrei na net um guia que ajudou muito) agora a parte do arduino neste momento so acende o LED ou apaga conforme houver emails ou nao.
A informacao que o pc manda por serie vai ser do tipo: [nº emails por ler];[Assunto do email nº1];[assunto do email nº2];etc. E quero que o arduino mostre o nº de emails e os respectivos assuntos por isso vim aqui pedir um ajudita pois nao sei muito de programacao em arduino (por enquanto smiley-wink).
O lcd que tenho é este https://www.sparkfun.com/products/10168
Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3323
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Para isso vais precisar duma biblioteca para esse LCD...

Depois disso, tens de definir um protocolo para a transmissão de dados. Percebes o que quero dizer com protocolo de dados?
Logged

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).

Portugal
Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Para isso vais precisar duma biblioteca para esse LCD...

Depois disso, tens de definir um protocolo para a transmissão de dados. Percebes o que quero dizer com protocolo de dados?
Eu ja sei mexer com o lcd e mostrar texto e imagens, por isso esse nao é o meu maior dos problemas smiley. Protocolo, do genero TCP ou FTP so que versao arduino (sei que nao é bem mas para questoes de exemplo)?

Ja agora eis o codigo de teste que usei para saber se ha ou nao email, a parte do arduino:
Quote
int outPin = 13; // Output connected to digital pin 12
int mail = LOW; // Is there new mail?
int val; // Value read from the serial port

void setup()
{
    pinMode(outPin, OUTPUT); // sets the digital pin as output
    Serial.begin(9600);
    Serial.flush();
}

void loop()
{
    // Read from serial port
    if (Serial.available())
    {
        val = Serial.read();
        Serial.println(val);
        if (val == 'M') mail = HIGH;
        else if (val == 'N') mail = LOW;
    }

    // Set the status of the output pin
    digitalWrite(outPin, mail);
}

Logged

Brasil
Offline Offline
Sr. Member
****
Karma: 2
Posts: 316
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Eu anexei um projeto que montei ontem para comunicar via serial com o arduino e apresentar o texto na serial.

1. Faça o upload para o arduino, no projeto já estão declarados os pinos do arduino para o LCD.
2. Para enviar dados para o arduino vc pode abrir o Console e digitar {coluna}{linha}{B ou qualquer outro caracter}{Texto a ser apresentado}
Se vc colocar B ele vai apresentar o texto em caracteres grandes, centralizado.
Seu programa pode enviar algo do tipo.
Code:
00B{NR MENSAGENS}
04 {SUBJECT da primeira mensagem}
05 {SUBJECT da segunda mensagem}

PS. Existem um códigos a mais no projeto, prq a comunicação entre os arduinos pode ser via I2C ou via SERIAL.

* Display_CLP_SERIAL_5110_2.rar (4.65 KB - downloaded 16 times.)
Logged

4x Duemilanove (clone)
Uno torrado (clone)
Amiga 1200 40MB
Windows XP


Portugal
Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Eu anexei um projeto que montei ontem para comunicar via serial com o arduino e apresentar o texto na serial.

1. Faça o upload para o arduino, no projeto já estão declarados os pinos do arduino para o LCD.
2. Para enviar dados para o arduino vc pode abrir o Console e digitar {coluna}{linha}{B ou qualquer outro caracter}{Texto a ser apresentado}
Se vc colocar B ele vai apresentar o texto em caracteres grandes, centralizado.
Seu programa pode enviar algo do tipo.
Code:
00B{NR MENSAGENS}
04 {SUBJECT da primeira mensagem}
05 {SUBJECT da segunda mensagem}

PS. Existem um códigos a mais no projeto, prq a comunicação entre os arduinos pode ser via I2C ou via SERIAL.


Obrigado smiley O programo do PC ainda nao acabei, esse texto tem de aparecer todo numa linha, do genero: 00B{4} 04{Bla bla} 05{bla bla}? Ja agora o 04 e 05 sao ao acaso ou tem de ser essa a ordem Esqueca já compreendi. Nota o arquivo esta corrompido.
Logged

Brasil
Offline Offline
Sr. Member
****
Karma: 2
Posts: 316
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Segue novo arquivo...


* Display_CLP_SERIAL_5110_3.rar (4.79 KB - downloaded 16 times.)
Logged

4x Duemilanove (clone)
Uno torrado (clone)
Amiga 1200 40MB
Windows XP


Brasil
Offline Offline
Sr. Member
****
Karma: 2
Posts: 316
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bom dia, ando a fazer um programita para quando receber um email o arduino acender um LED e mostrar num LCD o assunto e o nº de emails lidos.
Basicamente tenho um programa no PC (feito em VB.net) que lê o Atom https://mail.google.com/mail/feed/atom do gmail e obtem a informaçao necessaria. A parte do computador ja está quase feita (encontrei na net um guia que ajudou muito) agora a parte do arduino neste momento so acende o LED ou apaga conforme houver emails ou nao.
A informacao que o pc manda por serie vai ser do tipo: [nº emails por ler];[Assunto do email nº1];[assunto do email nº2];etc. E quero que o arduino mostre o nº de emails e os respectivos assuntos por isso vim aqui pedir um ajudita pois nao sei muito de programacao em arduino (por enquanto smiley-wink).
O lcd que tenho é este https://www.sparkfun.com/products/10168
Pode me passar o GUIA que você utilizou, pois o meu vou fazer em delphi que é a unica linguagem para desktop que proficiência. E depois partir para por em conjunto com um ethernet shield.
Logged

4x Duemilanove (clone)
Uno torrado (clone)
Amiga 1200 40MB
Windows XP


Portugal
Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Pode me passar o GUIA que você utilizou, pois o meu vou fazer em delphi que é a unica linguagem para desktop que proficiência. E depois partir para por em conjunto com um ethernet shield.

Não é bem guia, é a junçao de um programa feito em vb.net para ler o Atom do GMail e de como usar o Serial no VB.net. Serial: http://www.lvr.com/serport.htm Gmail: http://www.dotnetcurry.com/ShowArticle.aspx?ID=292
Logged

Portugal
Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Segue novo arquivo...


Hoje tive tempo de voltar a montar o LCD no arduino e testar o seu programa, fiz as ligacoes com os mesmos pinos mas sempre que mando algo por serie nao faz nada o lcd. Exemplo: 00B{1}04 {TESTE}
Logged

Brasil
Offline Offline
Sr. Member
****
Karma: 2
Posts: 316
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Esse é o que eu estava atualizando.
Acho que o que mandei para vc estava apenas usando I2C.
Esse agora funciona...
Mas para cada comando, você deve mandar em uma linha com o NEWLINE, ele não entende comandos na mesma linha...

* Display_5110.rar (4.77 KB - downloaded 16 times.)
Logged

4x Duemilanove (clone)
Uno torrado (clone)
Amiga 1200 40MB
Windows XP


Portugal
Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Esse é o que eu estava atualizando.
Acho que o que mandei para vc estava apenas usando I2C.
Esse agora funciona...
Mas para cada comando, você deve mandar em uma linha com o NEWLINE, ele não entende comandos na mesma linha...

Ha ok, o new line é acrescentar no fim "\n"
E ja agora o que ligo no pino 11 e 12?
Simplesmente nao consigo fazer com que algo aparece no arduino.
« Last Edit: February 13, 2013, 07:54:02 am by Dicamarques » Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3323
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Sim... ou vbNewLine

http://msdn.microsoft.com/pt-br/library/microsoft.visualbasic.constants.vbnewline.aspx
Logged

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).

Brasil
Offline Offline
Sr. Member
****
Karma: 2
Posts: 316
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ha ok, o new line é acrescentar no fim "\n"
E ja agora o que ligo no pino 11 e 12?
Simplesmente nao consigo fazer com que algo aparece no arduino.
[/quote]
O pino 11 vai para o PINO LED do 5110
Manda uma foto da sua protoboard. as vezes da para descobrir o q esta havendo
Essa é a minha.
Logged

4x Duemilanove (clone)
Uno torrado (clone)
Amiga 1200 40MB
Windows XP


Portugal
Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

:O a minha montagem é um pouco mais fina smiley-grin

Agora uma duvida: tou a fazer uns testes em que mando algo por serie e mostre a mensagem no LCD, so que sempre que mando aparece apenas uma letra de cada vez e nao aparece a mensagem toda.
Quote
//Display temperature and voltage in Nokia 5510 LCD

#define aref_voltage 3.3 // we tie 3.3V to ARef and measure it with a multimeter!
 
//TMP36 Pin Variables
int tempPin = 1;         //the analog pin the TMP36's Vout (sense) pin is connected to
                         //the resolution is 10 mV / degree centigrade with a
                         //500 mV offset to allow for negative temperatures
int tempReading;         // the analog reading from the sensor
char serial;
char myString;
// The pins to use on the arduino to connect the lcd
#define PIN_SCE   7
#define PIN_RESET 6
#define PIN_DC    5
#define PIN_SDIN  4
#define PIN_SCLK  3
 
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

// pin 7 - Serial clock out (SCLK)
// pin 6 - Serial data out (DIN)
// pin 5 - Data/Command select (D/C)
// pin 4 - LCD chip select (CS)
// pin 3 - LCD reset (RST)
Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 7, 6);

#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2


void setup()   {               
  // If you want to set the aref to something other than 5v
  analogReference(EXTERNAL);
  Serial.begin(9600);
  display.begin();
  // init done
  
  // you can change the contrast around to adapt the display
  // for the best viewing!
  display.setContrast(50);

//  display.display(); // show splashscreen
//  delay(2000);
  display.clearDisplay();   // clears the screen and buffer

  // text display tests
  display.setTextSize(1);
  display.setTextColor(BLACK);
  display.setCursor(10,20);
  display.println("Thermometer");
  display.setCursor(10,30);
  display.println("by Diogo");
  display.display();
  delay(1500);
  display.clearDisplay();
}
void loop()
{
  String stringOne = "Hello String";
 if(Serial.available())
 {
  display.clearDisplay();
  serial = Serial.read();
  stringOne =  String(serial);
  display.setTextSize(1);
  display.setTextColor(BLACK);
  display.setCursor(10,10);
  display.println(stringOne);
  display.display();
  delay(2000);
  display.clearDisplay();
 }

   display.setTextSize(1);
  display.setTextColor(BLACK);
  display.setCursor(10,10);
  display.println("-.-");
  display.display();
 
}

Para usar este codigo preciso usar a livraria da Adafruit. http://learn.adafruit.com/nokia-5110-3310-monochrome-lcd
Logged

Brasil
Offline Offline
Sr. Member
****
Karma: 2
Posts: 316
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bom, o problema é o seguinte, o

Code:
  serial = Serial.read();
  stringOne =  String(serial);
Aqui você está lendo apenas 1 letra de cada vez, e imprimindo ela.
O Serial.read(), lê um caracter por vez.
De uma olhada lá no meu projeto, e você vai ver que é criado um array de char, para guardar todas as letras da serial até chegar um '\10' que é o new line, ai depois imprime...
Code:
    while (Serial.available())
      {
      DadoLido = Serial.read(); // Le o char da serial.     
      if (DadoLido != 10) // Verifica se não é um NEWLINE
        {
        T_SerialDataRead = (char *)realloc(SerialDataRead, sizeof(char) * (SerialDataRead_Count + 1));  // Aumenta o tamanho do array
        SerialDataRead = T_SerialDataRead;
        SerialDataRead[SerialDataRead_Count] = DadoLido; // Guarda o caracter lido.
        SerialDataRead_Count++;     
        }
      }
    if (DadoLido == 10) // Se for NEWLINE
      {       
      ProcessaComando();  // entra na função para imprimir no LCD.
      }

Logged

4x Duemilanove (clone)
Uno torrado (clone)
Amiga 1200 40MB
Windows XP


Pages: [1]   Go Up
Jump to: