Pages: [1]   Go Down
Author Topic: Arduino + Borland Builder C++ compilador  (Read 3116 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 2
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Olá

Gostaria de saber se o arduino pode ser programado pelo compilador Borland C++ ,se não,alguem poderia me indicar um que ele trabalhe.

Estou com um projeto para controlar um carrinho de controle remoto em tempo real com o arduino e o computador.

Funciona assim:

Tenho o computador,onde há um programa que ira em tempo real se comunicar com o arduino,de acordo com o que o usuario deseja fazer ações com o carrinho através do programa,ex: Ir para frente,para tras,ele manda esses sinais ao arduino,que através de transistores manda sinais de HIGH e LOW para os transistores,que conectados ao controle remoto assume a função desejada.

Programa(HIGH,LOW)-Arduino(conectado ao pc com o cabo usb)-Transistores-Controle-Carrinho

Meu maior problema é saber qual compilador suporta isso,para fazer um programa com uma interface e não simplesmente descarregar algo no microcontrolador.
Um que eu já vi funcionando é o Python,mas não conheço a sintaxe de programação dele,por exemplo mandar um sinal high para o arduino.

Se alguem souber por favor,de um compilador na qual eu possa acender um led por exemplo no arduino por ele,eu agradeço e muito.

Resumindo:

Tenho o arduino duemilanove e gostaria de saber de algum compilador que eu possa trabalhar com o arduino,e suas sintaxes de HIGH,LOW nesse compilador,para que eu possa trabalhar em tempo real,ou seja,com o arduino conectado com o cabo usb ao computador com o programa sem precisar descarregar algo no microcontrolador

Obrigado =)
« Last Edit: May 15, 2010, 07:49:05 pm by mateusss » Logged

Sao Paulo - Brazil
Offline Offline
Sr. Member
****
Karma: 0
Posts: 268
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

você não vai conseguir compilar os códigos no C++ builder, a  menos que ele te possibilite utilizar o compilador avr-gcc por trás.

Você pode utilizar o Eclipse para te ajudar na programação e para isso tem muita gente já utilizando ele, olhe o link ou google arduino on eclipse

http://www.arduino.cc/playground/Code/Eclipse

Para o seu outro problema, Você deve fazer um aplicativo com uma comunicação serial na qual irá transmitir códigos nos quais o arduino saberá qual porta digitial habilitar ou desabilitar .
Caso você não queira criar isso pode procurar pelo protocolo firmata, onde vc faz um upload de uma lib dentro do arduino depois utiliza uma lib no C++, python, para controlar o arduino direto do seu código atráves da comunicação serial...

http://firmata.org/wiki/Main_Page
http://www.acraigie.com/programming/firmatavb/

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1227642367
Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 70
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Acho que você não quer um compilador pro arduino, mas sim conectar o arduino com um programa em c++ escrito no builder é isso?
Tem que ser o Builder?
Logged

Curitiba PR, Brazil
Offline Offline
Sr. Member
****
Karma: 0
Posts: 272
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Pelo que entendi de sua dúvida, o mais adequado pra você é usar a lib Firmata.

Você grava o firmware no Arduino, e para fazer o controle pelo computador, você pode usar um programa feito na linguagem que preferir, mandando informações para o mesmo através do protocolo da lib.

Neste link tem informações sobre como fazer isso usando o Processing, e um exemplo simples.
http://www.arduino.cc/playground/Interfacing/Processing

Espero ter ajudado.
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 2
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Isso exatamente isso,quero me comunicar com o arduino com ele conectado ao computador e eu mandar instruções a ele.

Eu vi um dos links,utilizando o VB,mas os links que baixei não consegui importar no vb,ja no c++ eu tentei algumas coisas mas tambem sem sucesso.

sobre o builder,arilson eu queria não o builder mas um com que eu pudesse criar uma "boa imagem" para o programa,botoes e etc.


Sobre a lib firmadata eu não entendi muito bem,mas pelo que parece é a mais recomendada não ? procurei alguns topicos,mas tb sem sucesso de pelo menos acender um led em c++/vb ou qualquer outra linguagem com que eu possa utilizar de ferramentas como botões,box,etc

Agradeço a ajuda de vcs,garanto que clareou minha mente quanto ao meu projeto,mas se por favor alguem tiver algum codigo de por exemplo acender um led usando essas linguagens eu agradeço.

Tentei este,mas deu muito erro>>>

No arduino

 int ledPin = 13; // LED connected to digital pin 13 ledPin int = 13; / LED conectado ao pino digital 13
int val=0;  // Byte received val int = 0; / / Byte recebido
int bytesread = 0;  // Number of bytes received counter bytesRead int = 0; / / Número de bytes recebidos contador
char code[20];  // Hold up to 20 Bytes [Code char 20] / / armazenar até 20 bytes

boolean connected = false; boolean conectado = false;

void setup()     // run once, when the sketch starts void setup () / / executa uma vez, quando o desenho começa
{ (
  pinMode(ledPin, OUTPUT); // sets the digital pin as output pinMode (ledPin, OUTPUT); / / configura o pino como saída digital
  Serial.begin(9600); Serial.begin (9600);
} )



void loop()      // run over and over again void loop () / / executa repetidamente
{ (
checkSerial(); checkSerial ();
} )




// Check Serial port if any bytes received from C++ / / Verificar se a porta serial qualquer bytes recebidos C + +
void checkSerial() { void checkSerial () (
  if(Serial.available() > 0) {      // if data available from reader if (Serial.available ()> 0) (/ / se os dados disponíveis do leitor
    if((val = Serial.read()) == 10){    // check for chr(10) initiation if ((val = Serial.read ()) == 10) (/ / verificação para chr (10) o início
      bytesread = 0; bytesRead = 0;
      while(bytesread<20){    // read up to 20 bytes while (bytesRead <20) (/ / ler até 20 bytes
        if( Serial.available() > 0) { if (Serial.available ()> 0) (
          val = Serial.read(); val = Serial.read ();
          if(val == 13) {      // check for chr(13) termination if (val == 13) (/ / verificação para chr (13) denúncia
            break;        // stop reading break; / parar de ler
          } )
          code[bytesread] = val;   // add the byte [Code bytesRead] = val; / / adiciona o byte
          bytesread++;   // ready to read next digit bytesRead + + / / pronto para ler próximo dígito
        } )
      } )
      saySomething();       // Execute received saySomething () / / Execute recebido
      bytesread = 0;     // reset number of bytes read to zero bytesRead = 0; / / número de bytes lidos repor a zero
      delay(50);    // wait for a second atraso (50) / / espera por um segundo
    } )
  } )

} // End of checkSerial ) / / Fim do checkSerial


void saySomething() { void saySomething () (
    Serial.print("I received: "); Serial.print ("Eu recebi:");
    Serial.println(code); Serial.println (código);
    digitalWrite(ledPin, HIGH);   // sets the LED on digitalWrite (ledPin, HIGH); / / define o LED
} )
 

_________________________________________

No c++

 Serial::Serial(char *portName)
( {
 this-> ligado = false;   this->connected = false;

 this-> hSerial = CreateFile (portName,   this->hSerial = CreateFile(portName,
 GENERIC_READ GENERIC_WRITE |,           GENERIC_READ | GENERIC_WRITE,
 0           0,
 NULL,           NULL,
 OPEN_EXISTING,           OPEN_EXISTING,
 FILE_ATTRIBUTE_NORMAL,           FILE_ATTRIBUTE_NORMAL,
 NULL);           NULL);

 :: Memset (& OVR this->, 0, sizeof (this-> OVR));   ::memset(&this->ovr, 0, sizeof(this->ovr));

 this-> ovr.Offset = FILE_WRITE_TO_END_OF_FILE;   this->ovr.Offset = FILE_WRITE_TO_END_OF_FILE;
 this-> ovr.OffsetHigh = -1;   this->ovr.OffsetHigh = -1;

 if (this-> hSerial == INVALID_HANDLE_VALUE)   if(this->hSerial==INVALID_HANDLE_VALUE)
 (   {

 if (GetLastError () == ERROR_FILE_NOT_FOUND) (       if(GetLastError()==ERROR_FILE_NOT_FOUND){

 / / Erro de impressão, se necessário           //Print Error if neccessary
 printf ("ERRO: Manipular não foi anexado.% Motivo: não é disponível. \ n", portName);           printf("ERROR: Handle was not attached. Reason: %s not available.\n", portName);

 )       }
 outro       else
 (       {
 printf ("Erro !!!");           printf("ERROR!!!");
 )       }
 )   }
 outro   else
 (   {
 dcbSerialParams DCB = (0);       DCB dcbSerialParams = {0};
 if (! GetCommState (this-> hSerial & dcbSerialParams))       if (!GetCommState(this->hSerial, &dcbSerialParams))
 (       {
 printf ("não!");           printf("failed!");
 )       }
 CBR_9600 dcbSerialParams.BaudRate =;       dcbSerialParams.BaudRate=CBR_9600;
 dcbSerialParams.ByteSize = 8;       dcbSerialParams.ByteSize=8;
 dcbSerialParams.StopBits = ONESTOPBIT;       dcbSerialParams.StopBits=ONESTOPBIT;
 NOPARITY dcbSerialParams.Parity =;       dcbSerialParams.Parity=NOPARITY;

 if (! SetCommState (hSerial & dcbSerialParams))        if(!SetCommState(hSerial, &dcbSerialParams))
 (        {
 printf ("\ n \ nALERT: Porta Serial falhou!");           printf("\n\nALERT: Serial port failed!");
 )        }
 outro        else
 (        {
 this-> ligado = true;            this->connected = true;
 )        }

 )   }

) }

Serial: Serial ~ () Serial::~Serial()
( {
 if (this-> conectado)   if(this->connected)
 (   {
 this-> ligado = false;       this->connected = false;
 CloseHandle (hSerial this->);       CloseHandle(this->hSerial);
 )   }
) }

bool Serial: ReadData (char * buffer, int nbChar) bool Serial::ReadData(char *buffer, int nbChar)
( {
 [SzBuff char 100];   char szBuff[100];
 DWORD bytesRead;   DWORD bytesRead;
 COMSTAT status;   COMSTAT status;
 erros DWORD;   DWORD errors;

 ClearCommError (   ClearCommError(
 hSerial this-> / / lidar com a comunicação do dispositivo   this->hSerial, // handle to communications device
 E erros, / / ponteiro para variável para receber os códigos de erro   &errors,   // pointer to variable to receive error codes
 & Status);   &status);

 if (status.cbInQue> 0)   if(status.cbInQue>0)
 (   {
 ReadFile (hSerial este>, szBuff, 1, & bytesRead, NULL);       ReadFile(this->hSerial, szBuff, 1, &bytesRead, NULL);
 / / Printf ("% d \ n", (INT) bytesRead);       //printf("%d\n", (int)bytesRead);
 if (bytesRead! = 0)       if(bytesRead != 0)
 (       {
 printf (% c ", szBuff
  • );         printf("%c", szBuff[0]);
)       }
 return true;       return true;
 )   }

 return false;   return false;

) }

bool Serial: WriteData (char * buffer, int nbChar) bool Serial::WriteData(char *buffer, int nbChar)
( {
 tmp DWORD;   DWORD tmp;
 COMSTAT status;   COMSTAT status;
 erros DWORD;   DWORD errors;

 / / WriteFile hSerial (this->, buffer, nbChar & tmp, NULL);   //WriteFile(this->hSerial, buffer, nbChar, &tmp, NULL);
 if (! WriteFile (this-> hSerial, (void *) buffer, nbChar,   if(!WriteFile(this->hSerial, (void *)buffer, nbChar,
 & Tmp, 0))                &tmp, 0))
 (   {

 ClearCommError (       ClearCommError(
 hSerial this-> / / lidar com a comunicação do dispositivo       this->hSerial, // handle to communications device
 E erros, / / ponteiro para variável para receber os códigos de erro       &errors,   // pointer to variable to receive error codes
 & Status);       &status);

 N "printf ("% d \, (int) erros);       printf("%d\n",(int)errors);

 return false;       return false;
 )   }
 outro   else
 return true;       return true;
) }

bool Serial: IsConnected () bool Serial::IsConnected()
( {
 retorno this-> ligado;   return this->connected;
) }



Desde já agredeço!


« Last Edit: May 25, 2010, 07:33:03 pm by mateusss » Logged

Pages: [1]   Go Up
Jump to: