前提・実現したいこと
arduinoからの情報をprocessingが受け取り、processingはcsvデータを吐き出します。
ここまではいいのですが、この吐き出したcsvデータをuwscが受け取るとき、数字を読み込まなくなります。
まずarduinoはシリアルポートに数字を出します。以下のコードを見ればわかるように、まず0, 0 を出します。
そしてprocessingは, arduinoが出した数字(今回は0,0 )を読み込み、csvファイル(Lineinputnumber.csv)を作成して数値0,0をcsvファイルに書き込み、processingはexit()関数で停止します。
uwscの方ですが、2つのcsvファイル(すでにあるLineautobook.csvと, 今作成されたLineinputnumber.csv)を読み込みます。
問題はこの読み込みです。
Lineautobook.csvは漢字やアルファベットの名前が書かれているcsvファイルで、すでに作成されています。こちらは普通に読み込みます。(MSGBOXで確認できています。)
しかし、Lineinputnumber.csvにかかれている数字(0,0)は読み込まれません。(つまり以下のuwscプログラミングにおける変数a,bに0,0が入るはずなのですが、MSGBOXで確認しようとしても、空欄になります。)
実際にLineinputnumber.csvを開くとしっかり1行目1列目に0, 1行目2列目に0が書かれているにも関わらずです。
該当のソースコード
arduinoのプログラムは以下の通りです。
int x=0;
int y=0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
//シリアルモニタに表す
Serial.print(x);
Serial.print(",");
Serial.println(y);
delay(1000);
x=x+1;
y=y+1;
}
processingのコードは以下の通りです。
import processing.serial.*;
PrintWriter output;
Serial myPort;
long time=0;
String str_format = "x,y";
String port = "COM3";
int a=0;
void setup() {
size(320, 240);
myPort = new Serial(this, port, 9600);
//csvファイル(Lineinputnumber.csv)の作成
output = createWriter( "Lineinputnumber.csv");
}
void draw() {
while ( myPort.available() > 0 ) {
String inBuffer = myPort.readString();
if ( inBuffer != null &&a==0) {
//arduinoからの情報をcsvに書き込む
output.print(inBuffer);
a=a+1;
}
if ( a==1) { //processingのプログラムを停止 output.flush(); output.close(); exit(); }
}
}
uwscのコードは以下の通りです。
//Lineautobookに書かれている名前の数
book_num = 13
//Lineautobookに書かれている名前をスキャンして格納
DIM name[book_num]
// CSVをオープン
fib = FOPEN("lineautobook.csv", F_READ)
fin = FOPEN("Lineinputnumber.csv", F_READ)
// Lineinputnumberをスキャン
a = FGET( fin, 1, 1 )
b = FGET( fin, 1, 2 )
// Lineautobookの各行をスキャン
FOR i = 1 TO book_num
// CSVの各列の情報を読み取り
name[i-1] = FGET( fib, i, 3)
NEXT
//読み込んでほしいcsvデータが読み込まれているか確認
MSGBOX("a="+a)
Sleep(1)
MSGBOX("b="+b)
Sleep(1)
MSGBOX("name[0]="+name[0])
Sleep(1)
//ファイルを閉じる
FCLOSE( fib )
FCLOSE(fin)
試したこと
Lineinputnumber.csvを閉じた状態や開いた状態にしてもだめでした。
しかしLineinputnumber.csvの中身を書き換えずExcelアプリで上書き保存するだけで読み込めるようになります。
しかし今回諸事情のため、手動でExcelを上書き保存ボタンは押したくありません。
ですのでUWSCでLineinputnumber.csvを自動的に上書き保存するプログラム(以下に記載)をuwscのプログラム上部に追加したものの、DOSCMDが終わった後停止してしまいます。(つまり、Lineinputnumber.csvは開きますが上書き保存、終了が行われない)
試しにlineinputnumber.csvを閉じてみると、プログラムが再開し、上書き保存が行われます。
cmf="C:\Users\itoyu\Downloads\lineautoprocess\Lineinputnumber.csv"
id7=DOSCMD(cmf, FALSE, FALSE)
Sleep(3)
//上書き保存
KBD(VK_CTRL, DOWN)
KBD(VK_S, DOWN)
KBD(VK_S, UP)
KBD(VK_CTRL, UP)
MSGBOX("上書き保存しました")
Sleep(2)
//Excelの終了
KBD(VK_ALT, DOWN)
KBD(VK_F4, DOWN)
KBD(VK_F4, UP)
KBD(VK_ALT, UP)
色々思考錯誤しましたがなかなか進まないため、こちらに質問させていただきました。
長くなってしまいましたが宜しくお願いいたします。
追記
マルチポストさせていただきました。
理由:マルチポストが習慣化してしまっていたため。
リンク:https://detail.chiebukuro.yahoo.co.jp/qa/question_det
不明点がすべて解明してはいませんが、問題解決しました。
DOSCMD(FALSE,FALSE)→DOSCMD(TRUE,FOLSE)に変更することで、プログラムが停止する問題は解決しました。
processingが吐き出したcsvデータをuwscが直接読み込む方法はまだ解明されていません。(uwscで上書き保存を自動的に行わせることで問題の解決はしました)
回答1件
あなたの回答
tips
プレビュー