collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: Problema com Processing  (Lida 3186 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.733
  • 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.733
  • 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.733
  • 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.733
  • 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