2016-08-24 3 views
1

Arduino를 사용하여 공장 모니터를 만들고 처리하려고합니다. 처리는 Arduino가 입력 한 센서를 기반으로 HTML 파일을 작성합니다. WinSCP는 변경을 위해 생성 된 파일을 모니터링하고 파일이 변경되면 트로프 FTP를 직접 업로드합니다.처리 : arduino 입력에서 HTML 파일 쓰기

import processing.serial.*; 

Serial myPort; 
String dataReading = ""; 
int lol = 0; 
String string0 = "<h1>Jurze Plants <img src=\"https://html-online.com/editor/tinymce/plugins/emoticons/img/smiley-laughing.gif\" alt=\"laughing\" /></h1>"; 
String string1 = "Moisture Level: "; 
String string2 = " %<br> Motorstate: "; 
String string3 = "<br> Temperature: "; 
String string4 = " &deg;C<br> Humidity: "; 
String string5 = "%<br>"; 

void setup() { 
    size(500, 500); 

    myPort = new Serial(this, "COM4", 9600); 
    myPort.bufferUntil('x'); 
} 

void draw() { 
} 

String [] dataOutput = {}; 

void serialEvent(Serial myPort) { 
    dataReading = myPort.readString(); 
    if (dataReading!=null) { 
     dataOutput = split(dataReading, '\n'); 
     String [] tempfile = {string0,string1,dataOutput[1],string2,dataOutput[2],string3,dataOutput[3],string4,dataOutput[4],string5 }; 
     println("saving to html file..."); 
     saveStrings("data/index.html",tempfile); 
    } 
} 

HTML 코드 내가 얻을 :이 데이터를 HTML 페이지를 쓰기 처리에 다음 코드를 사용하여

45 
0 
31 
40 
x 

: 아두 이노 직렬를 통해 처리 다음 보내는

처음은 다음과 같습니다 :

<h1>Jurze Plants <img src="https://html-online.com/editor/tinymce/plugins/emoticons/img/smiley-laughing.gif" alt="laughing" /></h1> 
Moisture Level: 46 %<br> 
Motorstate: 0 <br> 
Temperature:31.00 &deg;C <br> 
Humidity: 35.00% <br> 

Arduino에서 데이터를 가져온 후 두 번째로 다음과 같이 보입니다.

<h1>Jurze Plants <img src="https://html-online.com/editor/tinymce/plugins/emoticons/img/smiley-laughing.gif" alt="laughing" /></h1> 
Moisture Level:  %<br> 
Motorstate: 46 <br> 
Temperature:0 &deg;C <br> 
Humidity: 31.00% <br> 

배열에 문제가 있습니까? 도움이 될 것입니다. : D

+0

승리를 위해 [espruino] (http://www.espruino.com/) !!! –

+0

'split' 함수를 보여줄 수 있습니까? –

+0

@ JérômeTeisseire'dataOutput = split (dataReading, '\ n'); ' – Jurze

답변

1

코드 디버깅 시간! (우리는 당신의 아두 이노를 가지고 있지 않기 때문에 우리가 정말 당신을 위해이 작업을 수행 할 수 없습니다.)

1 단계 : 당신의 serialEvent() 함수에서 dataReading의 값을 출력 할 수 println() 기능을 사용합니다. 당신이 기대하는 가치입니까?

2 단계 :dataOutput의 값을 출력하십시오. 그게 당신이 기대하는 것입니까? 각 색인을 인쇄하십시오. 그들은 모두 당신이 기대하는 것입니까? 여분의 공백과 제어 문자가 있는지 확인하십시오.

3 단계 : 색인이 예상 한 색인입니까? 색인 0 대신 색인 1으로 시작하는 것을 확인했습니다. 그게 네가하려는 의도 야?

요점은, 모든 변수의 값을 인쇄하여 예상 한 값인지 확인해야한다는 것입니다. 변수를 잘못된 값으로 찾으면 코드를 추적하여 정확히 어떤 일이 일어나는지 파악할 수 있습니다.

+0

'dataReading'은 올바른 출력을 주며,'dataOutput'는 첫 번째 공간을 1 회, 두 번째 공간을 두 번 나타냅니다. 'dataOutput = split (dataReading, '\ n'); ' – Jurze

+0

@Jurze와 정확히 일치해야합니다. 'split()'함수는 모든 공백에 대해 분할되므로 여분의 공간이 있으면 색인 중 하나가 빈 문자열이됩니다. 분할하기 전에이 색인을 건너 뛰거나 문자열에서 여분의 공간을 제거해야합니다. –

+0

도움 주셔서 감사합니다. 나는 그것을 지금 고쳤다. 내 Arduino 루프의 마지막 인쇄에서'print()'대신'println()'을 사용했습니다. 그 첫 번째 루프 후 시작하는 추가 공간이 발생합니다. :) – Jurze

관련 문제