我正在从事一个项目,该项目使用处理从文件中读取数据,然后使用串行将这些数据发送到arduino Uno板,然后将这些值提供给arduino braccio braccio。ServoMovement()函数,根据它们移动机械臂。然而,每当我运行代码时,我总是在函数中输入错误的值,并且手臂以一种奇怪的方式移动,我测试了相同的代码,并试图点亮一个led,但出于某种原因,它工作正常。
import processing.serial.*;
import java.io.*;
int mySwitch=0;
int counter=0;
String [] subtext;
Serial myPort;
void setup(){
//Create a switch that will control the frequency of text file reads.
//When mySwitch=1, the program is setup to read the text file.
//This is turned off when mySwitch = 0
mySwitch=1;
//Open the serial port for communication with the Arduino
//Make sure the COM port is correct
myPort = new Serial(this, "COM5", 9600);
myPort.bufferUntil('\n');
}
void draw() {
// print(" the switch " + mySwitch);
if (mySwitch>0){
/*The readData function can be found later in the code.
This is the call to read a CSV file on the computer hard-drive. */
readData("C:/Users/Tareq/Desktop/data.txt");
/*The following switch prevents continuous reading of the text file, until
we are ready to read the file again. */
mySwitch=0;
}
/*Only send new data. This IF statement will allow new data to be sent to
the arduino. */
if(counter<subtext.length){
/* Write the next number to the Serial port and send it to the Arduino
There will be a delay of half a second before the command is
sent to turn the LED off : myPort.write('0'); */
// print(subtext[counter]);
delay(5000);
myPort.write(subtext[counter]);
print(subtext[counter]);
delay(2000);
//Increment the counter so that the next number is sent to the arduino.
counter++;
} else{
//If the text file has run out of numbers, then read the text file again in 5 seconds.
delay(5000);
mySwitch=1;
}
}
/* The following function will read from a CSV or TXT file */
void readData(String myFileName){
File file=new File(myFileName);
BufferedReader br=null;
try{
br=new BufferedReader(new FileReader(file));
String text=null;
/* keep reading each line until you get to the end of the file */
while((text=br.readLine())!=null){
/* Spilt each line up into bits and pieces using a comma as a separator */
subtext = splitTokens(text,",");
}
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}finally{
try {
if (br != null){
br.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Arduino代码
#include <Braccio.h>
#include <Servo.h>
#include<SoftwareSerial.h>
Servo base;
Servo shoulder;
Servo elbow;
Servo wrist_rot;
Servo wrist_ver;
Servo gripper;
String stringData[6] ;
int intData[6] ;
void setup() {
Serial.begin(9600);
Braccio.begin();
pinMode(1, OUTPUT); // Set pin as OUTPUT
pinMode(2, OUTPUT); // Set pin as OUTPUT
pinMode(3, OUTPUT); // Set pin as OUTPUT
pinMode(4, OUTPUT); // Set pin as OUTPUT
pinMode(5, OUTPUT); // Set pin as OUTPUT
pinMode(6, OUTPUT); // Set pin as OUTPUT
pinMode(7, OUTPUT); // Set pin as OUTPUT
pinMode(8, OUTPUT); // Set pin as OUTPUT
pinMode(9, OUTPUT); // Set pin as OUTPUT
}
void loop() {
for(int y=0;y<6;y++){
while(Serial.available()== 0){}
stringData[y]= Serial.readString();
if(stringData[y]=="90")
intData[y]=90;
else if(stringData[y]=="120")
intData[y]=120;
else if(stringData[y]=="180")
intData[y]=180;
else if(stringData[y]=="45")
intData[y]=45;
else if(stringData[y]=="160")
intData[y]=160;
else if(stringData[y]=="170")
intData[y]=170;
else if(stringData[y]=="165")
intData[y]=165;
else if(stringData[y]=="60")
intData[y]=60;
else if(stringData[y]=="30")
intData[y]=30;
else if(stringData[y]=="110")
intData[y]=110;
else if(stringData[y]=="80")
intData[y]=80;
else if(stringData[y]=="155")
intData[y]=155;
}
Braccio.ServoMovement(20 , intData[0], intData[1], intData[2] , intData[3] ,intData[4] , intData[5]);
}
注意:我读取的文件是一个记事本,其中包含以“,”分隔的数字,比如150、30、60等。我用6来测试代码,有人可能会说这很奇怪,为什么发送字符串,然后将其映射为int,而不是直接发送int,我先尝试了int,但它不起作用,然后我尝试了这个。
我会尝试将这个问题与以下罪魁祸首分开:
你能让机器人从arduino中的静态路径驱动它做可重复的事情吗(即硬编码arduino中的值,并检查你是否知道机器人是如何驱动和工作的)
您是否在arduino和processing之间干净地传递数据。为了测试这一点,创建一些数值对象/数组,并将它们从处理转移到arduino,让arduino验证它是否收到了预期的结果。
你的文件读对了吗。读取文件并将其写入处理控制台或其他东西,以验证您是否拥有您认为拥有的内容。
伙计们,在我的控制器中执行rest后,我有问题从变量中获取数据。这里有一个例子来说明我的问题。 控制器 JavaScript drawDiagram.html null
我为用户注册创建了简单的Thymeleaf表单模板。当我点击SubmitForm按钮时,POST请求被发送(正如我在浏览器日志中看到的),但它从未由saveRegistration控制器方法处理,并用(method=RequestMethod.POST)注释 Spring版本4.2.2,Spring Security4.0.2,Spring Boot启动器1.2.7模型对象使用Hibernate验
我有一个主控制器来处理我的主控制器。fxml和处理弹出窗口的第二个控制器。fxml 从主控制器按下按钮时,弹出窗口出现。在弹出窗口中添加玩家。玩家通过textfield添加到数组中,并且必须发送回主控制器。我在弹出控制器中有一个名为“Btnaply”的按钮,当按下该按钮时,我想关闭弹出窗口并从主控制器类处理数组。我只想让我的主控制器类知道弹出窗口。 这是我从主控制器创建弹出窗口的方式: 现在的问题
这是凯文帮助后的代码。
第 3 章 数据处理的流程控制 计算机程序是对特定数据进行特定操作的一系列编排好的处理步骤。第 2 章介绍了各种 类型的数据的表示和操作,本章介绍如何“编排”处理步骤的问题,即程序的流程控制。编 程语言①提供了控制流语句,用于控制程序从多条执行路径中选择一条路径执行下去。不同 语言支持的控制流语句在形式上可能各不相同,但其作用是相同的,大致可分为顺序、无条 件跳转、条件分支、循环、子程序等几类控制
问题内容: 我试图让bash处理来自管道的stdin的数据,但是没有运气。我的意思是以下任何一项工作: 我希望输出在哪里。我试过用“”引号括住也不起作用。 问题答案: 采用 您 可以像这样欺骗从管道中接受: 甚至编写这样的函数: 但是没有意义-您的变量分配可能不会持续!管道可能会产生一个子外壳,其中环境是通过值而不是通过引用继承的。这就是为什么不打扰管道输入的原因- 它是未定义的。 仅供参考,ht