Индикация режима работы

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

Здравствуйте, задача, чтобы в переменную "state" было записано task1-task9, и в зависимости от task выводилась надпись

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int state = 'task1';



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");
 }
 lse
	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");
 }
}

 

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

foxman322 пишет:

задача, чтобы в переменную "state" было записано task1-task9, и в зависимости от task выводилась надпись

И что?

Принято к сведению, что у Вас такая залача. Давайте я Вам тоже скажу, а Вы к сведения примете: "Здравствуйте, задача выйти на улицу и почистить снег". 

У Вас одна задача, у меня другая, дальше-то что?

Кстати, если память мне не изменяет, Вы подоную задачу полгода назад уже решали - http://arduino.ru/forum/programmirovanie/rabota-s-peremennymi-0

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

:(
 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
/**/
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
enum state_t {
  task1, task2, task3, task4, task5,
  task6, task7, task8, task9
} state;
void stand(state_t s) {
  state = s;
}
//------------------------------
void setup() {
  lcd.begin(16, 2);
  lcd.print("R=");
  stand(task1);
}
void loop() {
  lcd.setCursor(4, 0);
  switch (state) {
    case task1:
      lcd.print("toEdge");
      break;
    case task2:
      lcd.print("adgeToEdge");
    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;
  }
}
mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Уважаемый ТС, Вы бы не позорились, а почитали умные книжки про язык си. Такие ошибки, как в 3-й строке даже малые дети не делают.

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

Выдает 2 ошибки

2:12: error: variable or field 'stand' declared void

2:12: error: 'state_t' was not declared in this scope

 
 
qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

по Станиславскому Не верю.

Скетч использует 1880 байт (5%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 129 байт (6%) динамической памяти, оставляя 1919 байт для локальных переменных. Максимум: 2048 байт.

 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

А вообще зачем такие сложности? Не могли создать переменную int Task и назначать ее номером задачи? А затем стандартным case выбирали бы реакцию. Вы же очень плохо разбираетесь в программировании и, я уверен, в программе любезно представленной qwone ничего не поняли.

Или если уж совсем невмоготу - сделайте

#define task1 1;

#define task2 2;

int Task=task1;

swith (Task){

case task1:

и т.д.

Идите простыми путями - сложные сами Вас найдут.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
/**/
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const byte task1 = 0;
const byte task2 = 1;
const byte task3 = 2;
const byte task4 = 3;
const byte task5 = 4;
const byte task6 = 5;
const byte task7 = 6;
const byte task8 = 7;
const byte task9 = 8;
byte state;
void stand(byte s) {
  state = s;
}
//------------------------------
void setup() {
  lcd.begin(16, 2);
  lcd.print("R=");
  stand(task1);
}
void loop() {
  lcd.setCursor(4, 0);
  switch (state) {
    case task1:
      lcd.print("toEdge");
      break;
    case task2:
      lcd.print("adgeToEdge");
    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;
  }
}
/*Скетч использует 1878 байт (5%) памяти устройства. Всего доступно 32256 байт.
  Глобальные переменные используют 128 байт (6%) динамической памяти, оставляя 1920 байт для локальных переменных. Максимум: 2048 байт.
*/

Но да же так у ТС все равно найдутся проблемы в том же самом скетче

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

foxman322 пишет:

Выдает 2 ошибки

2:12: error: variable or field 'stand' declared void

2:12: error: 'state_t' was not declared in this scope

Нормально скопипастить с номерами строк религия не позволила?
Pyotr
Offline
Зарегистрирован: 12.03.2014

ТС, полгода строки выводите на дисплей? 

char* myStrings[4]={"toEdge", "adgeToEdge", "pingPong", "toNearEdge"};
byte state;

void setup(){
  lcd.init();                  
}

void loop(){
  lcd.setCursor(0, 0);
  byte posCursor = lcd.print(myStrings[state]);//длина строки
  for(; posCursor < 16; posCursor++) lcd.print(' ');//дальше пробелы
  state = ++state % 4;
  delay(1000);
}

 

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

Спасибо большое!