LusoRobótica - Robótica em Português

Software => Software e Programação => Tópico iniciado por: Blackiller em 23 de Maio de 2011, 20:30

Título: Problema com Processing
Enviado por: Blackiller em 23 de Maio de 2011, 20:30
Boas pessoal eu estou a fazer um programa para controlar o meu robot via serial.
Mas estou aqui com um problema.
O programa que tenho ate agora e este :

Citar
import processing.serial.*;

Serial port;

boolean GRID = false;

PFont font;
int squareSize = 50;


Button buttonFrente;
Button buttonTras;


void setup() {
  size(1200,1600);

 
  font = loadFont("Verdana-10.vlw");
  textFont(font, 10);
 
  buttonFrente = new Button(175, 525, 150, color(50), color(100), color(150));
  buttonTras = new Button(175, 675, 150, color(50), color(100), color(150));
 
  println(Serial.list());
 
  port = new Serial(this, Serial.list()[0], 9600);
 
  smooth();
}

void draw() {
  background(0);
 
  stroke(255);
 
  buttonFrente.update();
  buttonFrente.display();
 
  buttonTras.update();
  buttonTras.display();
 

  if (buttonFrente.pressed == true) {
    port.write('W');
  }
 
  else if (buttonTras.pressed == true) {
    port.write('S');
  }
 
}
void mousePressed() {
  buttonFrente.press();
  buttonTras.press();

}

void mouseReleased() {
  buttonFrente.release();
  buttonTras.release();


}


Mas queria implementar também uma função de controlo pelo teclado e não sei como fazer...
Se fizer "KeyPressing" e uma tecla aleatória eu queria deferir uma e não estou a conseguir.
Se alguém poder dar ai uma mãozinha agradecia

Citar
void keyPressed() {
  buttonFrente.press();
  buttonTras.press();


Obrigado
Título: Re: Problema com Processing
Enviado por: senso em 23 de Maio de 2011, 20:36
Não é qualquer coisa do género:
if(key == 'a'){
andar em frente}

e assim por diante?
Título: Re: Problema com Processing
Enviado por: Blackiller em 23 de Maio de 2011, 20:46
Man tu es um anjo!
Obrigado amigo funcionou 5*
Citar
if (key == 'W') {
    port.write('W');
  }
 
  else if (key == 'S') {
    port.write('S');
Título: Re: Problema com Processing
Enviado por: senso em 23 de Maio de 2011, 20:53
Não uses o else if, usa só ifs, se não ele tem de correr uma carrada de else if, basta if para cada tecla.
Título: Re: Problema com Processing
Enviado por: Blackiller em 23 de Maio de 2011, 23:53
ok agora o código so tem if´s mas enfrento outro problema que me esta a deixar maluco. :'(
Como por a correr esse código mas de cada vez que largo a tecla ele faz clear a todos os pins, por outras palavras uso o código para fazer set ao pin que mando mas quero que quando largar a tecla correspondente ao pin ele faça clear e passe a "0"   ;)


Mod:.

Tentei fazer o programa assim:

Citar
if(keyPressed) {

    if (key == 'w' || key == 'W') {
      port.write('W');
    }
   
    if (key == 'a' || key == 'A') {
      port.write('A');
    }
    if (key == 's' || key == 'S') {
      port.write('S');
    }
    if (key == 'd' || key == 'D') {
      port.write('D');
    }
   
 if(keyReleased) {
   port.write('X');
   port.write('x');
 }

Ma da me erro na variável "keyreleased" mas queria algo do genero.
Se poderem dar uma ajuda mais uma vez agradeço.
Título: Re: Problema com Processing
Enviado por: senso em 25 de Maio de 2011, 20:52
Tens a certeza que a variavel keyReleased existe ou se o processing a usar para dizer que uma tecla foi largada?

Não é mais facil simplesmente ter o código anterior e depois no arduino fazes:
If(serial.read == 'W'){
 andar em frente}
else{
parar }
Título: Re: Problema com Processing
Enviado por: Blackiller em 26 de Maio de 2011, 00:51
infelizmente não funciona

Citar
int led = 13;                   
 int entrada;                   
 
 void setup() {                 
   Serial.begin(9600);           
   pinMode(led, OUTPUT);       
 }
 
 void loop() {
   if(Serial.available()) {       
   if(Serial.read == 'W'){
     digitalWrite(led, HIGH)}
   else{digitalWrite(led, HIGH)}
      }
    }
 

Dame erro "invalid use of number"
também tentei :

 
Citar
void loop() {
   if(Serial.available()) {       
      entrada = Serial.read();   
      Serial.print(entrada);       
      if (entrada == 'w') {         
        digitalWrite(led, HIGH);   
      else{       
        digitalWrite(led, LOW);   
      }
    }
  }

e ao enviar o "w" dame sempre "0" ou seja "LOW"


Título: Re: Problema com Processing
Enviado por: senso em 26 de Maio de 2011, 01:11
Devia ser Serial.available()>0 e não só aquilo dentro do iff, se dá 0 é porque não está a receber o w.