Четверг, 28.03.2024, 20:59
Вы вошли как Гость | Группа "Гости"Приветствую Вас Гость | RSS
Главная | работа с сенсором - Форум | Мой профиль | Регистрация | Выход | Вход
Обитель RC-инженера
Форма входа
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: ВитГо  
Форум » Разработка электронных устройств » Разрабатываю ! » работа с сенсором (STM32F4+сенсор)
работа с сенсором
vladimersДата: Понедельник, 03.02.2014, 23:42 | Сообщение # 1
Сержант
Группа: Проверенные
Сообщений: 45
Репутация: 0
Статус: Offline
здравствуйте ,прошу помощи.
имеется STM32F4+SSD1963
перерыл кучу примеров но так и ненашол оптимального и простого.
надо какможно простой практический пример реализацыии сенсорной кнопки .
например имеются кординаты кнопки - ( 669,144,781,216,0xF800);
драйвер тайчпада имеет команды -
TouchReadXY -считывание кординат
isTouch- наличие касания,и TPReadX ,TPReadY
тоесть при совпадении менялся цвет кнопки ,при отпускании -вернулся.
опыта маловато в програмировании ,и некак правельно неполучается написать - либо вообще нереагирует на нажатие-либо реагирует на любое нажатие по сенсору и меняет цвет кнопки.
автокалибровки нет ,всёравно её некуда сохранять пока ещо. просто выводил кординаты в раёне нарисованной кнопки и в будущем планировал задавать кординаты с небольшой поправкой . правда незнаю прокатит такое или нет.
зарание спасибо.
(драйвер тача )
Прикрепления: TouchScreen.rar (3.3 Kb)
 
ВитГоДата: Вторник, 04.02.2014, 04:05 | Сообщение # 2
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
калибровка для сенсора должна быть обязательно !!

контроллер тачпада какой ?


Виталий (аka ВитГо)
 
vladimersДата: Вторник, 04.02.2014, 04:49 | Сообщение # 3
Сержант
Группа: Проверенные
Сообщений: 45
Репутация: 0
Статус: Offline
контролер XPT2046 но вроде как и с другими драверами на 7846 совместим .
в Ф4 вроде некуда пока записывать калебровочные данные . причем сенсор работает . ресует точки .
и драйвера пробывал разные 2-3 вида .
у меня просто опыта правельно нехватает написать .потому может и несрабатывает кнопка.
Код
SSD1963_FillRect ( 669,144,781,216,0xF800);

              {
                 if (TouchReadXY(&x,&y,true)){
                  isTouch ( );
                   x=TPReadX ( );
                   y=TPReadY ( );
                  if (x>670 && x<215 && y>145 && y <215 ){
                   SSD1963_FillRect ( 669,144,781,216,0x07FF);

                   }else{SSD1963_FillRect ( 669,144,781,216,0xF800);}

писал и типа так и чуть посложнее .
но кпримеру если кнопка несовсем попадает ,должнож както сработать пусть рядом нажатие .
так неразу ненаодном вареанте у меня несработало .
почему и решил спросить что возможно есть простое решение написания кнопки в примере или куске исходника.
 
ВитГоДата: Вторник, 04.02.2014, 18:02 | Сообщение # 4
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
вот мой код.. собрал из разных примеров
Прикрепления: SSD1289.zip (163.2 Kb)


Виталий (аka ВитГо)
 
vladimersДата: Вторник, 04.02.2014, 18:34 | Сообщение # 5
Сержант
Группа: Проверенные
Сообщений: 45
Репутация: 0
Статус: Offline
спс. я видел его на форуме. и пробывал ранее для проверки своего тайча на работоспособность .
впринцепи прорисовка точек идёт такаяж как и у меня , но именно вот как прописать работу кнопки правельно ?


Сообщение отредактировал vladimers - Вторник, 04.02.2014, 19:34
 
ВитГоДата: Вторник, 04.02.2014, 21:18 | Сообщение # 6
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
я не совсем понимаю вопрос..

определяем по координатам от х0 до х1 и от у0 до у1...
просто проверяем на вхождение координат...


Виталий (аka ВитГо)
 
vladimersДата: Вторник, 04.02.2014, 22:03 | Сообщение # 7
Сержант
Группа: Проверенные
Сообщений: 45
Репутация: 0
Статус: Offline
я использовал вывод и отображения пример кординат.
нажимая на отведённое месть под кнопку-записал на черновик отображаемые кординаты от х0 до х1 и от у0 до у1 (тоесть получается реальные кординаты какие надо чтоб попало на кнопку ?)
и вот тут какраз мне надо пример написания кода как их использовать .
 
SergiДата: Среда, 05.02.2014, 00:09 | Сообщение # 8
Подполковник
Группа: Проверенные
Сообщений: 540
Репутация: 55
Статус: Offline
У меня экран разделен на прямоугольники. 8х8. Соответственно одна кнопка это Хмакс/8 , Умакс/8. Если Х разделить на ширину кнопки (Хмакс/8) получим номер кнопки в ряду, также и с У.
В итоге получаем кнопки от 11 до 88. Дальше простой IF по совпадению.
Если постараться и провести калибровку, то срабатывания получатся точные вплоть до пикселя у границы. Но у меня зазор 4 пикселя убирают ложные срабатывания.


Сообщение отредактировал Sergi - Среда, 05.02.2014, 00:14
 
vladimersДата: Среда, 05.02.2014, 04:26 | Сообщение # 9
Сержант
Группа: Проверенные
Сообщений: 45
Репутация: 0
Статус: Offline
вот например пишу так
Код
void buton(){

   uint16_t x, y;

      SSD1963_FillRect ( 669,144,781,216,0x07FF);// ресунок кнопки

      {// ждать нажатия
    if ( isTouch ( ) );
    TouchReadXY ( &x, &y, true );
             x=TPReadX ( );
          y=TPReadY ( );
         if (x>670 && x<215 && y>145 && y <215 )

         {SSD1963_FillRect ( 669,144,781,216,0xF800);} // закрасить в красный

         else {SSD1963_FillRect ( 669,144,781,216,0x07FF);}// вернули цвет начальный

   }
}

но на жатие вообще нереагирует ,ну если несовпала кпримеру кордината на кнопке ,но рядомто должно както среагировать?
или ошибка в написании ?
 
ВитГоДата: Среда, 05.02.2014, 05:43 | Сообщение # 10
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
c таким кодом как бы можно и не заметить изменения цвета...
у тебя логика программы - если генерируется нажатие - рисуем красным, а как только не генерируется - рисуем другим цветом..

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

сделай сначала без возврата к начальному цвету (убери else).. и посмотри что получилось...


Виталий (аka ВитГо)
 
vladimersДата: Четверг, 13.02.2014, 21:49 | Сообщение # 11
Сержант
Группа: Проверенные
Сообщений: 45
Репутация: 0
Статус: Offline
пробывал убрать,никакой реакцыии на нажатие .
попробывал даже чтоб была прорисовка пикселей и за ним код кнопки .
так точки ресует по всему экрану и поверх кнопок - но так и несработало ниразу ,ведь поидее долженже сменить цвет .
такое ущущение что какойто нюанс я неучитую по неопытности.

может требуется конвертор какой ещо?
( почему и ищу примеры ,куски кода чтоб хоть посмотреть как правельно вообще прописуется всёэто)

почти заработало ,но при нажиме кнопки мигает она при таком коде
Код
#include <stdint.h>
#include <stdbool.h>
#include <string.h>
#include <stdio.h>
#include <math.h>

#include "stm32f4xx.h"
#include "stm32f4xx_spi.h"
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_gpio.h"
#include "SSD1963.h"
#include "touch_7846.h"

struct Box {
    uint16_t x_start;
    uint16_t y_start;
    uint16_t x_end;
    uint16_t y_end;
};

void buton(){
struct Box button; //расположение кнопки в пикселях на экране
button.x_start = 669;
button.y_start = 144;
button.x_end = 781;
button.y_end = 216;
{

  uint16_t x, y, aX, aY;

   float fTemp;

       TouchInit ( );
       TouchSetScreenSize ( 800, 480 );

      SSD1963_FillRect ( 669,144,781,216,0x07FF);// ресунок кнопки

      {// ждать нажатия
        if ( isTouch ( )  );
        {

              // X
              aX = TPReadY ( );
              fTemp = aX * 800.0F / 4096.0F;
              x = fTemp;
              if ( x > 799 )
               x = 799;

              // Y
              aY = TPReadX ( );
              fTemp = aY * 480.0F / 4096.0F;
              y = fTemp;

               SSD1963_PutPixel (  x, y, 0xFFFF );

             if ((x >= button.x_start) && (x <= button.x_end) && (y >= button.y_start) && (y <= button.y_end))

          // {  if (x>670 && x<215 && y>145 && y <215 )

         {SSD1963_FillRect ( 669,144,781,216,0xF800);} // закрасить в красный

         else {SSD1963_FillRect ( 669,144,781,216,0x07FF);}// вернули цвет начальный

   }
      }

  }

}



ну уже сдвиги есть ,причем всё реагирует именно на кнопке ,осталось убрать мигание и както правельно определить её на будущее .

Добавлено (13.02.2014, 21:49)
---------------------------------------------
впринцепи с кнопками немного разобрался (поверхностно правда) но добился что чётко срабатываю по нажатию.
вкл/выкл шим и меняют его частоту.

но возникла проблемка другая-
могут уживаться тойчпад и SST25F016 если оба висят на SPI ? как разделить их ?
(возможно есть у кого решение как их подружить ).
и как организовать прерывание в сенсорных кнопках ?
зарание спасибо.

Сообщение отредактировал vladimers - Среда, 05.02.2014, 21:13
 
ВитГоДата: Воскресенье, 16.02.2014, 10:36 | Сообщение # 12
Полковник
Группа: Администраторы
Сообщений: 2422
Репутация: 20
Статус: Offline
для того чтобы было прерывание по нажатию на сенсор - смотрите выходные линии : иногда среди них есть сигнал на котором появляется низкий уровень при нажатии на сенсор (как раз для генерации прерывания)
http://easyelectronics.ru/arm-uchebnyj-kurs-vneshnie-preryvaniya.html

по поводу разделения SPI - выбор того или иного устройства делайте линией CS


Виталий (аka ВитГо)
 
HrustikДата: Вторник, 11.03.2014, 20:46 | Сообщение # 13
Рядовой
Группа: Пользователи
Сообщений: 1
Репутация: 0
Статус: Offline
Ну что, разобрался? Нужна еще помощь?
 
vladimersДата: Вторник, 11.03.2014, 22:25 | Сообщение # 14
Сержант
Группа: Проверенные
Сообщений: 45
Репутация: 0
Статус: Offline
спасибо.
всё заработало. пришлось сменить правда драйвер тайчпада (конфликтовали в паре с драйвером флеш микросхемы ).
вдобавок на сайте стм32 были приведены примеры использования sst25 . вот они и внесли в какойто степени дополнительно проблему .
(почемуто если прописую перед командой чтения или записи - команду типа -вывести на экран размер флеши или её ID - то непроисходит потом записи/чтения невкакую. стёр лишнее .оставил чисто запись/чтение -и всё заработало).
единственное осталось попозже убрать "дребезг" кнопок тайчпада . сам тайчпад китайский сомнительного качества (родной доблестная укрпочта разбила вдребезги ) вот и бывает сработка тайча на определённые точки .тоесть бывает сработка в 2 точки стабильные на дисплее иногда.


Сообщение отредактировал vladimers - Вторник, 11.03.2014, 22:26
 
Форум » Разработка электронных устройств » Разрабатываю ! » работа с сенсором (STM32F4+сенсор)
  • Страница 1 из 1
  • 1
Поиск:


Copyright MyCorp © 2024
Сделать бесплатный сайт с uCoz