Отправка данных на последовательный порт с помощью 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
   }
  }
 }

, 👍0

Обсуждение

Как «вычесть 0» преобразует символ ASCII в число?, @mhopeng

В вопросе много петель. Какие из них работают, а какие нет?, @mhopeng


1 ответ


0

Я в замешательстве. Что это за язык такой? В любом случае я предполагаю, что вы неправильно завершаете то, что отправляете в Arduino (помогло бы увидеть код Arduino). Причина, по которой я думаю, что это так, заключается в том, что вы отправляете ноль после своего номера. Как Arduino узнает, что ноль не является частью числа, вы имеете в виду нулевую или новую строку?

,

Большое спасибо за вашу заботу. Я только что включил код Arduino в вопрос; Я был бы признателен, если бы вы взглянули на него., @Doua Ali

Ноль просто на короткое время выключает все светодиоды, чтобы был перерыв между освещением светодиодов каждой линии и освещением светодиодов следующей линии., @Doua Ali