Pages: [1]   Go Down
Author Topic: [Resolvido] Como passar variavel do processing para arduino?  (Read 1930 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Boa noite galera,

preciso passar o valor de uma variável do processing para ser lido e tratado no arduino, mas esta variável tem que ser um nome e não um número ou letra.
Ex.:
String teste = "acionar";
port.write(teste);

O valor escrito na porta serial (acionar), eu preciso capturá-lo na programação do arduino para efetuar comparações.

Obrigado
« Last Edit: September 26, 2012, 07:58:53 pm by rbobbio » Logged

Portugal
Offline Offline
Edison Member
*
Karma: 37
Posts: 1591
Pretending you know everything then you will learn nothing.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
preciso passar o valor de uma variável do processing para ser lido e tratado no arduino, mas esta variável tem que ser um nome e não um número ou letra.
Ex.:
String teste = "acionar";
port.write(teste);

Porque nao outra abordagem ao problema.Para que enviares isso tudo se podes enviar um carater unico o que te facilita e consome menos recursos.
Tipo

acionar subtituido por uma letra 'A'
no arduino podias ter algo

char received;

received = Serial.read();
if(received == 'A'){
 //faz o que queres
}
Logged

Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B


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

Quote
preciso passar o valor de uma variável do processing para ser lido e tratado no arduino, mas esta variável tem que ser um nome e não um número ou letra.
Ex.:
String teste = "acionar";
port.write(teste);

Porque nao outra abordagem ao problema.Para que enviares isso tudo se podes enviar um carater unico o que te facilita e consome menos recursos.
Tipo

acionar subtituido por uma letra 'A'
no arduino podias ter algo

char received;

received = Serial.read();
if(received == 'A'){
 //faz o que queres
}


Bom dia HugoPT,

preciso passar uma palavra inteira pelo falo de que vou utilizar "todas" as portas digitais e analógicas do meu arduino, sendo assim eu passaria a porta a ser acionada pela Serial.

Ex.: Processing escreve na serial 1Port8, então eu iria capturar esta informação da porta serial e tratá-la conforme minha necessidade.
Neste caso eu farei uma substrig() separando em duas variáveis, sendo uma delas o primeiro byte (1) e a segunda qual porta deve executar tal função.

Obs.: essa informação escrita pelo processing na serial se dá através da leitura um arquivo TXT que é feita constantemente.

Obrigado.
Logged

São Paulo - Brasil
Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

A "palavra" a ser enviada tem sempre o mesmo tamanho? (ex: 6 bytes)

Se sim, é só enviar byte a byte e ler byte a byte.

Não sei se é isso que você quer.
Logged

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

preciso passar uma palavra inteira pelo falo de que vou utilizar "todas" as portas digitais e analógicas do meu arduino, sendo assim eu passaria a porta a ser acionada pela Serial.

Tu tens prazer em lidar com strings?

Tendo em conta que "todos" os pinos do Arduino são enderecados por números... andar com strings para cima e para baixo é uma perda de tempo, recursos, paciência e alguma falta de visão.

Queres actuar o pino 13 (o do led)? Envias 13N

Queres desligar o pino? Envias 13F.

Queres saber o estado? Envias 13S.

Queres saber o valor analógico das entradas? Envias 13A.

Depois no Arduino:

Code:
#include <stdlib.h>


char temp[3];
unsigned char pino;

temp[2] ='\0'; //preciosismos... indispensáveis...
if (Serial.available() > 3) { //minimo indispensável... embora fosse bom colocar um caracter de termino.
   temp[0] = Serial.read();
   temp[1] = Serial.read();
   pino = atoi(temp);

   switch(Serial.read()) {
      case 'N': {
         digitalWrite(pino, HIGH);
         break;
         }
      case 'F': {
         digitalWrite(pino, LOW);
         break;
         }
      case 'S': {
         //assumindo que fizeste pinMode() antes
         Serial.print("S");
         Serial.print(pino);
         Serial.print('-');
         Serial.println(digitalRead(pino));
         break;
         }
      case 'A': {
         
         Serial.print("A");
         Serial.print(pino);
         Serial.print('-');
         Serial.println(analogRead(pino));
         break;
         }
   }//end switch
}//end if.
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).

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

preciso passar uma palavra inteira pelo falo de que vou utilizar "todas" as portas digitais e analógicas do meu arduino, sendo assim eu passaria a porta a ser acionada pela Serial.

Tu tens prazer em lidar com strings?

Tendo em conta que "todos" os pinos do Arduino são enderecados por números... andar com strings para cima e para baixo é uma perda de tempo, recursos, paciência e alguma falta de visão.

Queres actuar o pino 13 (o do led)? Envias 13N

Queres desligar o pino? Envias 13F.

Queres saber o estado? Envias 13S.

Queres saber o valor analógico das entradas? Envias 13A.

Depois no Arduino:

Code:
#include <stdlib.h>


char temp[3];
unsigned char pino;

temp[2] ='\0'; //preciosismos... indispensáveis...
if (Serial.available() > 3) { //minimo indispensável... embora fosse bom colocar um caracter de termino.
   temp[0] = Serial.read();
   temp[1] = Serial.read();
   pino = atoi(temp);

   switch(Serial.read()) {
      case 'N': {
         digitalWrite(pino, HIGH);
         break;
         }
      case 'F': {
         digitalWrite(pino, LOW);
         break;
         }
      case 'S': {
         //assumindo que fizeste pinMode() antes
         Serial.print("S");
         Serial.print(pino);
         Serial.print('-');
         Serial.println(digitalRead(pino));
         break;
         }
      case 'A': {
         
         Serial.print("A");
         Serial.print(pino);
         Serial.print('-');
         Serial.println(analogRead(pino));
         break;
         }
   }//end switch
}//end if.

Boa noite bubulindo,

quando eu disse passar uma palavra inteira era o fato de ter que passar realmente o que vc exemplificou, somente o número da porta juntamente com um char, que definirá a ação a ser tomada. E como o arduino lê somente um caracter por vez é que me surgiu tal dúvida.

O exemplo que vc postou aqui é realmente TUDO o que eu estava procurando, supriu perfeitamente minha necessidade.

Muito obrigado a todos pela ajuda e pelo tempo dedicado.
Logged

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

Na boa. smiley Foi um prazer ajudar.

Eu como vi 1Port8, fiquei confuso com o que pretendias uma vez que terias de lidar com o Port como string e isso leva recursos.

Já agora, uma pequena nota... a colocacão da letra no meu tipo de mensagem não é casual... se a letra estivesse no início da mensagem, o código era mais chato de fazer. smiley-wink
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).

Pages: [1]   Go Up
Jump to: