【问题标题】:Data from Arduino to Processing isn't affecting Processing 'If Statement'从 Arduino 到处理的数据不影响处理“如果语句”
【发布时间】:2016-11-20 08:03:11
【问题描述】:

我正在尝试将特定用户的推文放入处理中,然后使用 TTS 库让他们说出来,但只有在通过 Serial = 491310 从 Arduino 检测到特定值时才让他们说出来

我已经将推文输入到处理中,可以将它们打印出来并说出来,并且处理获取值 491310,但它是 if 语句 ('if (sensor == 491310) {') 我正在苦苦挣扎,因为它目前没有效果 - 任何人都可以解决这个问题吗?

这里绝对是新手,任何帮助都会很棒。谢谢。

import twitter4j.util.*;
import twitter4j.*;
import twitter4j.management.*;
import twitter4j.api.*;
import twitter4j.conf.*;
import twitter4j.json.*;
import twitter4j.auth.*;
import guru.ttslib.*;
import processing.serial.*;

TTS tts;
Serial myPort;

int sensor = 0;

void setup() {
  tts = new TTS();
  
  myPort = new Serial(this, Serial.list()[0], 9600); 
  
}

void draw() {
  
ConfigurationBuilder cb = new ConfigurationBuilder();

cb.setOAuthConsumerKey("XXXX");
cb.setOAuthConsumerSecret("XXXX");
cb.setOAuthAccessToken("XXXX");
cb.setOAuthAccessTokenSecret("XXXX");

java.util.List statuses = null;

Twitter twitter = new TwitterFactory(cb.build()).getInstance();

String userName ="TWITTER HANDLE";
int numTweets = 19;
String[] twArray = new String[numTweets];

  try {
    statuses = twitter.getUserTimeline(userName);
  }
  catch(TwitterException e) {
  }

if( statuses != null) {
  for (int i=0; i<statuses.size(); i++) {
    Status status = (Status)statuses.get(i);
    
    if (sensor == 491310) {
    println(status.getUser().getName() + ": " + status.getText());
 tts.speak(status.getUser().getName() + ": " + status.getText());
  }
}
}

}

void serialEvent (Serial myPort) {
 int inByte = myPort.read();
   sensor = inByte;
  print(sensor);
}

【问题讨论】:

    标签: java if-statement twitter serial-port processing


    【解决方案1】:

    从串行端口读取返回一个字节(8 位)而不是 16 位整数。 “传感器”的值不能高于 255,因此永远不会匹配 491310。您必须执行 2 次读取才能形成 16 位整数。

    【讨论】:

    • 感谢您的回复!您可以提供的任何更多信息(或链接)都会很棒 - 完全是新手,所以我不知道从哪里开始。从 Arduino 发送到串行端口的数据只有 1s 和 2s,但 Processing 将它们拾取为 6 位数字,所以我可能会找到另一种方法来解决这个问题。谢谢!
    【解决方案2】:

    我的猜测是你达到了 twitter 的速率限制。 Twitter 只允许在给定的 15 分钟窗口内调用一定数量的 API。由于您在 draw() 函数中调用 getUserTimeline()(每秒发生 60 次),因此您将很快达到该限制。

    所以您可能会收到TwitterException,但您只是忽略了它。 永远不要使用空的 catch 块! 至少在那里调用 e.printStackTrace()

    catch(TwitterException e) {
       e.printStackTrace();
    }
    

    要解决这个问题,您将不得不修改您的代码,以便在程序开始时只检查一次推文。将所有获取推文的逻辑移到 setup() 函数中,然后将用于打印它们的逻辑移到 serialEvent() 函数中。

    如果你仍然不能让它工作,那么你将不得不做一些调试:你的草图中每个变量的值是多少?使用println() 函数来帮助解决这个问题。是statuses == nullstatuses.size() 的值是多少? sensor 的值是多少?一旦你知道了这一点,你就能够准确地弄清楚你的代码出了什么问题。但我敢打赌,这是 twitter 速率限制,所以先检查一下。

    【讨论】:

      猜你喜欢
      • 2021-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-04
      • 1970-01-01
      • 2011-01-26
      相关资源
      最近更新 更多