2016-07-17 7 views
0

特定のユーザーのツイートをProcessingに取得しようとしていて、TTSライブラリを使用して話していますが、特定の値が以上のArduinoから検出されたシリアル= 491310ArduinoからProcessingへのデータはProcessing 'If Statement'の処理に影響しません

は私が処理に入ってくるのつぶやきを持っているし、それらは値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); 
 
}

答えて

0

私の推測では、あなたがTwitterのレート制限をヒットしていることです。 Twitterでは、特定の15分間のウィンドウ内で特定の量のAPIコールしか許可されません。そしてdraw()関数(これは毎秒60回発生します)の中でgetUserTimeline()を呼び出すので、あなたはかなり速くその限界にぶつかるでしょう。

おそらくTwitterExceptionが表示されていますが、無視しているだけです。 空のcatchブロックを使用しないでください!は少なくともそこでe.printStackTrace()への呼び出しに置く:

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

問題を解決するには、あなただけのプログラムの冒頭で一度、つぶやきをチェックするようにコードを変更する必要があるとしています。つぶやきを取り出すためのすべてのロジックをsetup()関数に移動し、serialEvent()関数に出力するロジックを移動します。

まだ動作しない場合は、デバッグを行う必要があります。スケッチのすべての変数の値は何ですか?これを理解するにはprintln()関数を使用してください。 statuses == nullはありますか? statuses.size()の値は何ですか? sensorの値は何ですか?そのことが分かれば、コードで何が問題になっているのかを正確に把握することができます。しかし、私の賭けは、それがツイッターのレート制限なので、まずそれをチェックしてください。

1

シリアルポートから読み取ると、16ビット整数ではなくバイト(8ビット)が返されます。 'sensor'の値は255を超えることはできませんので、491310と一致することはありません。16ビットintを形成するには2回の読み込みが必要です。

+0

お返事ありがとうございます! Arduinoからシリアルポートに送信されるデータは1秒と2秒しかないが、Processingでは6桁の数字を使用しているので、代わりになるかもしれない代わりにそれを修正する方法を見つける。 ありがとう! – user2400389

関連する問題