processing求助-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9889|回复: 11

[已解决] processing求助

[复制链接]
发表于 2013-3-20 14:53 | 显示全部楼层 |阅读模式
大家好请问。如果我想用processing写一个程序打开arduino引脚里的LED灯应该怎么写,求助求助
发表于 2013-3-20 17:42 | 显示全部楼层

回帖奖励 +1 金币

/**
* Simple Write.
*
* Check if the mouse is over a rectangle and writes the status to the serial port.
* This example works with the Wiring / Arduino program that follows below.
*/


import processing.serial.*;

Serial myPort;  // Create object from Serial class
int val;        // Data received from the serial port

void setup()
{
  size(200, 200);
  // I know that the first port in the serial list on my mac
  // is always my  FTDI adaptor, so I open Serial.list()[0].
  // On Windows machines, this generally opens COM1.
  // Open whatever port is the one you're using.
  String portName = Serial.list()[0];
  myPort = new Serial(this, portName, 9600);
}

void draw() {
  background(255);
  if (mouseOverRect() == true) {  // If mouse is over square,
    fill(204);                    // change color and
    myPort.write('H');              // send an H to indicate mouse is over square
  }
  else {                        // If mouse is not over square,
    fill(0);                      // change color and
    myPort.write('L');              // send an L otherwise
  }
  rect(50, 50, 100, 100);         // Draw a square
}

boolean mouseOverRect() { // Test if mouse is over square
  return ((mouseX >= 50) && (mouseX <= 150) && (mouseY >= 50) && (mouseY <= 150));
}


/*
  // Wiring/Arduino code:
// Read data from the serial and turn ON or OFF a light depending on the value

char val; // Data received from the serial port
int ledPin = 4; // Set the pin to digital I/O 4

void setup() {
pinMode(ledPin, OUTPUT); // Set pin as OUTPUT
Serial.begin(9600); // Start serial communication at 9600 bps
}

void loop() {
if (Serial.available()) { // If data is available to read,
val = Serial.read(); // read it and store it in val
}
if (val == 'H') { // If H was received
digitalWrite(ledPin, HIGH); // turn the LED on
} else {
digitalWrite(ledPin, LOW); // Otherwise turn it OFF
}
delay(100); // Wait 100 milliseconds for next reading
}

*/
 楼主| 发表于 2013-3-21 20:25 | 显示全部楼层
i7456 发表于 2013-3-20 17:42
/**
* Simple Write.
*

哦,师傅,,我看了一下脚本,是按H就打开四号引脚的灯对吧。。如果我想吧他改成直接运行EXE灯就打开了。可以吗!谢谢。。帮我大忙了!
发表于 2013-3-22 12:45 | 显示全部楼层
cjj208 发表于 2013-3-21 20:25
哦,师傅,,我看了一下脚本,是按H就打开四号引脚的灯对吧。。如果我想吧他改成直接运行EXE灯就打开了。 ...

不是你理解的意思,再好好看下程序及注释吧。
根据这个例子,稍微改一下就满足你的需求了。
 楼主| 发表于 2013-4-3 12:49 | 显示全部楼层
怎么这段脚本测试的不成功呢。。
发表于 2013-4-7 11:46 | 显示全部楼层
cjj208 发表于 2013-4-3 12:49
怎么这段脚本测试的不成功呢。。

要注意串口号
  // I know that the first port in the serial list on my mac
  // is always my  FTDI adaptor, so I open Serial.list()[0].
  // On Windows machines, this generally opens COM1.
  // Open whatever port is the one you're using.
  String portName = Serial.list()[0];
 楼主| 发表于 2013-4-8 15:09 | 显示全部楼层
运行时报出
Native lib Version = RXTX-2.1-7
Java lib Version   = RXTX-2.1-7
引脚应该是4号吧。。我运行出来是一个黑白的小框。但是还是运行不出来不知道为什么。。
发表于 2013-4-9 11:13 | 显示全部楼层
cjj208 发表于 2013-4-8 15:09
运行时报出
Native lib Version = RXTX-2.1-7
Java lib Version   = RXTX-2.1-7

//我来写点简单的中文注释吧
/**
* Simple Write. 简单的发出数据
*
* Check if the mouse is over a rectangle and writes the status to the serial port.  检查鼠标是否在一个矩形框内。并将状态通过串口发出。
* This example works with the Wiring / Arduino program that follows below.        配合的Wiring/Arduino用的程序在最后面已给出。
*/


import processing.serial.*;                                     //引入串口类

Serial myPort;  // Create object from Serial class    //定义了一个串口对象
int val;        // Data received from the serial port    //定义个一个变量

void setup()                                                                             //设置,这个只运行一次
{
  size(200, 200);                                                                     //设定窗口的大小,200×200像数
  // I know that the first port in the serial list on my mac          //作者用的是苹果电脑,他知道arduino的串口编号是第一个
  // is always my  FTDI adaptor, so I open Serial.list()[0].         //所以他打开了第一个串口。在这里0是第一个
  // On Windows machines, this generally opens COM1.          //一般来说,windows系统的电脑,COM1一般是第一个
  // Open whatever port is the one you're using.                    //这这里,你应该打开你的arduino所以的端口
  String portName = Serial.list()[0];                                        //把串口号赋值给portNanme
  myPort = new Serial(this, portName, 9600);                       //指定串口变量的属性(端口号、波特率),赋值给myPort
}

void draw() {                                                                        //画图,这个是一直循环的
  background(255);                                                              //设置背景色
  if (mouseOverRect() == true) {  // If mouse is over square,//如果鼠标在矩形内
    fill(204);                    // change color and                          //设置填充色204
    myPort.write('H');              // send an H to indicate mouse is over square  //串口发出一个字符'H',指示鼠标在矩形内
  }
  else {                        // If mouse is not over square,           //如果鼠标不在矩形内
    fill(0);                      // change color and                           //设置填充色0
    myPort.write('L');              // send an L otherwise            //相反,串口发出一个字符'L'
  }
  rect(50, 50, 100, 100);         // Draw a square                  //画一个矩形。左上角点坐标(50,50),长宽均为100
}

boolean mouseOverRect() { // Test if mouse is over square  //定义了一个函数,测试鼠标是否在矩形内
  return ((mouseX >= 50) && (mouseX <= 150) && (mouseY >= 50) && (mouseY <= 150));  //如果鼠标的X坐标在50~150内,并且Y坐标在50~150内,返回TURE;否则返回FALSE
}


/*
  // Wiring/Arduino code:                                                                                                    //Wiring/Arduino程序
// Read data from the serial and turn ON or OFF a light depending on the value                  //读串口数据,并根据串口数据打开或关闭一个指示灯

char val; // Data received from the serial port                                                                     //定义了一个变量
int ledPin = 4; // Set the pin to digital I/O 4                                                                         //制定灯在 digital I/O 4 上

void setup() {
pinMode(ledPin, OUTPUT); // Set pin as OUTPUT                                                                //将ledPin所在的管脚指定为输出
Serial.begin(9600); // Start serial communication at 9600 bps                                             //打开串口,波特率9600
}

void loop() {
if (Serial.available()) { // If data is available to read,                                                                //如果串口有数据准备好
val = Serial.read(); // read it and store it in val                                                                      //读出数据,并赋值给val
}
if (val == 'H') { // If H was received                                                                                      //如果读到的是'H'
digitalWrite(ledPin, HIGH); // turn the LED on                                                                       //将ledPin所在的管脚置高电平,让灯亮起
} else {
digitalWrite(ledPin, LOW); // Otherwise turn it OFF                                                               //否则,将ledPin所在的管脚置低电平,让灯熄灭
}
delay(100); // Wait 100 milliseconds for next reading                                                          //延时100ms后,读下一个数据
}

*/
 楼主| 发表于 2013-4-9 17:22 | 显示全部楼层
你太好了,
刚刚很仔细的读了一遍。现在知道前一段程序是在processing里编译出来,后一段程序是写进arduino里去,  
还想再问一下pressing中在哪改串口号,我对应的串口号是3
myPort = new Serial(this, portName, 9600);  是改portname 改成3吗?
今天回去测一下
发表于 2013-4-9 20:24 | 显示全部楼层
cjj208 发表于 2013-4-9 17:22
你太好了,
刚刚很仔细的读了一遍。现在知道前一段程序是在processing里编译出来,后一段程序是写进arduino ...

String portName = Serial.list()[0];                                        //把串口号赋值给portNanme
如果你实在不知道改成多少,就慢慢的试,0,1,2,3
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-3 05:22 , Processed in 0.149323 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表