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
-
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 :
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
void keyPressed() {
buttonFrente.press();
buttonTras.press();
Obrigado
-
Não é qualquer coisa do género:
if(key == 'a'){
andar em frente}
e assim por diante?
-
Man tu es um anjo!
Obrigado amigo funcionou 5*
if (key == 'W') {
port.write('W');
}
else if (key == 'S') {
port.write('S');
-
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.
-
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:
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.
-
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 }
-
infelizmente não funciona
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 :
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"
-
Devia ser Serial.available()>0 e não só aquilo dentro do iff, se dá 0 é porque não está a receber o w.