Go Down

Topic: [Resolvido] Como passar variavel do processing para arduino? (Read 2430 times) previous topic - next topic

rbobbio

Sep 26, 2012, 05:41 am Last Edit: Sep 27, 2012, 02:58 am by rbobbio Reason: 1
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

HugoPT

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
}
Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

rbobbio


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.

andrefe

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.

bubulindo


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: [Select]

#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.
This... is a hobby.

rbobbio



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: [Select]

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

bubulindo

Na boa. :) 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. ;)
This... is a hobby.

Go Up