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: Controlar Arduino Via Teclado  (Lida 10562 vezes)

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

Offline Psycop

  • Moderator
  • Mini Robot
  • *****
  • Mensagens: 105
    • O.Cantinho.da.Programação
Controlar Arduino Via Teclado
« em: 28 de Janeiro de 2012, 11:14 »
Olá

Eu gostaria de controlar o Arduino via teclado em tempo real, sem que tivesse que inserir a tecla no SerialMonitor e efectuar o send para cada acção:

Neste momento estou a utilizar esse método, e o seguinte código:

Código: [Seleccione]
int n;
int motorPin1 = 5;
int motorPin2 = 6;
int motorPin3 = 10;
int motorPin4 = 11;

void setup()
{
 Serial.begin(9600);
 pinMode(motorPin1, OUTPUT);
 pinMode(motorPin2, OUTPUT);
 pinMode(motorPin3, OUTPUT);
 pinMode(motorPin4, OUTPUT);

}

void loop()
{
   
 if (Serial.available() > 0)
    {
    n = Serial.read();
   
    Serial.print("Voce Digitou: ");
    Serial.println(n, BYTE);
 
   
 if (n == 119)
 {
 //Avançar
 
 digitalWrite(motorPin1, LOW);
 digitalWrite(motorPin2, HIGH);
 digitalWrite(motorPin3, HIGH);
 digitalWrite(motorPin4, LOW);
 }
 
 if ( n == 115)
 {
 //Recuar
 
 digitalWrite(motorPin1, HIGH);
 digitalWrite(motorPin2, LOW);
 digitalWrite(motorPin3, LOW);
 digitalWrite(motorPin4, HIGH);
 }
 
 if ( n == 100)
 {
   //Direita
   digitalWrite(motorPin1, LOW);
   digitalWrite(motorPin2, HIGH);
   digitalWrite(motorPin3, LOW);
   digitalWrite(motorPin4, HIGH);
 }
 
  if ( n == 97)
 {
   //Esquerda
   digitalWrite(motorPin1, HIGH);
   digitalWrite(motorPin2, LOW);
   digitalWrite(motorPin3, HIGH);
   digitalWrite(motorPin4, LOW);
 }
 
 if (n == 113)
{
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
}
 }

}

Pesquisei na Internet como controlar o Arduino via Teclado em tempo real, mas não encontrei nenhuma informação esclarecedora. Alguém me poderá dar umas dicas de como fazer e o que utilizar?

Cumps

Offline GnGz

  • Mini Robot
  • *
  • Mensagens: 665
Re: Controlar Arduino Via Teclado
« Responder #1 em: 28 de Janeiro de 2012, 11:55 »

Offline XicoMBD

  • Mini Robot
  • *
  • Mensagens: 571
    • FranciscoDias.net
Re: Controlar Arduino Via Teclado
« Responder #2 em: 28 de Janeiro de 2012, 12:56 »
O mais simples deve ser fazeres uma aplicação em processing ( http://processing.org/), embora também possas utilizar outras linguagens.


Aqui tens um exemplo:
Código: [Seleccione]
import processing.serial.*;


Serial myPort;


void setup()
{
  size(200,200); 

  // Change "COM19" by your board's COM port
  myPort = new Serial(this, "COM19", 9600);
}


void draw()
{
 
}


void keyPressed()
{
  if (key == CODED)
  {
    if (keyCode == UP)
      myPort.write('w');
    else if (keyCode == DOWN)
      myPort.write('s');
    else if (keyCode == LEFT)
      myPort.write('a');
    else if (keyCode == RIGHT)
      myPort.write('d');
  }
  else if (key == 's' || key == 'S')
  { 
    myPort.write('g');
  }
}

Deve bastar alterar os chars que estão a ser enviados por aqueles que queres receber :)
« Última modificação: 28 de Janeiro de 2012, 15:27 por XicoMBD »

Offline Psycop

  • Moderator
  • Mini Robot
  • *****
  • Mensagens: 105
    • O.Cantinho.da.Programação
Re: Controlar Arduino Via Teclado
« Responder #3 em: 28 de Janeiro de 2012, 14:28 »
Olá

Estive a tentar fazer algo em processing e para já apenas consegui desenhar uma estrutura que eu queria com o seguinte código:

Código: [Seleccione]
void setup()
{
  size(200, 200);
  noStroke();
  background(0);
 
}

void draw()
{
  //Seta avançar
  triangle(100 , 25, 75, 75, 125, 75);
  //Seta Esquerda
  triangle(75 , 125, 75, 75, 25, 100);
  //Seta Recuar
  triangle(75 , 125, 100, 175, 125, 125);
  //Seta Direita
  triangle(175 , 100, 125, 75, 125, 125); 
}

void keyPressed()
{
 
}

O que acontece é que eu ainda não percebi como poderei agora controlar as teclas juntamente com o que eu desenhei e transferir essa informação para o Arduino!

Alguém me pode dar umas dicas?

Cumps

Offline XicoMBD

  • Mini Robot
  • *
  • Mensagens: 571
    • FranciscoDias.net
Re: Controlar Arduino Via Teclado
« Responder #4 em: 28 de Janeiro de 2012, 15:11 »
Mas queres controlar com o teclado ou com o rato?

Offline Psycop

  • Moderator
  • Mini Robot
  • *****
  • Mensagens: 105
    • O.Cantinho.da.Programação
Re: Controlar Arduino Via Teclado
« Responder #5 em: 28 de Janeiro de 2012, 15:17 »
Olá

Eu quero controlar com o teclado, mas gostaria de ter uma interface visual também! Experimentar o controlo com o rato também seria um exercício interessante!

Eu agora não sei é como conectar o processing com o Arduino!

Aquele código que me mostraste apresenta alguns erros! Tenho de usar alguma biblioteca específica?

Cumps

Offline XicoMBD

  • Mini Robot
  • *
  • Mensagens: 571
    • FranciscoDias.net
Re: Controlar Arduino Via Teclado
« Responder #6 em: 28 de Janeiro de 2012, 15:25 »
O código que te mostrei anteriormente faz exactamente isso, cria uma porta série e envia ordens para o arduino quando carregas nas setas do teclado.

Experimenta e vê se funciona sff:
Código: [Seleccione]
import processing.serial.*;


Serial myPort;


void setup()
{
  size(200,200); 

  noStroke();
  background(0);
 
  // Change "COM35" by your board's COM port
  myPort = new Serial(this, "COM35", 9600);
}


void draw()
{
  //Seta avançar
  triangle(100 , 25, 75, 75, 125, 75);
  //Seta Esquerda
  triangle(75 , 125, 75, 75, 25, 100);
  //Seta Recuar
  triangle(75 , 125, 100, 175, 125, 125);
  //Seta Direita
  triangle(175 , 100, 125, 75, 125, 125);
}


void keyPressed()
{
  if (key == CODED)
  {
    if (keyCode == UP)
      myPort.write(119);
    else if (keyCode == DOWN)
      myPort.write(115);
    else if (keyCode == LEFT)
      myPort.write(100);
    else if (keyCode == RIGHT)
      myPort.write(97);
  }
  else if (key == 's' || key == 'S')
  { 
    myPort.write(113);
  }}


PS: Desculpa, percebi agora que tinha escrito nums sitios "myPort" e noutros "myport" e "s"  :o
Já corrigi tudo, deve estar pronto a funcionar agora  :)
« Última modificação: 28 de Janeiro de 2012, 15:30 por XicoMBD »

Offline Psycop

  • Moderator
  • Mini Robot
  • *****
  • Mensagens: 105
    • O.Cantinho.da.Programação
Re: Controlar Arduino Via Teclado
« Responder #7 em: 28 de Janeiro de 2012, 15:41 »
Se correr o teu código no IDE Arduino1.0 tenho os seguintes erros:

Citar
sketch_jan28a:0: error: 'import' does not name a type
sketch_jan28a:3: error: 'Serial' does not name a type
sketch_jan28a.cpp: In function 'void setup()':
sketch_jan28a:8: error: 'size' was not declared in this scope
sketch_jan28a:10: error: 'noStroke' was not declared in this scope
sketch_jan28a:11: error: 'background' was not declared in this scope
sketch_jan28a:14: error: 'myPort' was not declared in this scope
sketch_jan28a:14: error: expected type-specifier before 'Serial'
sketch_jan28a:14: error: expected `;' before 'Serial'
sketch_jan28a.cpp: In function 'void draw()':
sketch_jan28a:21: error: 'triangle' was not declared in this scope
sketch_jan28a.cpp: In function 'void keyPressed()':
sketch_jan28a:33: error: 'key' was not declared in this scope
sketch_jan28a:33: error: 'CODED' was not declared in this scope
sketch_jan28a:35: error: 'keyCode' was not declared in this scope
sketch_jan28a:35: error: 'UP' was not declared in this scope
sketch_jan28a:36: error: 'myPort' was not declared in this scope
sketch_jan28a:37: error: 'DOWN' was not declared in this scope
sketch_jan28a:38: error: 'myPort' was not declared in this scope
sketch_jan28a:39: error: 'LEFT' was not declared in this scope
sketch_jan28a:40: error: 'myPort' was not declared in this scope
sketch_jan28a:41: error: 'RIGHT' was not declared in this scope
sketch_jan28a:42: error: 'myPort' was not declared in this scope
sketch_jan28a:46: error: 'myPort' was not declared in this scope

Se o fizer pelo IDE processing tenho os seguintes:

Citar
java.lang.NullPointerException
   at processing.serial.Serial.write(Unknown Source)
   at sketch_jan28c.keyPressed(sketch_jan28c.java:68)
   at processing.core.PApplet.handleKeyEvent(Unknown Source)
   at processing.core.PApplet.dequeueKeyEvents(Unknown Source)
   at processing.core.PApplet.handleDraw(Unknown Source)
   at processing.core.PApplet.run(Unknown Source)
   at java.lang.Thread.run(Thread.java:662)
Exception in thread "Animation Thread" java.lang.RuntimeException: Error inside Serial.write()
   at processing.serial.Serial.errorMessage(Unknown Source)
   at processing.serial.Serial.write(Unknown Source)
   at sketch_jan28c.keyPressed(sketch_jan28c.java:68)
   at processing.core.PApplet.handleKeyEvent(Unknown Source)
   at processing.core.PApplet.dequeueKeyEvents(Unknown Source)
   at processing.core.PApplet.handleDraw(Unknown Source)
   at processing.core.PApplet.run(Unknown Source)
   at java.lang.Thread.run(Thread.java:662)

Eu ainda não entendo muito bem a estrutura deste código!

Cumps

Offline XicoMBD

  • Mini Robot
  • *
  • Mensagens: 571
    • FranciscoDias.net
Re: Controlar Arduino Via Teclado
« Responder #8 em: 28 de Janeiro de 2012, 15:53 »
Esse código é para o processing, por isso é normal que dê erro no arduino.

Eu costumos ter erros desses no Processing quando a porta série não é a certa. Esqueci-me de te dizer, onde diz "COM35", é para meter o nome da porta do arduino.

O código cria uma porta série no setup() e depois vai desenhando as setas na janela no draw() (que equivale ao loop() do arduino).
Quando carregas numa tecla o keyPressed() é chamado. Caso a tecla for, por exemplo, a UP, é enviado '119' para a porta série, ou seja, o arduino.

Offline Psycop

  • Moderator
  • Mini Robot
  • *****
  • Mensagens: 105
    • O.Cantinho.da.Programação
Re: Controlar Arduino Via Teclado
« Responder #9 em: 28 de Janeiro de 2012, 16:07 »
Olá

Dessa forma já funciona!

Mas a programação das sub-rotinas "frente", "direita" são aquelas que eu ja tinha programado anteriormente e que o código está no arduino certo?

Cumps

Offline XicoMBD

  • Mini Robot
  • *
  • Mensagens: 571
    • FranciscoDias.net
Re: Controlar Arduino Via Teclado
« Responder #10 em: 28 de Janeiro de 2012, 16:11 »
Como assim?
Não percebi bem a tua pergunta...


Esta aplicação faz o mesmo papel que o Serial Monitor do Arduino IDE, envia dados para a porta série.
O Arduino recebe esses dados e depois interpreta-os como tu o programares.

Offline HIT_Braga

  • Mini Robot
  • *
  • Mensagens: 47
  • Sou o que sou, não o que acham...
Re: Controlar Arduino Via Teclado
« Responder #11 em: 28 de Março de 2012, 13:04 »
Psycop já funciona...? também estou a necessitado do mesmo.
1º Tenho de sacar o Processing?
2º Compilar o programa do Xico no processing?
3º E depois...?

Sds,
HIT
Sds,
HIT

Offline Black Back

  • Mini Robot
  • *
  • Mensagens: 1
Re: Controlar Arduino Via Teclado
« Responder #12 em: 07 de Novembro de 2012, 01:37 »
Estou postando esses códigos porque fiquei muito zangando de não ter encontrado nada do tipo. Encontrei só depois de fuçar muitos sites estrangeiros. (LEDs, TECLADO, ARDUINO / PROCESSING) >:( Agora fiquei satisfeito  :)


Projeto 1 - Ligue os LEDs na tecla pressionada ( http://esperimenti-arduino.blogspot.com.br/p/project-1-turn-on-leds-on-key-pressed.html )

ai vai estar o CÓDIGO ARDUINO e do PROCESSING para controlar leds pelas setas do teclado!!!! Flw e bom proveito.

Offline helderjsd

  • Mini Robot
  • *
  • Mensagens: 149
Re: Controlar Arduino Via Teclado
« Responder #13 em: 12 de Março de 2013, 12:05 »
Ola a todos,
Ja resolveram o problema?
Se ainda não, digam.
Isso em Vb.net faz-se em 5 minutos
Tenho um robot que funciona dessa forma, e que permite ainda "personalizar" as teclas que queremos, a gosto do utilizador