Отправка данных на последовательный порт с помощью IDE обработки (отладка работает, но не выполняется)
Я пытаюсь прочитать серию чисел в текстовом файле на моем ПК, а затем отправить их на мою плату Arduino через последовательный порт. Числа разделены запятыми и тире, поэтому я выполняю два цикла. Отправка номера в последовательный порт должна зажечь эквивалентный светодиод на плате Arduino. Проблема в том, что только первая итерация в первом цикле не зажигает эквивалентные светодиоды в режиме запуска, хотя это происходит в режиме отладки.; другие итерации и другие циклы работают безупречно. Никаких проблем с аппаратным обеспечением нет на 100% точно. Любая помощь будет очень признательна. Вот код:
import processing.serial.*;
import java.io.*;
int mySwitch=0;
int counter1=0;
int counter2=0;
String [] subtext;
String[] Lines;
Serial myPort;
void setup(){
//Создайте переключатель, который будет управлять частотой чтения текстового файла.
//Когда mySwitch=1, программа настроена на чтение текстового файла.
//Это выключается, когда mySwitch = 0
mySwitch=1;
//Откройте последовательный порт для связи с Arduino
//Убедитесь, что COM-порт правильный
myPort = new Serial(this, "COM36", 9600);
myPort.bufferUntil('\n');
}
void draw() {
if (mySwitch>0){
/*Функция ReadData может быть найдена позже в коде.
Это вызов для чтения CSV-файла на жестком диске компьютера. */
readData("Y:/MyTextFile.txt");
/*Следующий переключатель предотвращает непрерывное чтение текстового файла, пока
мы не будем готовы прочитать файл снова. */
mySwitch=0;
}
/*Только отправлять новые данные. Это утверждение IF позволит отправлять новые данные
в arduino. */
while(counter1<Lines.length){
subtext = splitTokens(Lines[counter1],",");
counter2=0;
while(counter2<subtext.length){
/* Напишите следующий номер на последовательный порт и отправьте его на Arduino
Будет задержка в полсекунды, прежде чем команда будет
отправлена для выключения светодиода : myPort.write('0'); */
myPort.write(subtext[counter2]);
//delay(300);
// delay(100);
//Увеличить счетчик так, чтобы следующий номер был отправлен в arduino.
counter2++;
}
delay(2000);
myPort.write('0');
delay(2000);
counter1++;
}
//Если в текстовом файле закончились числа, прочитайте текстовый файл снова через 5 секунд.
delay(5000);
mySwitch=1;
}
/* Следующая функция будет читать из файла CSV или TXT */
void readData(String myFileName){
File file=new File(myFileName);
BufferedReader br=null;
try{
br=new BufferedReader(new FileReader(file));
String text=null;
/* продолжайте читать каждую строку, пока не дойдете до конца файла */
while((text=br.readLine())!=null){
/* Разбил каждую строку на биты и куски, используя запятую в качестве разделителя */
Lines = splitTokens(text,"-");
}
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}finally{
try {
if (br != null){
br.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Вот код Arduino:
void setup() {
// инициализируйте цифровые контакты в качестве выхода.
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
// Включите последовательный протокол
Serial.begin(9600);
}
void loop() {
byte byteRead;
/* проверьте, были ли отправлены данные с компьютера: */
if (Serial.available()) {
/* чтение самого последнего байта */
byteRead = Serial.read();
//Вы должны вычесть "0" из прочитанного байта, чтобы преобразовать его из текста в число.
byteRead=byteRead-'0';
//Выключите все светодиоды, если байт Read = 0
if(byteRead==0){
//Выключите все светодиоды
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
}
//Включите светодиод в зависимости от прочитанного байта.
if(byteRead>0){
digitalWrite((byteRead+1), HIGH); // set the LED on
}
}
}
@Doua Ali, 👍0
Обсуждение1 ответ
Я в замешательстве. Что это за язык такой? В любом случае я предполагаю, что вы неправильно завершаете то, что отправляете в Arduino (помогло бы увидеть код Arduino). Причина, по которой я думаю, что это так, заключается в том, что вы отправляете ноль после своего номера. Как Arduino узнает, что ноль не является частью числа, вы имеете в виду нулевую или новую строку?
Большое спасибо за вашу заботу. Я только что включил код Arduino в вопрос; Я был бы признателен, если бы вы взглянули на него., @Doua Ali
Ноль просто на короткое время выключает все светодиоды, чтобы был перерыв между освещением светодиодов каждой линии и освещением светодиодов следующей линии., @Doua Ali
- Отправка информации (например, строки) через цифровые контакты
- Сохранение вывода Arduino в текстовый файл в режиме добавления
- Нужен простой пример визуализации акселерометра!
- Отправка mouseX и mouseY из обработки в Arduino
- Последовательное соединение между Processing и Arduino не работает
- Графические данные датчика усилия направляются через HX711?
- Как найти время точки на графике на последовательном плоттере Arduino или ПО для обработки?
- Не удается отправить строку с arduino на обработку через hc05
Как «вычесть 0» преобразует символ ASCII в число?, @mhopeng
В вопросе много петель. Какие из них работают, а какие нет?, @mhopeng