collapse

* Links de Robótica

* Posts Recentes

Medir Agua que está no Poço por senso
[Ontem às 22:57]


CNC Laser 60w por nandotx
[15 de Outubro de 2017, 19:01]


Ajuda Projecto IR / RF por Gb
[14 de Outubro de 2017, 15:14]


Equipar laboratorio por LVirtual
[13 de Outubro de 2017, 08:34]


Arranjo de Berbequim por jm_araujo
[13 de Outubro de 2017, 08:34]


Escolher ligações por dropes
[08 de Outubro de 2017, 23:26]


Perfis V-Slot vs C-Beam vs Bosch vs 8020 por senso
[08 de Outubro de 2017, 18:22]


Ideias para construir um quadrúpede simples por Njay
[07 de Outubro de 2017, 22:12]


Meu projecto - Arm Robot com arduino por Diogo Bento
[05 de Outubro de 2017, 20:54]


Alimentar arduino nano com 12V por helderjsd
[05 de Outubro de 2017, 16:26]

Autor Tópico: Problema com Processing  (Lida 1188 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline Blackiller

  • Mini Robot
  • *
  • Mensagens: 9
Problema com Processing
« 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

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.397
  • Helpdesk do sitio
Re: Problema com Processing
« Responder #1 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?
Avr fanboy

Offline Blackiller

  • Mini Robot
  • *
  • Mensagens: 9
Re: Problema com Processing
« Responder #2 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');

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.397
  • Helpdesk do sitio
Re: Problema com Processing
« Responder #3 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.
Avr fanboy

Offline Blackiller

  • Mini Robot
  • *
  • Mensagens: 9
Re: Problema com Processing
« Responder #4 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.
« Última modificação: 24 de Maio de 2011, 00:58 por Blackiller »

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.397
  • Helpdesk do sitio
Re: Problema com Processing
« Responder #5 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 }
Avr fanboy

Offline Blackiller

  • Mini Robot
  • *
  • Mensagens: 9
Re: Problema com Processing
« Responder #6 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"



Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.397
  • Helpdesk do sitio
Re: Problema com Processing
« Responder #7 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.
Avr fanboy