【问题标题】:processing arduino connection difficulty处理arduino连接困难
【发布时间】:2013-10-20 21:08:16
【问题描述】:

我正在尝试将 char 从处理中发送到 arduino,但 arduino 只识别其中 2 个,

问题在于 '2' 字符

当我按下 's' 键时,处理代码正在发送 '2' 字符,因为我可以看到 arduino rx led 照明,但电机什么也不做,

使用 '1' 或 '0' 字符我没问题, 我将 arduino 代码中的“2”切换为对应于 drive_forward,然后切换到 drive_reverse,但是分配了“2”字符的那个在这两种情况下都不起作用, 正如我所说,“1”和“0”字符发送和接收良好

我猜这是 arduino 代码中的东西,但我不知道是什么

arduino 代码:

int motor1 = 4;
int motor2 = 5;
char val; 

// --------------------------------------------------------------- Setup
void setup() {
Serial.begin(9600);

// Setup motors

pinMode(motor1, OUTPUT);
pinMode(motor2, OUTPUT);

}


// ---------------------------------------------------------------- Loop
void loop() { 
  if (Serial.available()>0) 
   { // If data is available to read,
     val = Serial.read(); // read it and store it in val
   }
  if (val == '2'){
       drive_forward();
        }
  if (val == '1'){
      drive_reverse();
                  }
  if (val == '0'){
  motor_stop();

                  }

}

// --------------------------------------------------------------------------- Drive

void motor_stop(){

digitalWrite(motor1, LOW); 
digitalWrite(motor2, LOW);


}
void drive_forward(){

digitalWrite(motor1, HIGH); 
digitalWrite(motor2, LOW); 
delay(15);
digitalWrite(motor1, LOW); 
digitalWrite(motor2, LOW);
delay(15);


}
void drive_reverse(){

digitalWrite(motor2, HIGH); 
digitalWrite(motor1, LOW); 
delay(15);
digitalWrite(motor2, LOW); 
digitalWrite(motor1, LOW);
delay(15);


}

处理代码:

import processing.serial.*;

Serial myPort;  


void setup() 
{
  size(200,200); 
  myPort = new Serial(this, Serial.list()[2], 9600);


}
void draw() {





  } 
void keyPressed() {
    if (key == 'w' || key == 'W')
    { 
      myPort.write('1');
    println("1");}
      if (key == 's' || key == 'S')
    { 
      myPort.write('2');
    println("2");}
}
void keyReleased() {
myPort.write('0');
println("0");

}

【问题讨论】:

  • 不太可能是问题,但您应该将 val 初始化为 '0'。
  • 你试过用Arduino串口监视器吗?
  • 只有一个程序可以使用 com 端口,所以如果我使用串行监视器,我将无法将处理程序连接到 arduino 并查看它到底在接收什么,因为它是当我尝试从处理中发送“2”字符时,我看到 RX LED 亮起
  • 尝试使用 readChar(),而不是 read()。也尝试使用 print(),而不是 write(),但我不确定这是否正确。
  • 尝试将这些字符串作为整数发送,它似乎对我来说效果更好

标签: arduino processing


【解决方案1】:

正如@tailedmouse 所说,以整数形式发送数据。

处理代码:

//skipped some code
void keyPressed() {
    if (key == 'w' || key == 'W') {
        myPort.write(1); 
    }

    if (key == 's' || key == 'S') {
        myPort.write(2);
        println("2");
    }
} 

void keyReleased() {
    myPort.write(0);
    println("0");
}

Arduino 代码:

//skipped some code.
void loop() {
    if (Serial.available()>0) {
        // If data is available to 
        read, val = Serial.read(); 
        // read it and store it in val 
    }

    if (val == 2) {
        drive_forward();
    }

    if (val == '1') {
        drive_reverse();
    }

    if (val == '0') {
        motor_stop();
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-26
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    • 2013-08-15
    相关资源
    最近更新 更多