Перейти к содержимому

Open

Фотография
* * * * * 17 Голосов

Аква-контроллер от Олега


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 7638

#621 MaxKr

MaxKr

    Новичок

  • Пользователи
  • Pip
  • Cообщений: 22
  • Откуда:Украина

Отправлено 17 Август 2013 - 00:23

Можно и так сделать.

Работоспособность не проверял.

Прикрепленные файлы


  • BARS это нравится

#622 NorkIn

NorkIn

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • Cообщений: 990
  • Меня зовут:Алексей
  • Откуда:Москва, САО

Отправлено 17 Август 2013 - 13:36

Можно и так сделать.

Работоспособность не проверял.

 

посмотрел файлики... круто! :)

только не очень понятно, почему идет днем провал по свечению? а потом снова пик - это такая задумка?


С уважением, Алексей

90х50х50


#623 mixzt

mixzt

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • Cообщений: 3 150
  • Меня зовут:Михаил
  • Откуда:Ивантеевка, МО

Отправлено 17 Август 2013 - 21:17

посмотрел файлики... круто! :)

только не очень понятно, почему идет днем провал по свечению? а потом снова пик - это такая задумка?

 

Автор писал, что данные от балды



#624 avp8853

avp8853

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • Cообщений: 146
  • Откуда:Пятигорск

Отправлено 17 Август 2013 - 21:31

Помогите заставить вентилятор крутится

for (int i=0; i<360; i++){        

        myGLCD.print(F("#"),270,26,i); } // вентелятор
так он крутится не вокруг своей оси а от крайней точки по оси х.


#625 oleg_il

oleg_il

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • Cообщений: 711
  • Откуда:Israel

Отправлено 18 Август 2013 - 00:30

Так и должно быть. В описании команды указанно что текст вращается относительно точки с координатами X, Y.

В твоем случае х=270, у=26. Поставь х. у в центр экрана.



#626 avp8853

avp8853

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • Cообщений: 146
  • Откуда:Пятигорск

Отправлено 18 Август 2013 - 15:42

Олег мне не нужно в центре экрана мне нужно в углу, и чтоб крутилась вокруг своей оси, оси z, а сейчас крутится вокруг оси х.

 

1) Вращение вокруг оси х

2d608c5151f903a2c9340f693944d0dd.png

2) Вращение вокруг оси у

2b188f86f91f6362a9628b4b39324cbf.png

3) Вращение вокруг оси z

eca8701707b6a1e3880aeb5802fe8483.png

 

Соответсвенно, умножив вектор, то есть координаты точки на эти матрицы мы получим новые координаты точки.

v - координаты начальные; M - матрица вращения; V - новые координаты;

for (int i = 1; i<=3; i++)
{
  for(int j = 1; j<=3; j++)
  {
     V[i]+=M[i][j] * v[j];
  }
}


Результат:

V[1] новая координата по Х
V[2] новая координата по У
V[3] новая координата по Z

только я пока не могу понять как это сделать.



#627 oleg_il

oleg_il

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • Cообщений: 711
  • Откуда:Israel

Отправлено 19 Август 2013 - 00:19

Пока до меня не доходит что ты хочешь получить.

У экрана две координаты х и у, откуда у тебя взялся Z???

Обьясни, что ты хочешь получить на экране в конечном результате, куда  эта функция пойдет?



#628 NorkIn

NorkIn

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • Cообщений: 990
  • Меня зовут:Алексей
  • Откуда:Москва, САО

Отправлено 19 Август 2013 - 01:24

Автор писал, что данные от балды

 

это я понял, но при вводе моих данных - на графике кривая идет с провалом в промежутке с 13 до 14...

наверное я чего-то не до конца понял :(


С уважением, Алексей

90х50х50


#629 avp8853

avp8853

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • Cообщений: 146
  • Откуда:Пятигорск

Отправлено 19 Август 2013 - 02:25

Пока до меня не доходит что ты хочешь получить.

У экрана две координаты х и у, откуда у тебя взялся Z???

Обьясни, что ты хочешь получить на экране в конечном результате, куда  эта функция пойдет?

У Вадима в скетче есть отображение на главном экране вентилятора, так вот вентилятор крутится не вокруг своей оси по оси х, а от начало координат отображения на экране по оси х. А ось z это середина картинки, так сказать её центр. И изображение должно крутится вокруг своей оси.  



#630 oleg_il

oleg_il

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • Cообщений: 711
  • Откуда:Israel

Отправлено 19 Август 2013 - 11:05

 

А ось z это середина картинки, так сказать её центр. И изображение должно крутится вокруг своей оси.  

А подпрограмма аналоговых часов со стрелками тебя не устроит, я так понимаю??  :)



#631 MaxKr

MaxKr

    Новичок

  • Пользователи
  • Pip
  • Cообщений: 22
  • Откуда:Украина

Отправлено 19 Август 2013 - 11:16

это я понял, но при вводе моих данных - на графике кривая идет с провалом в промежутке с 13 до 14...

наверное я чего-то не до конца понял :(

 

Проверил. Графики рисуют все четко с таблицы.

В таблице первый канал основной. Со второго по восьмой прописаны формулы зависимости от первого. Слева столбик с процентами. Это процентная зависимость от первого канала.

Формулы в первой таблице это для наглядности, можете поставить свои или вообще их убрать.



#632 avp8853

avp8853

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • Cообщений: 146
  • Откуда:Пятигорск

Отправлено 19 Август 2013 - 11:43

А подпрограмма аналоговых часов со стрелками тебя не устроит, я так понимаю??  :)

Там линии рисуются, а не картинка. Не знаю но по моему не подойдет,    



#633 oleg_il

oleg_il

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • Cообщений: 711
  • Откуда:Israel

Отправлено 19 Август 2013 - 15:32

Ну не знаю. Экспериментируй.

Но не надейся на плавную перерисовку, это тебе не комп.



#634 avp8853

avp8853

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • Cообщений: 146
  • Откуда:Пятигорск

Отправлено 19 Август 2013 - 18:00

Получилось

for (int i=0; i<360; i++){             

      float x1, y1;           
    x1 = 272 + (270 - 272) * cos(i) - (26 - 28) * sin(i);
         y1 = 28 + (26 - 28) * cos(i) + (270 - 272) * sin(i);
         
        myGLCD.print(F("#"),x1,y1); } // вентилятор
 
но картинка почему то двоится при остановке и как зациклить процесс я пока не знаю, подскажите кто знает????????????????????  


#635 avp8853

avp8853

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • Cообщений: 146
  • Откуда:Пятигорск

Отправлено 21 Август 2013 - 11:59

Так

for (int i=0; i<=360; i++){         

             if (i == 360) i = 0;    
              float x1, y1;     
         y1 = 28 + (26 - 28) * cos(i) + (269 - 271) * sin(i);
         x1 = 271 + (269 - 271) * cos(i) - (26 - 28) * sin(i);         
         myGLCD.print(F("#"),x1,y1); } // вентилятор
Картинка вращается постоянно, но тогда сенсор не активен, нельзя перейти с главного экрана в меню, подскажите в чем подвох?????????????????? 


#636 mixzt

mixzt

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • Cообщений: 3 150
  • Меня зовут:Михаил
  • Откуда:Ивантеевка, МО

Отправлено 21 Август 2013 - 12:13

 

Так

for (int i=0; i<=360; i++){         

             if (i == 360) i = 0;    
              float x1, y1;     
         y1 = 28 + (26 - 28) * cos(i) + (269 - 271) * sin(i);
         x1 = 271 + (269 - 271) * cos(i) - (26 - 28) * sin(i);         
         myGLCD.print(F("#"),x1,y1); } // вентилятор
Картинка вращается постоянно, но тогда сенсор не активен, нельзя перейти с главного экрана в меню, подскажите в чем подвох?????????????????? 

 

 

Потому что вы сделали бесконечный цикл. 



#637 avp8853

avp8853

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • Cообщений: 146
  • Откуда:Пятигорск

Отправлено 21 Август 2013 - 12:18

Ну, а как надо сделать, чтоб постоянно вращалась картинка??????????????? 



#638 mixzt

mixzt

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • Cообщений: 3 150
  • Меня зовут:Михаил
  • Откуда:Ивантеевка, МО

Отправлено 21 Август 2013 - 12:39

Ну, а как надо сделать, чтоб постоянно вращалась картинка??????????????? 

 

Выносить этот код в void loop()

 

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

if ((myTouch.dataAvailable()) && (screenSaverCounter>=setScreenSaverTimer))  //exit from screen saver
{  Exit_From_ScreenSaver();} 
   else 
               { if (myTouch.dataAvailable() && (screenSaverCounter < setScreenSaverTimer)) 
                 { processMyTouch();}
               }


#639 avp8853

avp8853

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • Cообщений: 146
  • Откуда:Пятигорск

Отправлено 21 Август 2013 - 12:55

Можно по подробнее, я не программист, поэтому не все сразу понимаю. 



#640 mixzt

mixzt

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • Cообщений: 3 150
  • Меня зовут:Михаил
  • Откуда:Ивантеевка, МО

Отправлено 21 Август 2013 - 13:15

Можно по подробнее, я не программист, поэтому не все сразу понимаю. 

 

В программах для ардуино есть основной цикл, это void loop()

 

В нем циклически делаются различные действия, как то к примеру, опрос датчиков, опрос получения новых данных от тача, изменения каналов света, в зависимости от времени.

 

То есть, код, который выполнился в loop, начинает выполняться снова с начала.

 

Если вы хотите, чтобы у вас была анимация, соответственно у вас есть два пути:

1) Либо вы делаете цикл рисования в loop, с обработкой всех остальных действий(тач, таймеры, и прочее)

2) либо переделываете свой код в процедуру, чтобы каждый запуск этой процедуры рисовал вашу стрелку уже на следующей позиции. И вызов данной процедуры вставляете в loop наравне с прочими процедурами(таймеры, леды, т.д)






Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных

Ветка управляется: