Код, работа кода, тыкните носом

omnihound
Offline
Зарегистрирован: 10.06.2020

Здравствуйте! Решил написать свой первый код - скуд. Там надо запоминать строчку из com-порта. Просто запомнить и вывести я смог, а запомнить и сравнить с кодом не получается. Ткните меня носом!

#include <Servo.h>
 
#include <LedControl.h>
 
Servo servo_1;
 
String i = "";
 
bool e;
 
LedControl lclm=LedControl(4,5,6,1);
 
void setup() {
  // put your setup code here, to run once:
lclm.shutdown(0,false);
servo_1.attach(8);
servo_1.write(90);
Serial.begin(9600);
lclm.setRow(0,0,B10000001);lclm.setRow(0,1,B01000010);lclm.setRow(0,2,B00100100);lclm.setRow(0,3,B00011000);lclm.setRow(0,4,B00011000);lclm.setRow(0,5,B00100100);lclm.setRow(0,6,B01000010);lclm.setRow(0,7,B10000001);
}
 
void loop() {
 
while (Serial.available() > 0) {
  i += (char)Serial.read();
  delay(5);
}
    
if (i == "49") {
  Serial.println("ФИО:");
  Serial.println("Дата рождения:");
  Serial.println("Действует до:");
  servo_1.write(180);
  lclm.setRow(0,0,B00000010);lclm.setRow(0,1,B00000010);lclm.setRow(0,2,B00000100);lclm.setRow(0,3,B01000100);lclm.setRow(0,4,B01000100);lclm.setRow(0,5,B00101000);lclm.setRow(0,6,B00101000);lclm.setRow(0,7,B00010000);
  delay(2000);
  servo_1.write(90);
  lclm.setRow(0,0,B10000001);lclm.setRow(0,1,B01000010);lclm.setRow(0,2,B00100100);lclm.setRow(0,3,B00011000);lclm.setRow(0,4,B00011000);lclm.setRow(0,5,B00100100);lclm.setRow(0,6,B01000010);lclm.setRow(0,7,B10000001);
  i = "";с 
  }
}
DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

пока код правильно не вставишь, никто его смотреть не будет. 

http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii

а вапще, у тебя с сериала 

while (Serial.available() > 0) {
  i += (char)Serial.read();
  delay(5);
}

не только "49", а еще и /r/n прилетает

Kakmyc
Offline
Зарегистрирован: 15.01.2018

memcmp() в помощь

omnihound
Offline
Зарегистрирован: 10.06.2020
#include <Servo.h>
Servo servo_1;
String i = "";
String j = "";
bool flag = false;
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  servo_1.attach(8);
  servo_1.write(90);
}

void loop() {
  // put your main code here, to run repeatedly:
  while (Serial.available() > 0) {
    i = i + (char)Serial.read();
    delay(10);
  }
  if (i != "") {
    j = i;
    flag = true;
    delay(10);
  }
  if (flag) {
    Serial.print("j = " + j);
  }
  if (j == "abc") {
    servo_1.write(180);
    delay(2000);
    servo_1.write(90);
  }
  flag = false;
  i = "";
  j = "";
}

 

omnihound
Offline
Зарегистрирован: 10.06.2020

DetSimen пишет:

а вапще, у тебя с сериала 

не только "49", а еще и /r/n прилетает

Что? Я нифига не понял. Что значит с сериала и /r/n прилетает?

omnihound
Offline
Зарегистрирован: 10.06.2020
#include <Servo.h>
Servo servo_1;
String i = "";
String j = "";
bool flag = false;
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  servo_1.attach(8);
  servo_1.write(90);
}

void loop() {
  // put your main code here, to run repeatedly:
  while (Serial.available() > 0) {
    i = i + (char)Serial.read();
    delay(10);
  }
  if (i != "") {
    j = i;
    flag = true;
    delay(10);
  }
  if (flag) {
    Serial.print("j = " + j);
  }
  if (j == "mem") {
    Serial.println("abc");
    servo_1.write(180);
    delay(2000);
    servo_1.write(90);
  }
  flag = false;
  i = "";
  j = "";
}

А так текст выводи обратно, но if , по моему мнению, проскакивает

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

omnihound пишет:

Что? Я нифига не понял. Что значит с сериала и /r/n прилетает?

это значит, что читать сериал не так надо. 

i = i + (char)Serial.read();

а примерно так 

char ch = (char)(Serial.read());
if (char > 0x1F) i += ch;

иначе у тебя в результирующую строку попадают служебные символы CR и LF и сравнение с "49" ниработаить

omnihound
Offline
Зарегистрирован: 10.06.2020

DetSimen пишет:

omnihound пишет:

Что? Я нифига не понял. Что значит с сериала и /r/n прилетает?

это значит, что читать сериал не так надо. 

i = i + (char)Serial.read();

а примерно так 

char ch = (char)(Serial.read());
if (char > 0x1F) i += ch;

иначе у тебя в результирующую строку попадают служебные символы CR и LF и сравнение с "49" ниработаить

Вообще не понимаю... Я тупой

Можете сказать, как вставить это ко мне в код?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

omnihound пишет:

Вообще не понимаю... Я тупой

Можете сказать, как вставить это ко мне в код?

Если ты тупой, какого хрена сразу за СКУД взялся?  Светлодиодиком помигать - твой потолок, если вместо чтения книг по матчасти, будешь клянчить код по всем форумам, до которых дотянешься. 

omnihound
Offline
Зарегистрирован: 10.06.2020

DetSimen пишет:

omnihound пишет:

Вообще не понимаю... Я тупой

Можете сказать, как вставить это ко мне в код?

Если ты тупой, какого хрена сразу за СКУД взялся?  Светлодиодиком помигать - твой потолок, если вместо чтения книг по матчасти, будешь клянчить код по всем форумам, до которых дотянешься. 

Да пошёл ты в жопу. Вместо помощи ворчишь.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

omnihound пишет:

Да пошёл ты в жопу. 

Спасибо, я пошел. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

DetSimen пишет:

хрена сразу за СКУД взялся?

Каждый будильник мнит себя машиной времени - это нормально.