Notificador de E-Mail, Ajuda na leitura do parsing da string enviada.

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 ;)).
O lcd que tenho é este https://www.sparkfun.com/products/10168

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?

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

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

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

mmoscz:
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.
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 :slight_smile: 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.

Segue novo arquivo...

Display_CLP_SERIAL_5110_3.rar (4.79 KB)

Dicamarques:
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 ;)).
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.

mmoscz:
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: Build a Simple Gmail Notifier using Windows Forms | DotNetCurry

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

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)

mmoscz:
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.

Sim... ou vbNewLine

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.

:open_mouth: a minha montagem é um pouco mais fina :smiley:

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.

//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. Overview | Nokia 5110/3310 Monochrome LCD | Adafruit Learning System

Bom, o problema é o seguinte, o

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

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