Страница 2 из 5 ПерваяПервая 12345 ПоследняяПоследняя
Показано с 11 по 20 из 42

Тема: Processing 1.0.9

  1. #11
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,379
    Вес репутации
    10

    По умолчанию Re: Processing 1.0.9

    Вот пример с кнопкой, работает с кодом для Arduino выложеным в первом примере.
    Вложения Вложения
    Последний раз редактировалось Chip; 26.01.2010 в 22:29.

  2. #12
    Продвинутый Аватар для Pinin
    Регистрация
    04.01.2009
    Возраст
    59
    Сообщений
    213
    Вес репутации
    231

    По умолчанию Re: Processing 1.0.9

    2 Chip

    Мысль понятна - респект! Я, не дожидаючись, слабал целых пять кнопок (не таких красивых, но с примерным функционалом: курсор на кнопке - меняем цвет ее или фона, т.е. чего-то, да делаем).


    PHP код:
    Buttons
     * 
     * 
    Click on one of the shapes to change
     
    the background colorThis example
     
    demonstates a class for buttons.
     */

    color currentcolor;


    RectButton rect1rect2rect3rect4rect5;

    boolean locked false;

    void setup()
    {
      
    size(800600);
      
    smooth();

      
    color baseColor color(2552552552);
      
    currentcolor baseColor;
      
    color buttoncolor color(255);
      
    color highlight color(2550,0);
      
      
    // Define and create rectangle button
      
    buttoncolor color(2550,0);
      
    highlight color(00255); 
      
    rect1 = new RectButton(58538714086buttoncolorhighlight);

      
    // Define and create rectangle button
      
    buttoncolor color(00255);
      
    highlight color(0); 
      
    rect2 = new RectButton(43938714086buttoncolorhighlight);
      
      
    // Define and create rectangle button
      
    buttoncolor color(102);
      
    highlight color(51); 
      
    rect3 = new RectButton(28938714086buttoncolorhighlight);
      
      
    // Define and create rectangle button
      
    buttoncolor color(102);
      
    highlight color(51); 
      
    rect4 = new RectButton(14638714086buttoncolorhighlight);
      
      
    // Define and create rectangle button
      
    buttoncolor color(102);
      
    highlight color(51); 
      
    rect5 = new RectButton(438714086buttoncolorhighlight);
    }

    void draw()
    {
      
    background(currentcolor);
      
    stroke(255);
      
    update(mouseXmouseY);
      
    rect1.display();
      
    rect2.display();
      
    rect3.display();
      
    rect4.display();
      
    rect5.display();
      
    }

    void update(int xint y)
    {
      if(
    locked == false) {
        
    rect1.update();
        
    rect2.update();
        
    rect3.update();
        
    rect4.update();
        
    rect5.update();
        
      } 
      else {
        
    locked false;
      }

      if(
    mousePressed) {
            if(
    rect1.pressed()) {
          
    currentcolor rect1.basecolor;
        } 
        else if(
    rect2.pressed()) {
          
    currentcolor rect2.basecolor;
        }
        else if(
    rect3.pressed()) {
          
    currentcolor rect2.basecolor;
        }
        else if(
    rect4.pressed()) {
          
    currentcolor rect2.basecolor;
        }
        else if(
    rect5.pressed()) {
          
    currentcolor rect2.basecolor;
        }
      }
    }


    class 
    Button
    {
      
    int xy;
      
    int wh;
      
    color basecolorhighlightcolor;
      
    color currentcolor;
      
    boolean over false;
      
    boolean pressed false;   

      
    void update() 
      {
        if(
    over()) {
          
    currentcolor highlightcolor;
        } 
        else {
          
    currentcolor basecolor;
        }
      }

      
    boolean pressed() 
      {
        if(
    over) {
          
    locked true;
          return 
    true;
        } 
        else {
          
    locked false;
          return 
    false;
        }    
      }

      
    boolean over() 
      { 
        return 
    true
      }

      
    boolean overRect(int xint yint widthint height
      {
        if (
    mouseX >= && mouseX <= x+width && 
          
    mouseY >= && mouseY <= y+height) {
          return 
    true;
        } 
        else {
          return 
    false;
        }
      }
      
    }



    class 
    RectButton extends Button
    {
      
    RectButton(int ixint iyint iwint ihcolor icolorcolor ihighlight
      {
        
    ix;
        
    iy;
        
    iw;
        
    ih;
        
    basecolor icolor;
        
    highlightcolor ihighlight;
        
    currentcolor basecolor;
      }

      
    boolean over() 
      {
        if( 
    overRect(xywh) ) {
          
    over true;
          return 
    true;
        } 
        else {
          
    over false;
          return 
    false;
        }
      }

      
    void display() 
      {
        
    stroke(255);
        
    fill(currentcolor);
        
    rect(xywh);
      }

    В твоем примере в порт шлется одна единица (т.е. вообще говоря - в никуда).

    А если стоит задача послать пакет байтов (те самые FF 16 01) - т.е. 16 устройств а-ля реле (вкл/выкл)?


    P.S. А вообще, суть проекта здесь
    Последний раз редактировалось Pinin; 26.01.2010 в 20:46.

  3. #13
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,379
    Вес репутации
    10

    По умолчанию Re: Processing 1.0.9

    Извиняюсь пример выложил с ошибкой , не отражалось нажатие кнопки.
    Перезалил http://www.compcar.ru/forum/showpost...7&postcount=11

    При желании можно любое количество кнопок сделать на базе этого примера.
    Последний раз редактировалось CarMonitor.ru; 27.01.2010 в 01:56.

  4. #14
    Продвинутый Аватар для Pinin
    Регистрация
    04.01.2009
    Возраст
    59
    Сообщений
    213
    Вес репутации
    231

    По умолчанию Re: Processing 1.0.9

    "Перечитывал пейджер. Много думал..."

    Ладно, спасибо! Попробую дотумкать сам

  5. #15
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,379
    Вес репутации
    10

    По умолчанию Re: Processing 1.0.9

    Держи код для двух кнопок, на его базе добавить еще несколько кнопок не составит труда. Изображения кнопок должны лежать в папке со скетчем
    PHP код:
    import processing.serial.*;  
    Serial port
    int x,y,x1,y1,w,h;
    boolean stat0,stat1;
    PImage bs,dw;

    void setup()
    {
      
    port = new Serial(this"COM7"115200); // Прописываем COM-порт на котором у вас сидит Carduino
      
      
    size(290200);           //размер окна
      
    background(608090);   //цвет окна
      
      
    bs loadImage("base.png"); //загрузить изображение кнопки
      
    dw loadImage("down.png"); //загрузить изображение нажатой кнопки
      
    bs.width;           // Размер кнопки по горизонтали
      
    bs.height;         // Размер кнопки по вертикали
      
    20;      // Х начальная координата кнопки 
      
    20;     // y начальная координата кнопки
      
    x1x;
      
    y1h+40
      
    image(bsxy);      // Нарисовать в окне первую кнопку
      
    image(bsx1y1);      // Нарисовать в окне вторую кнопку
      
      
    port.write('1');
      
    port.write('0');
    }

    void draw()
    {  
      if( 
    mousePressed)
       {  
         if ( 
    mouseX >= && mouseX <= && mouseY >= && mouseY <= h//отслеживаем область курсора 
         
    {  
          
    stat0=!stat0;              
          if (
    stat0) {port.write('1'); image(dwx+1y+1); } // послать =1 в Carduino нарисовать нажатую кноку  
          
    if (!stat0) {port.write('0'); image(bsxy);}      //   послать =0 в Carduino нарисовать кноку 
         
    }
          if (
    mouseX >= x1 && mouseX <= x1 && mouseY >= y1 && mouseY <= y1 h//отслеживаем область курсора
         
    {  
          
    stat1=!stat1;              
          if (
    stat1) {port.write('3'); image(dwx1+1y1+1); } // послать =1 в Carduino нарисовать нажатую кноку  
          
    if (!stat1) {port.write('2'); image(bsx1y1);}      //   послать =0 в Carduino нарисовать кноку 
         

         
    delay(200); 
       }  

    Последний раз редактировалось Chip; 27.01.2010 в 14:05.

  6. #16
    Продвинутый Аватар для Pinin
    Регистрация
    04.01.2009
    Возраст
    59
    Сообщений
    213
    Вес репутации
    231

    По умолчанию Re: Processing 1.0.9

    Спасибо! Я тут на досуге уже кое-чего слабал сам, но это вспоможение большое

    Я так понимаю, что запись port.write('3'); допустима и означает, что в ардуине надо для этого прописать:
    if (val == '3') digitalWrite...
    ?

  7. #17
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,379
    Вес репутации
    10

    По умолчанию Re: Processing 1.0.9

    Все верно

  8. #18
    Продвинутый Аватар для Pinin
    Регистрация
    04.01.2009
    Возраст
    59
    Сообщений
    213
    Вес репутации
    231

    По умолчанию Re: Processing 1.0.9

    Набросал черновик на 5 кнопок (задействованы пока только 2):

    PHP код:
    import processing.serial.*;  
    Serial port
    int x,y,x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,w,h;
    boolean stat0,stat1;
    PImage bs,dw;

    void setup()
    {
      
    port = new Serial(this"COM5"115200); // Прописываем COM-порт на котором у вас сидит Carduino
      
      
    size(800500);           //размер окна
      
    background(608090);   //цвет окна
      
      
    bs loadImage("base.png"); //загрузить изображение кнопки
      
    dw loadImage("down.png"); //загрузить изображение нажатой кнопки
      
    bs.width;           // Размер кнопки по горизонтали
      
    bs.height;         // Размер кнопки по вертикали
      
    20;      // Х начальная координата кнопки 
      
    450;     // y начальная координата кнопки
      
    x1w+30;
      
    y1450
      
    x2x1+w+10;
      
    y2450;
      
    x3x2+w+10;
      
    y3450;
      
    x420;
      
    y4400;
      
    x5w+30;
      
    y5400;
      
    image(bsxy);      // Нарисовать в окне 1 кнопку
      
    image(bsx1y1);      // Нарисовать в окне 2 кнопку
      
    image(bsx2y2);      // Нарисовать в окне 3 кнопку
      
    image(bsx3y3);      // Нарисовать в окне 3 кнопку
      
    image(bsx4y4);      // Нарисовать в окне 4 кнопку
      
    image(bsx5y5);      // Нарисовать в окне 5 кнопку
      
    }

    void draw()
    {  
      if( 
    mousePressed)
       {  
         if ( 
    mouseX >= && mouseX <= && mouseY >= && mouseY <= h)
         {  
          
    stat0=!stat0;              
          if (
    stat0) {port.write('1'); image(dwx+1y+1); } // послать =1 в Carduino нарисовать нажатую кноку
          
          
    if (!stat0) {port.write('0'); image(bsxy);}      //   послать =0 в Carduino нарисовать кноку 
         
    }
          if (
    mouseX >= x1 && mouseX <= x1 && mouseY >= y1 && mouseY <= y1 h)
         {  
          
    stat1=!stat1;              
          if (
    stat1) {port.write('3'); image(dwx1+1y1+1); } // послать =3 в Carduino нарисовать нажатую кноку
         
          
    if (!stat1) {port.write('2'); image(bsx1y1);}      //   послать =2 в Carduino нарисовать кноку 
         

         
    delay(200); 
       }  

    На ардуине залито:

    PHP код:
    int outputPin1 9;                //здесь храним номер контакта 
    int outputPin2 11;
    int val;                           //здесь будет храниться принятый символ 

    void setup() 

      
    Serial.begin(115200);              //установка порта 
      
    pinMode(outputPin1OUTPUT);      //устанавливаем 13 контакт в режим вывода 
      
    pinMode(outputPin2OUTPUT);


    void loop() 

      if (
    Serial.available() > 2)          //если есть принятый символ, 
      
    {
        
    val Serial.read();            //  то читаем его и сохраняем в val 
        
    if (val == '1'digitalWrite(outputPin1HIGH);// если=1 то включаем светодиод 
                        
        
    if (val == '0'digitalWrite(outputPin1LOW); // если=0 то выключаем светодиод
       
        
    if (val == '3'digitalWrite(outputPin2HIGH);// если=1 то включаем светодиод 
      
        
    if (val == '2'digitalWrite(outputPin2LOW); // если=0 то выключаем светодиод 
    Два непонятных косяка:

    При первом запуске проекта в процессинге на первое нажатие виртуальной кнопки - реакции никакой. Реагирует только на последующие. Причем тоже странно: команда посылается на один светодиод - загорается второй. Если после нескольких последовательных включений/выключений одного светодиода нажать на кнопку включения второго - сначала загорается предыдущий (не от своей кнопки!), и только потом - управляемый.

    Вроде бы по листингу таких смещений быть не должно - но их есть...

    Второй косяк - при экспорте папка application.windows с экзешником создается, но тот не запускается:
    "Не удается найти javaw.exe"...

    И почему-то не прошла запись команды в виде

    PHP код:
    if (stat1) {port.write('0101'); ... 
    - хотя так было бы логичнее

    __________________________________________________ ____________

    БЛИН, какой же я тупой! -

    PHP код:
     if (Serial.available() > 2
    - первый вопрос снимается...
    Последний раз редактировалось Pinin; 27.01.2010 в 15:42.

  9. #19
    Пользователь
    Регистрация
    27.09.2009
    Возраст
    37
    Сообщений
    26
    Вес репутации
    191

    По умолчанию Re: Processing 1.0.9

    только хотел сказать про строчку if (Serial.available() > 2) , но уже и сам разобрался,

    PHP код:
    if (stat1) {port.write('0101'); ... 
    пиши отдельно каджую цифру
    PHP код:
    if (stat1) {port.write('0');if (stat1) {port.write('0');port.write('1');port.write('0');port.write('1'); ... 
    либо попробуй так
    PHP код:
    if (stat1) {port.write(0101); 
    Последний раз редактировалось AlexNS; 27.01.2010 в 17:21.

  10. #20
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,379
    Вес репутации
    10

    По умолчанию Re: Processing 1.0.9

    if (stat1) {port.write('0101'); ...
    Еще есть алфавил , так что можно использовать символы "A","В","С" и т.д.

    Второй косяк - при экспорте папка application.windows с экзешником создается, но тот не запускается:
    "Не удается найти javaw.exe"...
    Нужно использовать export application
    У меня создает экзешник

    При первом запуске проекта в процессинге на первое нажатие виртуальной кнопки - реакции никакой. Реагирует только на последующие.
    Не нужно было две строчки в setup удалять или ты думал я их туда просто так вставил?
    Последний раз редактировалось Chip; 27.01.2010 в 18:46.

Страница 2 из 5 ПерваяПервая 12345 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •