Arduino + Serial Communication C++

Estou procurando a dias ja alguma forma de comunicar serial com arduino e C++, mas esta complicado, nada efetivo, todos os fóruns pessoal indica o Rogercom, mas os códigos dele não rodaram aqui, ...

Enfim se alguém tiver algum tutorial ou link ai pra indicar...

Curioso demorei uns 1o segundos a encontrar no google isto. Parece que tem alguma coisa para se começar :grin: http://webtutsdepot.com/2010/05/01/arduino-visual-c-plus-plus-tutorial/

Eu estou usando C++ puro, com o DevC++, o visual C++ instala uns 20GB de coisas da microsoft no PC,... eu já tinha visto esse link, até testei com o DevC++ mas não rolou.

Na verdade eu estava querendo fazer rodar com o Qt mas esta uma merda de achar algo compatível, até acha diversas libs mas tudo para versão 4.x...

Se alguém ja conseguiu com alguma linguagem desktop comunicar posta ai....

o visual C++ instala uns 20GB de coisas da microsoft no PC,...

Concordo contigo plenemente.

Se alguém ja conseguiu com alguma linguagem desktop comunicar posta ai....

Ja usei Visual Basic 2010, Real Studio e um pouco de Delphi com o Embarcadero De todos o que mais gosto é do Real Studio por é multiplataforma na hora de fazer o executavel.Tanto faz para MAC OS, WIN ou LINUX No entanto a documentaçao na minha opiniao é má.Por vezes nao sei usar uma funçao e a documentaçao é muito obscura ou falta dela.

Eu tenho DVD da embarcadero, delphi é outro que instala 20GB, mas eu gosto dele, só que eu to totalmente sem espaço.

To apanhando feio aqui, ontem fiquei das 14:00 às 23:00 direto tentando com Qt em Linux, depois Qt no Windows, e C++, nada funcionou, hoje ja tentei desde as 10:00, em Java, C, C++ e nada concreto, …

O resto ta tudo funcionando do sistema só falta comunicação com Alguma linguagem Desktop pra interfacear, …

Assumindo que estás a usar Linux (e sendo eu tudo menos um perito em Linux), não tens de seguir o processo normal do Linux (Posix???) e abrir o “ficheiro” correspondente à porta série e escrever para lá?

Em Windows e C++, admito que deve ser uma merda sem teres os drivers (incluídos nesses 20Gb) para a comunicação série. Antigamente com as portas RS232 era apenas declarar um apontador para o 0x378 (ou algo similar) e estava a andar de mota, com as novas versões do Windows e USB, sinceramente não sei.

Em tempos este site era bom para comunicações… agora está um pouco mudado, mas vejo que ainda tem muita informação.

http://www.lvr.com/serport.htm

Tens aqui um pouco mais de info:

http://www.tldp.org/HOWTO/Serial-Programming-HOWTO/x56.html#AEN69

http://www.easysw.com/~mike/serial/serial.html ← o meu favorito

http://www.comptechdoc.org/os/linux/programming/c/linux_pgcserial.html

http://cboard.cprogramming.com/windows-programming/59703-cplusplus-serial-port-programming.html

Finalmente, para comunicares em Java, podes usar a libraria do Arduino.

declarar um apontador para o 0x378 (ou algo similar)

Este era para a porta Paralela LPT1 :grin: :grin: Se estas a usar o "pinguim" espreita o Gambas2. Com ele tambem podes criar apps em GUI.Muito parecido ao VB no Windows

0x400 era a porta série então. LOL

brigadão pelas respostas. Infelizmente ainda não consegui, mas só estou trabalhando nisto aos fins de semana, sexta a noite vou tentar novamente e aviso aqui se tiver sucesso ;)

Ok...

Ahh, se quiseres, eu tenho aqui um programa em C compilado com XCode para enviar um timestamp para o Arduino. Pode-te ser útil talvez?

XCode do iOS ?

Me envie, de qualquer forma C é C....

XCode para MacOSX

Tens um email?

Marcelo, you've got mail.

Já agora, edita o post e retira a morada para evitar que sejas bombardeado com spam.

Se alguém estiver interessado no código que partilhei com o Marcelo, que me mande uma mensagem com um contacto e eu envio sem problemas.

Ja removi, brigadão.

Na boa.

Espero que funcione. Como disse antes, eu usei a porta série em C com windows fazendo o truque do apontador e mais tarde "brinquei" um pouco com a porta série em Linux e pelo que vejo no código que te enviei é parecido o suficiente para usares em Linux sem grandes problemas.

Ahh, se conseguires fazer disable do auto-reset do Arduino, acredito que seja mais simples de testar a comunicação.

Você ainda tem o código para windows?

O meu arduino não reseta quando comunico com a serial, mas eu nunca desabilitei o auto-reset....

Não... mas estamos a falar no Windows que se usava no longínquo ano de 1999. Era prai o 95 ou 98 e esse ainda tinha resquícios do DOS nele (e uma porta RS-232 nativa) que permitia usá-la criando um apontador para aquelas moradas que referi.

Agora, com o USB, não imagino como seja e acho que não te vais safar sem uma biblioteca qualquer.

Se quiseres java, podes usar a biblioteca que o Arduino usa.

Estou tentando com qualquer coisa ultimamente, meu desejo era fazer em C++ para usar com Qt mas se não der certo, pelo menos por enquanto vou usar java…

vou ter que dar uma estudada como a IDE funciona…

Usa a biblioteca qextserialport (https://code.google.com/p/qextserialport/), na documentação dela ensina a fazer a comunicação. Mas Talvez o Código Abaixo te ajude um pouco.

#include "qextserialport.h"
#include "qextserialenumerator.h"
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include"QTimer"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //Scanei as portas disponiveis e carrega em um ComboBox
    foreach (QextPortInfo info, QextSerialEnumerator::getPorts())
    ui->List_PortSerial->addItem(info.portName);

    // Define paramentros da porta serial
     PortSettings settings = {BAUD9600, DATA_8, PAR_NONE, STOP_1, FLOW_OFF, 10};
     port = new QextSerialPort(ui->List_PortSerial->currentText(), settings, QextSerialPort::Polling);

     //chama a função de leitura da porta serial de 10 em 10ms
     QTimer *timer = new QTimer(this);
     connect(timer, SIGNAL(timeout()),SLOT(onReadyRead()));
     timer->start(10);

     enumerator = new QextSerialEnumerator(this);
     enumerator->setUpNotifications();
}

MainWindow::~MainWindow()
{
    delete ui;
    delete port;
}
//Botão Conectar na porta Selecionada no ComboBox
void MainWindow::on_B_Conectar_clicked()
{
        
    if (!port->isOpen()) {
        port->setPortName(ui->List_PortSerial->currentText());
        port->open(QIODevice::ReadWrite);
    }
    else {
        port->close();
    }

}
//Le porta serial e Insere em um PainTextEdit
void MainWindow::onReadyRead()
{
    if (port->bytesAvailable()) {
    ui->Status_PortSerial->moveCursor(QTextCursor::End);
    ui->Status_PortSerial->insertPlainText(QString::fromLatin1(port->readAll()));
    }
}
//Envia dados de um PainTextEdit
void MainWindow::on_B_Envia_clicked()
{
        port->write(ui->Status_PortSerial_2->toPlainText().toLatin1());
 }