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.
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
}
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.
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.
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': {
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.
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.