2016-08-24 2 views
1

Я пытаюсь сделать монитор завода с помощью Arduino и обработки. Обработка записывает html-файл на основе входного сигнала датчика Arduino. WinSCP контролирует файл, созданный для изменений, и напрямую загружает через FTP при изменении файла.Обработка: Напишите HTML-файл с входа arduino

На платформе Arduino посылает следующую обработку через последовательный:

45 
0 
31 
40 
x 

Используя следующий код в обработке я пишу 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-код я получаю первый раз:

<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

Время отладки кода! (Мы не можем сделать это для вас, так как мы не имеем ваш Arduino.)

Шаг 1: В вашей serialEvent() функции, используйте функцию println() для распечатки значения dataReading. Является ли ценность ожидаемой?

Шаг 2: Распечатайте значение dataOutput. Это то, чего вы ожидаете? Распечатайте каждый индекс. Они все, что вы ожидаете? Проверьте дополнительные пробелы и управляющие символы.

Шаг 3: Являются ли индексы такими, какие вы ожидаете от них? Я вижу, что вы начинаете с индекса 1 вместо индекса 0. Это то, что вы хотели сделать?

Дело в том, что вы должны распечатать значения каждой переменной, чтобы убедиться, что они того, чего вы ожидаете. Когда вы найдете переменную с неправильным значением, вы можете проследить ее через свой код, чтобы точно определить, что происходит.

+0

'dataReading' дает правильный результат,' dataOutput'gives 1 пробел первый раз и 2 пробела второй раз. должно быть что-то неправильно с 'dataOutput = split (dataReading, '\ n');' – Jurze

+0

@Jurze Точно. Функция 'split()' разделяется на каждое пространство, поэтому, если у вас есть дополнительное пространство, то одним из ваших индексов будет пустая строка String. Вам придется либо пропустить этот указатель, либо вырезать лишнее пространство из строки, прежде чем разбить его. –

+0

Спасибо за помощь! Я исправил это сейчас. в последнем отпечатке цикла моего Arduino я использовал 'println()' вместо 'print()'. Это вызывает дополнительное пространство, начиная с первого цикла :) – Jurze

Смежные вопросы