Работа с переменными

foxman322
Offline
Зарегистрирован: 06.06.2018

Помогите!

Вообщем, механизм у которого несколько режимов работы, у каждого режима своя переменная state например (state = task2), нужно, чтобы на экран выводился режим работы считывая переменную, я набрасал свой код, но в чем то проблема 

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const char state = 'task4';
char task1;
char task2;
char task3;
char task4;
char task5;
char task6;
char task7;
char task8;
char task9;
 
 
 
void setup()
{
lcd.begin(16, 2);
lcd.print("R=");
 }
 
void loop()
 
lcd.setCursor(4,0);
 
if(state == task1)
    {
lcd.print("toEdge");
    }
 else
if(state == task2)
 {
lcd.print("adgeToEdge");
 }
 else
if(state == task3)
 {
lcd.print("pingPong");
 }
 else
if(state == task4)
 {
lcd.print("toNearEdge");
 }
 else
if(state == task5)
 {
lcd.print("toCenter");
 }
 else
if(state == task6)
 {
lcd.print("delta");
 }
 else
if(state == task7)
 {
lcd.print("accMotion");
 }
 else
if(state == task8)
 {
lcd.print("decMotion");
 }
 else
if(state == task9)
 {
lcd.print("varMotion");
 }
}
DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Набрасал это хорошо. Теперь еще вставь нормально.

foxman322
Offline
Зарегистрирован: 06.06.2018

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const char state = 'task4';
char task1;
char task2;
char task3;
char task4;
char task5;
char task6;
char task7;
char task8;
char task9;



void setup()
{
lcd.begin(16, 2);
lcd.print("R=");
 }

void loop()
{ 

lcd.setCursor(4,0);

if(state == task1)
    {
lcd.print("toEdge"); 
    }
 else
if(state == task2)
 {
lcd.print("adgeToEdge");
 }
 else
if(state == task3)
 {
lcd.print("pingPong");
 }
 else
if(state == task4)
 {
lcd.print("toNearEdge");
 }
 else
if(state == task5)
 {
lcd.print("toCenter");
 }
 else
if(state == task6)
 {
lcd.print("delta");
 }
 else
if(state == task7)
 {
lcd.print("accMotion");
 }
 else
if(state == task8)
 {
lcd.print("decMotion");
 }
 else
if(state == task9)
 {
lcd.print("varMotion");
 }
}

 

foxman322
Offline
Зарегистрирован: 06.06.2018

Готово

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

А когда не компилируется, чо говорит? 

На 3 строчку не ругаеца?

foxman322
Offline
Зарегистрирован: 06.06.2018

Оно не ругается, на экран ничего кроме букву "R=" не выводится

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

И правильно

foxman322
Offline
Зарегистрирован: 06.06.2018

а как правильно тогда?

nik182
Offline
Зарегистрирован: 04.05.2015

А вам не кажется, что если сравнивать массив и символ, они будут равны только если массив будет состоять из одного символа и этот символ будет отличен от нуля ( #0 ) ?

foxman322
Offline
Зарегистрирован: 06.06.2018

может быть

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

nik182 пишет:

А вам не кажется, что если сравнивать массив и символ, они будут равны только если массив будет состоять из одного символа и этот символ будет отличен от нуля ( #0 ) ?

И то не будут.

foxman322
Offline
Зарегистрирован: 06.06.2018

На экране должна выводить надпись “R=” и режим работы

Режимы работы берутся на основании значений переменной state

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

Ну, я тебе лекции по С точно читать не буду. На то учебники есть, изучай

nik182
Offline
Зарегистрирован: 04.05.2015

Ну прямо конечно не будут. По содержимому  первой ячейки памяти строки равной символу будут. Если типы привести к одному.  

Densl
Offline
Зарегистрирован: 28.11.2018

В третей строке ошибка. И почему там тип const? А, там же с 3 по 12 неправильно все. И в сравнении тоже ошибки. В общем вам править как-то нужно. 

foxman322
Offline
Зарегистрирован: 06.06.2018

Да, сам понимаю что с 3 строчки по 12 ошибки, но я не знаю, как сделать уже, все перекопал

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

foxman322,

в строках №№ 27, 32, 73 и т.д. Вы сравниваете с state с переменными task1task2task3, и т.д.

А теперь почешите репу и ответьте, а чему эти переменные ( task1task2task3, и т.д.)  равны? Т.е. с чем именно Вы сравниваете? Если не можете из репы вычесать, то напечатайте их и посмотрите.

foxman322
Offline
Зарегистрирован: 06.06.2018

Да, сам понимаю что с 3 строчки по 12 ошибки, но я не знаю, как сделать уже, все перекопал

foxman322
Offline
Зарегистрирован: 06.06.2018

Там несколько режимов например движение прямо, и у каждого режима есть значение то, что state=task1, у другово режима,допустим вращение, и в коде вращения написанна переменная то, что  state=task3. и тд.

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

Так, вечер перестаёт быть томным. Не надо про режимы. Не пудрите никому мозги. Просто ответьте на простой вопрос: чему эти грёбаные переменные равны. Ответ должен быть простым, типа

task1 = 321

task2 - 12

и т.д.

Просто ответьте на простой вопрос и не мудрствуйте лукаво.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
enum task_t {
  task1, task2, task3, task4, task5,
  task6, task7, task8, task9
} state;
void printState(task_t s) {
  lcd.print("R=");
  lcd.setCursor(4, 0);
  switch (s) {
    case task1:
      lcd.print("toEdge");
      break;
    case task2:
      lcd.print("adgeToEdge");
      break;
    case task3:
      lcd.print("pingPong");
      break;
    case task4:
      lcd.print("toNearEdge");
      break;
    case task5:
      lcd.print("toCenter");
      break;
    case task6:
      lcd.print("delta");
      break;
    case task7:
      lcd.print("accMotion");
      break;
    case task8:
      lcd.print("decMotion");
      break;
    case task9:
      lcd.print("varMotion");
      break;
  }
};
//---------------------------------
void setup()
{
  lcd.begin(16, 2);
  state = task4;
  printState(state);
}

void loop(){}

 

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

qwone пишет:

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
enum task_t {

Не понял! А где волшебное слово "class"?

Нещитова! Попробуй ещё раз!