Нужна помощь в создании нескольких экранов

Резидент
Offline
Зарегистрирован: 15.04.2013
Ребята, помогите с проблемой. Мне проблема, наверняка кому-то пустяк. Условие следующее: на дисплее высвечиваются какие-то пеменные данные и имеется кнопка. При нажатии на неё экран должен очистится и появится новый экран со своими кнопками и отображаемыми данными. Мой скетчик работать не хочет, выдает ошибку:
sketch_proba_ekranov.ino: In function 'void loop()':
sketch_proba_ekranov:37: error: 'ekran_1' was not declared in this scope
sketch_proba_ekranov:41: error: 'ekran_2' was not declared in this scope
sketch_proba_ekranov:46: error: a function-definition is not allowed here before '{' token
sketch_proba_ekranov:51: error: a function-definition is not allowed here before '{' token
sketch_proba_ekranov:120: error: expected `}' at end of input
Помогите нубу. ткните в ошибки

#include <UTouch.h> #include <UTFT.h> #include <Arduino.h> extern uint8_t SmallFont[]; // маленький шрифт extern uint8_t BigFont[]; // большой шрифт extern uint8_t SevenSegNumFont[]; // огромный шрифт UTFT myGLCD(ITDB32S,38,39,40,41); // подключаем дисплей UTouch myTouch(6,5,4,3,2); // подключаем тачскрин int x, y; byte nomerEkrana; void setup() { // Инициализация установки nomerEkrana = 1; nomerEkrana = 2; myGLCD.InitLCD(); // инициализация дисплея myGLCD.clrScr(); myTouch.InitTouch(); // инициализация тачскрина myTouch.setPrecision(PREC_MEDIUM); myGLCD.setFont(BigFont); // инициализация шрифта myGLCD.setBackColor(0, 0, 255); // инициализация заднего цвета шрифта } void loop() { { if (nomerEkrana ==1) { ekran_1(); } else if (nomerEkrana ==2) { ekran_2(); } } void steret() { myGLCD.fillScr (VGA_RED); } void ekran_1() { void drawButtons() { //========================= Задаем кнопку верхнний ряд левая =================================== myGLCD.setColor(0, 0, 255); // цвет левой кнопки верхней строки myGLCD.fillRoundRect (5, 3, 105, 79); // х1-гор, y1-верт,верх-лев точка кнопки, х2-гор, y2-верт,нижн-прав точка кнопки myGLCD.setColor(255, 255, 255); // цвет коёмки кнопки и шрифта myGLCD.drawRoundRect (5, 3, 105, 79); // координаты коемки кнопки myGLCD.print("KNOPKA 1", 33, 35); // надпись и её координаты } //========================= Рисуем красную рамку во время касании кнопки ====================== void waitForIt(int x1, int y1, int x2, int y2) { myGLCD.setColor(255, 0, 0); myGLCD.drawRoundRect (x1, y1, x2, y2); while (myTouch.dataAvailable()) myTouch.read(); myGLCD.setColor(255, 255, 255); myGLCD.drawRoundRect (x1, y1, x2, y2); } while (true) { if (myTouch.dataAvailable()) { myTouch.read(); x=myTouch.getX(); y=myTouch.getY(); x = map(x,0,320,320,0); // костыль для перевёрнутой координты Х if ((y>=3) && (y<=79)) // верхний ряд { if ((x>=5) && (x<=105)) // кнопка CO2 { steret(); nomerEkrana = 2; } } } } } void ekran_2() { void drawButtons() //тут создать кнопку и обработку нажатия на кнопку { //========================= Задаем кнопку верхнний ряд центр =================================== myGLCD.setColor(0, 0, 255); // цвет центр кнопки верхней строки myGLCD.fillRoundRect (110, 3, 210, 79); // координаты кнопки myGLCD.setColor(255, 255, 255); // цвет коёмки кнопки и шрифта myGLCD.drawRoundRect (110, 3, 210, 79); // координаты коемки кнопки myGLCD.print("KNOPKA 2", 143, 35); // надпись и её координаты } //========================= Рисуем красную рамку во время касании кнопки ====================== void waitForIt(int x1, int y1, int x2, int y2) { myGLCD.setColor(255, 0, 0); myGLCD.drawRoundRect (x1, y1, x2, y2); while (myTouch.dataAvailable()) myTouch.read(); myGLCD.setColor(255, 255, 255); myGLCD.drawRoundRect (x1, y1, x2, y2); } if ((y>=3) && (y<=79)) // верхний ряд { if ((x>=110) && (x<=210)) // кнопка O2 { steret(); nomerEkrana = 1; } } } }

 

Резидент
Offline
Зарегистрирован: 15.04.2013

Какая-то ерунда с первым постом вышла, прошу модераторов удалить эту кашу )

 

Ребята, помогите с проблемой. Мне проблема, наверняка кому-то пустяк. Условие следующее: на дисплее высвечиваются какие-то пеменные данные и имеется кнопка. При нажатии на неё экран должен очистится и появится новый экран со своими кнопками и отображаемыми данными. Мой скетчик работать не хочет, выдает ошибку:

sketch_proba_ekranov.ino: In function 'void loop()':
sketch_proba_ekranov:37: error: 'ekran_1' was not declared in this scope
sketch_proba_ekranov:41: error: 'ekran_2' was not declared in this scope
sketch_proba_ekranov:46: error: a function-definition is not allowed here before '{' token
sketch_proba_ekranov:51: error: a function-definition is not allowed here before '{' token
sketch_proba_ekranov:120: error: expected `}' at end of input
 
Помогите нубу. ткните в ошибки
 
#include <UTouch.h>
#include <UTFT.h>
#include <Arduino.h>

extern uint8_t SmallFont[];                // маленький шрифт
extern uint8_t BigFont[];                  // большой шрифт
extern uint8_t SevenSegNumFont[];          // огромный (двойной) шрифт (для цифр)

UTFT        myGLCD(ITDB32S,38,39,40,41);   // подключаем дисплей
UTouch      myTouch(6,5,4,3,2);            // подключаем тачскрин

int x, y;

byte nomerEkrana;

void setup()
{
  // Инициализация установки
  nomerEkrana = 1;
  nomerEkrana = 2;
  myGLCD.InitLCD();                       // инициализация дисплея
  myGLCD.clrScr();

  myTouch.InitTouch();                   // инициализация тачскрина
  myTouch.setPrecision(PREC_MEDIUM);

  myGLCD.setFont(BigFont);                // инициализация шрифта
  myGLCD.setBackColor(0, 0, 255);         // инициализация заднего цвета шрифта
  
}

void loop()
{
 {
  if (nomerEkrana ==1)
  {
   ekran_1();
  }
  else  if (nomerEkrana ==2)
  {
   ekran_2();
  }
 }

 void steret()
  {
   myGLCD.fillScr (VGA_RED);
  }

 void ekran_1()
  {
   void drawButtons()
    {
     //========================= Задаем кнопку верхнний ряд левая ===================================
     myGLCD.setColor(0, 0, 255);              // цвет левой кнопки верхней строки
     myGLCD.fillRoundRect (5, 3, 105, 79);    // х1-гор, y1-верт,верх-лев точка кнопки, х2-гор, y2-верт,нижн-прав точка кнопки
     myGLCD.setColor(255, 255, 255);          // цвет коёмки кнопки и шрифта
     myGLCD.drawRoundRect (5, 3, 105, 79);    // координаты коемки кнопки
     myGLCD.print("KNOPKA 1", 33, 35);             // надпись и её координаты
    } 
     //========================= Рисуем красную рамку во время касании кнопки ======================
   void waitForIt(int x1, int y1, int x2, int y2)
    {
     myGLCD.setColor(255, 0, 0);
     myGLCD.drawRoundRect (x1, y1, x2, y2);
     while (myTouch.dataAvailable())
     myTouch.read();
     myGLCD.setColor(255, 255, 255);
     myGLCD.drawRoundRect (x1, y1, x2, y2);
    }
  while (true)
  {
    if (myTouch.dataAvailable())
    {
      myTouch.read();
      x=myTouch.getX();
      y=myTouch.getY();
      x =  map(x,0,320,320,0);     // костыль для перевёрнутой координты Х
      if ((y>=3) && (y<=79))       // верхний ряд
       {
        if ((x>=5) && (x<=105))    // кнопка CO2
         {  
          steret();
          nomerEkrana = 2;
         }
       }
     }
   }
}   
 void ekran_2()
  {
   void drawButtons()                         //тут создать кнопку и обработку нажатия на кнопку
    {
     //========================= Задаем кнопку верхнний ряд центр ===================================
     myGLCD.setColor(0, 0, 255);              // цвет центр кнопки верхней строки
     myGLCD.fillRoundRect (110, 3, 210, 79);  // координаты кнопки
     myGLCD.setColor(255, 255, 255);          // цвет коёмки кнопки и шрифта
     myGLCD.drawRoundRect (110, 3, 210, 79);  // координаты коемки кнопки
     myGLCD.print("KNOPKA 2", 143, 35);             // надпись и её координаты
    }
    //========================= Рисуем красную рамку во время касании кнопки ======================
   void waitForIt(int x1, int y1, int x2, int y2)
    {
     myGLCD.setColor(255, 0, 0);
     myGLCD.drawRoundRect (x1, y1, x2, y2);
     while (myTouch.dataAvailable())
     myTouch.read();
     myGLCD.setColor(255, 255, 255);
     myGLCD.drawRoundRect (x1, y1, x2, y2);
    }
   if ((y>=3) && (y<=79))       // верхний ряд
     {
      if ((x>=110) && (x<=210))  // кнопка O2
       {  
        steret();
        nomerEkrana = 1;
       } 
     }
  }
}

 

 
 
maksim
Offline
Зарегистрирован: 12.02.2012

Резидент пишет:

на дисплее высвечиваются какие-то пеменные данные и имеется кнопка. При нажатии на неё экран должен очистится и появится новый экран со своими кнопками и отображаемыми данными. 

Эта каша выше, которую вы намешали так работать не будет. Начните с простых примеров и самое главное почитайте что такое Функции и как ими пользовать и где их объявлять.

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Я тоже заметил что функции обьявлены внутри цикла loop - отсюда и ошибки. Вобщем у вас каша в код попала.

Вначале нарисуйте структуру программы ввиде блоков на бумаге(раз не умеете представлять ее в голове).

И помните что функция loop вызывается циклически и нет смысла плодить while(true) без условия выхода - программа зависнет просто.

Резидент
Offline
Зарегистрирован: 15.04.2013
Ну да, послать в лес всегда легко. Читать-то я умею... Вот только каждый по разному воспринимает информацию, один прочтет текст и ему в тоже мгновение откроются все сокровенные тайны мироздания, а другому нужно чтоб ему популярным языком обьяснил живой человек, вроде преподавателя или друга программиста. Первого к сожалению уже не могу себе позволить, второго - увы не имею. Мне хватило бы бонального примера по заданным условиям...
Snubist
Offline
Зарегистрирован: 18.02.2013

Дак уже сказали

NeiroN пишет:

функции обьявлены внутри цикла loop - отсюда и ошибки.

Посмотри в чем разница

между



 void loop()
{
 {
  if (nomerEkrana ==1)
  {
   ekran_1();
  }
  else  if (nomerEkrana ==2)
  {
   ekran_2();
  }
 }

 void steret()
  {
   myGLCD.fillScr (VGA_RED);
  }

 void ekran_1()
  {
   void drawButtons()
    {
     //========================= Задаем кнопку верхнний ряд левая ===================================
     myGLCD.setColor(0, 0, 255);              // цвет левой кнопки верхней строки
     myGLCD.fillRoundRect (5, 3, 105, 79);    // х1-гор, y1-верт,верх-лев точка кнопки, х2-гор, y2-верт,нижн-прав точка кнопки
     myGLCD.setColor(255, 255, 255);          // цвет коёмки кнопки и шрифта
     myGLCD.drawRoundRect (5, 3, 105, 79);    // координаты коемки кнопки
     myGLCD.print("KNOPKA 1", 33, 35);             // надпись и её координаты
    } 
.......................................
}

 

и

void loop()
{
 {
  if (nomerEkrana ==1)
  {
   ekran_1();
  }
  else  if (nomerEkrana ==2)
  {
   ekran_2();
  }
 }
}
 void steret()
  {
   myGLCD.fillScr (VGA_RED);
  }

 void ekran_1()
  {
   void drawButtons()
    {
     //========================= Задаем кнопку верхнний ряд левая ===================================
     myGLCD.setColor(0, 0, 255);              // цвет левой кнопки верхней строки
     myGLCD.fillRoundRect (5, 3, 105, 79);    // х1-гор, y1-верт,верх-лев точка кнопки, х2-гор, y2-верт,нижн-прав точка кнопки
     myGLCD.setColor(255, 255, 255);          // цвет коёмки кнопки и шрифта
     myGLCD.drawRoundRect (5, 3, 105, 79);    // координаты коемки кнопки
     myGLCD.print("KNOPKA 1", 33, 35);             // надпись и её координаты
    } 
  }
....................................................
Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Прекратите плакать, стенать и равать волосы во всяких разных местах...

у вас каша в коде, о чем вам и написали... разбираться в вашей каше никто желания не имеет..

вы накопировали кусков отовсюду, причем даже без представления что и зачем...

вот вам ваш код без красных рамочек.. и так убил минус 15.. лень заморачиваться на разборки с рамочками..

счет на ящик пива вышлю  отдельно

#include <UTouch.h>
#include <UTFT.h>

extern uint8_t SmallFont[];                // маленький шрифт
extern uint8_t BigFont[];                  // большой шрифт
extern uint8_t SevenSegNumFont[];          // огромный (двойной) шрифт (для цифр)

UTFT        myGLCD(ITDB32S,38,39,40,41);   // подключаем дисплей
UTouch      myTouch(6,5,4,3,2);            // подключаем тачскрин

int x, y;

byte nomerEkrana;

void setup()
{
  // Инициализация установки
  nomerEkrana = 1;
  myGLCD.InitLCD();                       // инициализация дисплея
  myGLCD.clrScr();

  myTouch.InitTouch();                   // инициализация тачскрина
  myTouch.setPrecision(PREC_MEDIUM);

  myGLCD.setFont(BigFont);                // инициализация шрифта
  myGLCD.setBackColor(0, 0, 255);         // инициализация заднего цвета шрифта

}

void loop()
  {
    if (nomerEkrana ==1)
    {
      pic1();
    }
    else  if (nomerEkrana ==2)
    {
      pic2();
    }
  }

 void steret()
  {
    myGLCD.fillScr (VGA_RED);
  }

  void pic1(){
      //========================= Задаем кнопку верхнний ряд левая ===================================
      myGLCD.setColor(0, 0, 255);              // цвет левой кнопки верхней строки
      myGLCD.fillRoundRect (5, 3, 105, 79);    // х1-гор, y1-верт,верх-лев точка кнопки, х2-гор, y2-верт,нижн-прав точка кнопки
      myGLCD.setColor(255, 255, 255);          // цвет коёмки кнопки и шрифта
      myGLCD.drawRoundRect (5, 3, 105, 79);    // координаты коемки кнопки
      myGLCD.print("KNOPKA 1", 33, 35);             // надпись и её координаты
       //========================= Рисуем красную рамку во время касании кнопки ======================

      while (myTouch.dataAvailable())
      myTouch.read();
        x=myTouch.getX();
        y=myTouch.getY();
        x =  map(x,0,320,320,0);     // костыль для перевёрнутой координты Х
        if ((y>=3) && (y<=79))       // верхний ряд
        {
          if ((x>=5) && (x<=105))    // кнопка CO2
          {  
            steret();
            nomerEkrana = 2;
          }
        }
      }
  void pic2()
   {
      //========================= Задаем кнопку верхнний ряд центр ===================================
      myGLCD.setColor(0, 0, 255);              // цвет центр кнопки верхней строки
      myGLCD.fillRoundRect (110, 3, 210, 79);  // координаты кнопки
      myGLCD.setColor(255, 255, 255);          // цвет коёмки кнопки и шрифта
      myGLCD.drawRoundRect (110, 3, 210, 79);  // координаты коемки кнопки
      myGLCD.print("KNOPKA 2", 143, 35);             // надпись и её координаты
     //========================= Рисуем красную рамку во время касании кнопки ======================
      while (myTouch.dataAvailable())
      myTouch.read();
      x=myTouch.getX();
      y=myTouch.getY();
      x =  map(x,0,320,320,0);     // костыль для перевёрнутой координты Х
     if ((y>=3) && (y<=79))       // верхний ряд
    {
      if ((x>=110) && (x<=210))  // кнопка O2
      {  
        steret();
        nomerEkrana = 1;
      } 
    }
  }

 

Резидент
Offline
Зарегистрирован: 15.04.2013

Puhlyaviy.

Большое спасибо за помощь. Большего мне и не надо, на данном этапе. Про кнопки с рамками вы зря, это вполне рабочий скетч, причем сам его написал. Просто попытался его всунуть в экраны, как мне посоветовали. 

Snubist.

Спасибо, разглядел. Я в общем-то и просил чтоб ткнули меня носом... а не размазывали меня как "повидло на сусок хлеба". 

Всем от души спасибо ))

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Резидент пишет:

Puhlyaviy.

Большое спасибо за помощь. Большего мне и не надо, на данном этапе. Про кнопки с рамками вы зря, это вполне рабочий скетч, причем сам его написал. Просто попытался его всунуть в экраны, как мне посоветовали. 

да нет в вашем скече ничего рабочего... просто куча строчек бездумно накопипасченых... выглядит так что вы копипастили по памяти с выключеным монитором... хотя судя по первому посту в этой теме, это с вами часто случается :)

NE_XT
NE_XT аватар
Offline
Зарегистрирован: 22.05.2012

Подниму темку,

Решил попробывать тоже самое, только простым касанием дисплея, нарисовал код. 

Только как-то он живет своей жизнью, переключает странички, но может задуматься, и еще чтобы заработал тач после прошивки , нужно передернуть питание, у всех так? Дисплей мне попался редкостной породы.

Укажите на ошибки.

#include <UTFT.h>
#include <ITDB02_Touch.h>


UTFT myGLCD(ITDB32S,A1,A2,A0,A3,A5);
ITDB02_Touch  myTouch(13,10,11,12,A4);

void clearScreen(){ 
            myGLCD.setColor(0, 0, 0);          
            myGLCD.fillRect(0, 2, 319, 238);
            myGLCD.setColor(0, 0, 0);
          }
    
void PageOne(){
myGLCD.fillScr (255,0,0);  
}

void PageTwo(){ 
myGLCD.fillScr(0,255,0); 
}  

void setup()
{   
  myGLCD.InitLCD();
  myGLCD.clrScr();
  myTouch.InitTouch();
  myTouch.setPrecision(PREC_MEDIUM);
  clearScreen();
}

void loop(){
  while (true)
  {while (myTouch.dataAvailable()){    
    PageOne();
  }
  {while (myTouch.dataAvailable()){     
    PageTwo();  
   }
  }
 }
}