Не могу разобраться с arduino java

Привет, друзья, это властелин колец.
У меня 2 вопроса:

  1. Можно ли сравнивать две String переменные так:

String myStr="hello";

if(myStr.compareTo("hello")){ … }

  1. Читается ли переменная:
    через (Serial Monitor)

strMy=Serial.readString()
как переменная типа String или

как правильней прочитать?

А где тут Java?

я так то и властелина не вижу даже…
// Способ 1: Использовать compareTo с проверкой на 0 

if(myStr.compareTo("hello") == 0) {  }// Способ 2: Использовать оператор == (рекомендуется) 

if(myStr == "hello") {  }// Способ 3: Использовать equals()

if(myStr.equals("hello")) {  }

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

if (Serial.available() > 0) {
String strMy = Serial.readStringUntil('\n');
strMy.trim(); // Обязательно чистим!
Serial.print("Получено: ");
Serial.println(strMy);
}
p.s. джава зло! используйте с++
public class Main {
public static void main(String[] args) {
String myStr = "hello";
// ❌ НЕПРАВИЛЬНО - compareTo возвращает int, а if ожидает boolean
// if(myStr.compareTo("hello")) { } // Ошибка компиляции!
// ✅ ПРАВИЛЬНЫЕ СПОСОБЫ:
// Способ 1: compareTo с проверкой на 0 (стандартный)
if(myStr.compareTo("hello") == 0) {
System.out.println("Строки равны!");
} // Способ 2: equals() метод (РЕКОМЕНДУЕТСЯ)
if(myStr.equals("hello")) { System.out.println("Строки равны!");
}// Способ 3: equalsIgnoreCase() - без учета регистра
if(myStr.equalsIgnoreCase("HELLO")) {
System.out.println("Строки равны (регистр игнорируется)!");
}
// ❌ НЕ используйте == для сравнения содержимого строк!
if(myStr == "hello") { // Сравнивает ссылки, а не содержимое!
System.out.println("Может не сработать!");
}
}
}

и т.д. чаг Гэпете подскажет...

if(myStr.equals("hello")) { System.out.println("Строки равны!");
Спасибо, друзья, просто не знаю как правильно прочитать из консоли ввода ввывода в myStr:
myStr=Serial.readString();
Ведь нужно сказать, что MyStr типа String.
Помогите?
Как же правильно прочитать переменную из Монитора порта , если известно, что она типа String myStr?

 String  MyStr = Serial.readString();//

А так?

О, да, Повелитель матрицы - он Властелин колец.

…сообразно владению

Ребят, все рвано не получается!
Нужно при вводе через монитор порта слова: “hello” менялся цвет. на жёлтый.
Штрихкодами символов ‘1’,‘2’ получается, но целым словом нет.

//author: Alunts Arthur Arthurovich;
#include <Adafruit_NeoPixel.h> // подключаем библиотеку
Adafruit_NeoPixel strip (24, 10, NEO_GRB + NEO_KHZ800);   //PIN: 5 //LED число LED'ов: 24
int ExitValue0=101;
int val;
short flag  = 1;
short flag0 = 0;
short flag1 = 1;
short dd = 1;
int tt = 0;
int i = 0;
int RR=0;
int BB=0;
int GG=0;
int ff=20;
int ii=12;
int ya=7;
int FL=0;
char data0; //variable to store incoming data from JAVA 
String myStr;

void L1() {
}

  

void L0(){
RR=RR+ff;
ya++;
if (RR+ff>255) {RR=0; GG=GG+ff;}  
if (GG+ff>255) {GG=0;  BB=BB+ff; }
if (BB+ff>255) {BB=0;}
//if(ya>255){  //ccd   }

}

void setup() {
  
  Serial.begin(9600);
  strip.setBrightness(ya); //указываем яркость (max: 255);
  Serial.setTimeout(0);
  strip.begin();                     // инициализируем объект NeoPixel
  //strip.show();
  ////part 23//////
  
  
  
}

void Main_L(){
i=0;

}


void L2(){
  if (i < 3*2 ) {

  
 
  strip.clear();    
  strip.setPixelColor(i, strip.Color(RR,GG,BB));
  strip.setPixelColor(i + 3*2, strip.Color(RR,GG,BB));
  strip.setPixelColor(i + 6*2, strip.Color(RR,GG,BB));
  strip.setPixelColor(i + 9*2, strip.Color(RR,GG,BB));
  strip.show();
  i++;
  delay(tt);
  }
  else {
  i = 0;
  strip.show();
  }


  if (flag == 1) {
  tt = tt + dd;
  }
  if (flag == 0) {
  tt = tt - dd;
  }
  if (tt >= 100) {
  flag = 0;
  }
  if (tt == 0) {
  flag = 1;
  }
 strip.show();



}
void loop() { 
 //L0(); 
 L1();  
 L2();
while(Serial.available()>0){ //if data has been written to the Serial stream
    //data0=Serial.read();
    data0=Serial.read();
    myStr=Serial.read(); 
     
    if(data0==('1')){ 
      strip.clear();    
      RR=0;GG=255;BB=0;
      strip.show();
      //delay(2000);
    
    }  
    if(data0==('2')){ 
      strip.clear();    
      RR=0;GG=0;BB=255;
      strip.show();
    }  
      String MyStr = Serial.readString();
    if(MyStr.compareTo("hello") == 1) {
      strip.clear();    
      RR=222;GG=0;BB=0;
      strip.setPixelColor(1, strip.Color(RR,GG,BB));
      strip.show();
      Serial.println (MyStr);
    }
 

}}

А глобально там уроки переделались: как-то красивше и логичней/удобней стало :roll_eyes:, правда появилась приписка “Дополнительный контент доступен владельцам набора”, но и за это спасибо.

data0 объявите String
В цикле loop() принимайте всё как String ,
затем сравнивайте …
P.S.
Передавать одиночные символы нужно тоже как строки.


String data0;

void loop() {

  if (Serial.available() > 0) { //if data has been written to the Serial stream

    data0 = Serial.readString();

    if (data0 == ("1")) {
      Serial.println (data0);
    }
    if (data0 == ("2")) {
      Serial.println (data0);
    }

    if (data0 == "hello") {
      Serial.println (data0);
    }
  }
}

Спасибо, парни все учел. Работает. Вот код.
Единственное что бы хотелось так это урожайи из веревок.

  1. Как удалять после каждого ввода консоль?
//author: Alunts Arthur Arthurovich;
#include <Adafruit_NeoPixel.h> // подключаем библиотеку
Adafruit_NeoPixel strip (24, 10, NEO_GRB + NEO_KHZ800);   //PIN: 5 //LED число LED'ов: 24
int ExitValue0=101;
int val;
short flag  = 1;
short flag0 = 0;
short flag1 = 1;
short dd = 1;
int tt = 0;
int i = 0;
int RR=0;
int BB=0;
int GG=0;
int ff=20;
int ii=12;
int ya=7;
int FL=0;
char data0; //variable to store incoming data from JAVA 
String myStr;

void L1() {
}

  

void L0(){
RR=RR+ff;
ya++;
if (RR+ff>255) {RR=0; GG=GG+ff;}  
if (GG+ff>255) {GG=0;  BB=BB+ff; }
if (BB+ff>255) {BB=0;}
//if(ya>255){  //ccd   }

}

void setup() {
  
  Serial.begin(115200);
  Serial.flush();
  strip.setBrightness(ya); //указываем яркость (max: 255);
  Serial.setTimeout(0);
  strip.begin();                     // инициализируем объект NeoPixel
  //strip.show();
  ////part 23//////
  
  
  
}

void Main_L(){
i=0;

}


void L2(){
  if (i < 3*2 ) {

  
 
  strip.clear();    
  strip.setPixelColor(i, strip.Color(RR,GG,BB));
  strip.setPixelColor(i + 3*2, strip.Color(RR,GG,BB));
  strip.setPixelColor(i + 6*2, strip.Color(RR,GG,BB));
  strip.setPixelColor(i + 9*2, strip.Color(RR,GG,BB));
  strip.show();
  i++;
  delay(tt);
  }
  else {
  i = 0;
  strip.show();
  }


  if (flag == 1) {
  tt = tt + dd;
  }
  if (flag == 0) {
  tt = tt - dd;
  }
  if (tt >= 100) {
  flag = 0;
  }
  if (tt == 0) {
  flag = 1;
  }
 strip.show();



}
void loop() {
  //L0();
  
  
  while (Serial.available()>0) {  //if data has been written to the Serial stream
                                //data0=Serial.read();
    String data0 = Serial.readString();

    if (data0 == ("1")) {
      Serial.println (data0);
      RR=200;GG=0;BB=0;
    }
    if (data0 == ("2")) {
      Serial.println (data0);
      RR=0;GG=0;BB=255;
    }

    if (data0 == "hello") {
      Serial.println (data0);
      RR=0;GG=244;BB=0;
    }
    
    if (data0 == "help") {
      Serial.println (data0);
      RR=225;GG=255;BB=255;
    }
    
  }
  L1();
  L2();
}

Не знаю, есть ли такая возможность на java, я бы сделал так

Не чувак. Я имею ввиду очищать консоль. после каждого нового ввода. Как это сделать?

Консоль на компе?
Не знаю. Я больше по МК.
Да и зачем её очищать- тоже не понял

1 лайк

Монитор порта ардуино IDE! Как очищать?

String inputString = "";         // строка для хранения входящих данных
bool stringComplete = false;    // флаг для обозначения завершения строки

void setup() {
  // инициализация серийного порта с определенной скоростью (например, 9600 бод)
  Serial.begin(9600);
  // резервируем место для хранения строки (достаточно места)
  inputString.reserve(200);
  Serial.println("Серийный порт инициализирован. Ожидание данных...");
}

void loop() {
  // если есть доступные для чтения байты
  if (Serial.available()) {
    char inChar = (char)Serial.read(); // считываем один байт
    inputString += inChar;            // добавляем его к нашей строке

    // если символ - символ новой строки, значит, строка завершена
    if (inChar == '\n') {
      stringComplete = true; // устанавливаем флаг завершения строки
    }
  }

  // если строка получена полностью
  if (stringComplete) {
    // выводим полученную строку в монитор порта
    Serial.print("Получена строка: ");
    Serial.println(inputString);

    // здесь можно парсить и обрабатывать строку, например:

    // 1. Парсинг как целое число
    // Пример: если приходит "123"
    int parsedInt = inputString.toInt();
    Serial.print("Число (toInt): ");
    Serial.println(parsedInt);

    // 2. Парсинг строки по разделителю (пример: "value:100")
    // Для этого нужно сначала удалить пробельные символы и символы новой строки
    inputString.trim();
    if (inputString.startsWith("value:")) {
      // извлекаем подстроку, начиная с 6-го символа (после "value:")
      String valueStr = inputString.substring(6);
      int value = valueStr.toInt();
      Serial.print("Извлеченное значение: ");
      Serial.println(value);
    }

    // очищаем строку для получения следующих данных
    inputString = "";
    stringComplete = false;
  }
}

Это разве-что символ “забоя” передавать))))
(Не пробовал)

на передачу он вычищен когда клавишу энтер нажал, на приём тут if (Serial.available()) и ?

Как по мне - речь про очистку экрана после вывода данных

Да, естесственно, как очистить экран после ввода?

Терминал должен поддерживать соотв. упр. символы. Иначе никак.
На мониторе Arduino IDE вряд ли возможно(хотя на 100% не знаю)