1

我的项目是创建一个带有两个传感器的机器人 Arduino 花:光和压力,根据这两个传感器中的值打开和关闭,同时根据这些值通过处理播放不同的视频。

我一直很难从 Arduino 中的模拟传感器传递值来处理。这是我到目前为止所拥有的:

阿杜诺

#include <Servo.h> 

Servo myservo;
int pressure = 0;
int light = 1;
int pre;
int val;

void setup()
{
    Serial.begin(9600);
    myservo.attach(2);
}

void loop() {
    pre = analogRead(pressure);
    pre = map(pre, 918, 1023, 255, 0);

    val = analogRead(light);
    val = map(val, 0, 255, 0, 127);
    Serial.print(val, DEC);
    /*if (val>50) {
        Serial.print(1);
    }
    else {
        Serial.print(0);
    }*/

    myservo.write(val);
}

加工

import processing.video.*;
import processing.serial.*; //arduino
Serial myPort;  // Create object from Serial class
int val;


Movie movie;

void setup() {
  String portName = Serial.list()[0];
  myPort = new Serial(this, portName, 9600);
  size(640, 360);
  background(0);
  movie = new Movie(this, "transit.mov");
  movie.loop();

}

void movieEvent(Movie m) {
  m.read();
}

void draw() {
  val = myPort.read();
  println(val);
  //if (movie.available() == true) {
  //  movie.read(); 
  //}
  image(movie, 0, 0, width, height);
  if (val==49) {
    movie.jump(1);
  }
}

现在我只是想让视频对光传感器做出反应,但还没有成功。我从处理读数中得到的只是 48。电机对传感器的反应很好。

4

1 回答 1

0

你从这样一个更简单的处理草图中得到什么输出?你期望什么输出?

import processing.serial.*;

Serial myPort;  // The serial port

void setup() {
  // List all the available serial ports
  println(Serial.list());
  // Open the port you are using at the rate you want:
  myPort = new Serial(this, Serial.list()[0], 9600);
}

void draw() {
  while (myPort.available() > 0) {
    int inByte = myPort.read();
    println(inByte);
  }
}

另外,为什么您的 Arduino 代码中的 map 函数pre = map(pre, 918, 1023, 255, 0);分别使用 250 和 0 作为您的下限和上限?这似乎倒退了。不应该读pre = map(pre, 918, 1023, 0, 255);吗?

于 2012-12-19T18:31:56.877 回答