[Resolvido] Como passar variavel do processing para arduino?

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

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
}

HugoPT:

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.

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.

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:

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

bubulindo:

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:

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

Na boa. :slight_smile: 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. :wink: