Я тупой и не могу ничего скрафтить на ардуине, помогите, плиз.

SolJa
Offline
Зарегистрирован: 09.11.2016

Добрый день. Я начал изучать ардуины, но я очень глуп и не понимаю ничерта, однако не теряю надежды.

Возникла следущая проблема: при подключении ТФТ дисплея ILI9163C к Arduino Mega 2560 не происходит ничего.

Подключаю по такой распиновке:

LED      (BACKLIGHT)   3.3v
SCK      (SCLK)      pin 13
SDA      (MOSI)      pin 11
A0      (DC)         pin 9
RESET   (RESET)      pin 8
CS      (CS)         pin 10
GND      (GND)      GND
VCC      (VCC)      5v

#include <SPI.h>
#include <Adafruit_GFX.h>
#include <TFT_ILI9163C.h>

// Color definitions
#define	BLACK   0x0000
#define	BLUE    0x001F
#define	RED     0xF800
#define	GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0  
#define WHITE   0xFFFF

/*
Teensy3.x and Arduino's
You are using 4 wire SPI here, so:
 MOSI:  11//Teensy3.x/Arduino UNO (for MEGA/DUE refere to arduino site)
 MISO:  12//Teensy3.x/Arduino UNO (for MEGA/DUE refere to arduino site)
 SCK:   13//Teensy3.x/Arduino UNO (for MEGA/DUE refere to arduino site)
 the rest of pin below:
 */
#define __CS 10
#define __DC 9
/*
Teensy 3.x can use: 2,6,9,10,15,20,21,22,23
Arduino's 8 bit: any
DUE: check arduino site
If you do not use reset, tie it to +3V3
*/


TFT_ILI9163C tft = TFT_ILI9163C(__CS,8, __DC);

uint16_t ccenterx,ccentery;//center x,y of the clock
const uint16_t cradius = 63;//radius of the clock
const float scosConst = 0.0174532925;
float sx = 0, sy = 1, mx = 1, my = 0, hx = -1, hy = 0;
float sdeg=0, mdeg=0, hdeg=0;
uint16_t osx,osy,omx,omy,ohx,ohy;
uint16_t x0 = 0, x1 = 0, yy0 = 0, yy1 = 0;
uint32_t targetTime = 0;// for next 1 second timeout
uint8_t hh,mm,ss;  //containers for current time


void drawClockFace(){
  tft.fillCircle(ccenterx, ccentery, cradius, BLUE);
  tft.fillCircle(ccenterx, ccentery, cradius-4, BLACK);
  // Draw 12 lines
  for(int i = 0; i<360; i+= 30) {
    sx = cos((i-90)*scosConst);
    sy = sin((i-90)*scosConst);
    x0 = sx*(cradius-4)+ccenterx;
    yy0 = sy*(cradius-4)+ccentery;
    x1 = sx*(cradius-11)+ccenterx;
    yy1 = sy*(cradius-11)+ccentery;
    tft.drawLine(x0, yy0, x1, yy1, BLUE);
  }
}

static uint8_t conv2d(const char* p) {
  uint8_t v = 0;
  if ('0' <= *p && *p <= '9') v = *p - '0';
  return 10 * v + *++p - '0';
}

void setup(void) {
  tft.begin();

  tft.setTextColor(WHITE, BLACK);
  ccenterx = tft.width()/2;
  ccentery = tft.height()/2;
  osx = ccenterx;
  osy = ccentery;
  omx = ccenterx;
  omy = ccentery;
  ohx = ccenterx;
  ohy = ccentery;
  drawClockFace();// Draw clock face
  //get current time from compiler
  hh = conv2d(__TIME__);
  mm = conv2d(__TIME__+3);
  ss = conv2d(__TIME__+6);
  targetTime = millis() + 1000; 
}

void drawClockHands(uint8_t h,uint8_t m,uint8_t s){
  // Pre-compute hand degrees, x & y coords for a fast screen update
  sdeg = s * 6;                  // 0-59 -> 0-354
  mdeg = m * 6 + sdeg * 0.01666667;  // 0-59 -> 0-360 - includes seconds
  hdeg = h * 30 + mdeg * 0.0833333;  // 0-11 -> 0-360 - includes minutes and seconds
  hx = cos((hdeg-90)*scosConst);    
  hy = sin((hdeg-90)*scosConst);
  mx = cos((mdeg-90)*scosConst);    
  my = sin((mdeg-90)*scosConst);
  sx = cos((sdeg-90)*scosConst);    
  sy = sin((sdeg-90)*scosConst);

  // Erase just old hand positions
  tft.drawLine(ohx, ohy, ccenterx+1, ccentery+1, BLACK);  
  tft.drawLine(omx, omy, ccenterx+1, ccentery+1, BLACK);  
  tft.drawLine(osx, osy, ccenterx+1, ccentery+1, BLACK);
  // Draw new hand positions  
  tft.drawLine(hx*(cradius-28)+ccenterx+1, hy*(cradius-28)+ccentery+1, ccenterx+1, ccentery+1, WHITE);
  tft.drawLine(mx*(cradius-17)+ccenterx+1, my*(cradius-17)+ccentery+1, ccenterx+1, ccentery+1, WHITE);
  tft.drawLine(sx*(cradius-14)+ccenterx+1, sy*(cradius-14)+ccentery+1, ccenterx+1, ccentery+1, RED);
  tft.fillCircle(ccenterx+1, ccentery+1, 3, RED);

  // Update old x&y coords
  osx = sx*(cradius-14)+ccenterx+1;
  osy = sy*(cradius-14)+ccentery+1;
  omx = mx*(cradius-17)+ccenterx+1;
  omy = my*(cradius-17)+ccentery+1;
  ohx = hx*(cradius-28)+ccenterx+1;
  ohy = hy*(cradius-28)+ccentery+1;
}


void loop() {
  if (targetTime < millis()) {
    targetTime = millis()+1000;
    ss++;
    if (ss == 60) {
      ss = 0;
      mm++;
      if(mm > 59) {
        mm = 0;
        hh++;
        if (hh > 23) hh = 0;
      }
    }
    drawClockHands(hh,mm,ss);

  }
}

При компиляции начинает ругаться на строчку

tft.fillCircle(ccenterx, ccentery, cradius, BLUE);

Что происходит я не понимаю. Подскажите, пожалуйста, что делать. И, если не сложно, где почитать описание распиновки ардуино мега на русском языке. Скорее всего она где-то есть, но, поскольку я туповат, не смог её найти.

Заранее большое спасибо за помощь.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

здесь распиновка

Этот скетч попробуйте

Дисплей другой но будет понятно, что неправильно

а для меги тут есть http://arduino.ru/forum/apparatnye-voprosy/displei-na-ili9341?page=1

SolJa
Offline
Зарегистрирован: 09.11.2016

Большое спасибо, сейчас буду пробовать.

SolJa
Offline
Зарегистрирован: 09.11.2016

Вот какую ошибку показывает.
error: 'ILI9163C' was not declared in this scope

Я правильно понимаю, что вот этой строчкой:

UTFT myGLCD(ILI9341_16,38,39,40,41);  // прописываем сюда дисплей сэндвича

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

И если да, то какие это выходы экранчика? И что значат названия лапок SCK, SDA?

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

Logik
Offline
Зарегистрирован: 05.08.2014

SolJa пишет:

Добрый день. Я начал изучать ардуины, но я очень глуп и не понимаю ничерта, однако не теряю надежды.

Та ладно, разслабтесь. Живут же люди и без этого. Недано - так недано. У всех есть пробелы. Я например штукатурить не могу, не получается и все.  Найдите себя в чем другом. А если уж решили попробовать, так начинайте с чего проще чем экран. Ведь получается, как ученик автошколы, вместо катания с инструктором сразу на ралийную гонку стартуете, и просите - "хэлпми", как дойти до финиша? Да, можна дотянуть до финиша Вас на буксире, но Вам то что от этого будет? Ну конечно, если вы не студент и вам не "абысдать".

ПС. Ну допустим, есть вопрос "И что значат названия лапок SCK, SDA?" А чего не загуглить эти SCK, SDA? Ответ сразуже будет. И так на будущее.

SolJa
Offline
Зарегистрирован: 09.11.2016

Да, пожалуй вы правы. Пойду погуглю.

Однако вопрос об ошибке остается актуален.

SolJa
Offline
Зарегистрирован: 09.11.2016

Так, эту проблему я решил. На програмную часть больше не ругается. Однако экран только светится и не показывает ровным счетом НИЧЕГО, кроме подсветки.

Распиновка теперь такая:

LED      (BACKLIGHT)   3.3v
SCK      (SCLK)      pin 52
SDA      (MOSI)      pin 51
A0      (DC)         pin 9
RESET   (RESET)      pin 8
CS      (CS)         pin 10
GND      (GND)      GND
VCC      (VCC)      5v

Скетч выглядит вот так

#include <SPI.h>
#include <Adafruit_GFX.h>
#include <TFT_ILI9163C.h>

// Color definitions
#define	BLACK   0x0000
#define	BLUE    0x001F
#define	RED     0xF800
#define	GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0  
#define WHITE   0xFFFF

/*
Teensy3.x and Arduino's
You are using 4 wire SPI here, so:
 MOSI:  11//Teensy3.x/Arduino UNO (for MEGA/DUE refere to arduino site)
 MISO:  12//Teensy3.x/Arduino UNO (for MEGA/DUE refere to arduino site)
 SCK:   13//Teensy3.x/Arduino UNO (for MEGA/DUE refere to arduino site)
 the rest of pin below:
 */
#define __CS 10
#define __DC 9
/*
Teensy 3.x can use: 2,6,9,10,15,20,21,22,23
Arduino's 8 bit: any
DUE: check arduino site
If you do not use reset, tie it to +3V3
*/


TFT_ILI9163C tft = TFT_ILI9163C(__CS, 8, __DC);

uint16_t ccenterx,ccentery;//center x,y of the clock
const uint16_t cradius = 63;//radius of the clock
const float scosConst = 0.0174532925;
float sx = 0, sy = 1, mx = 1, my = 0, hx = -1, hy = 0;
float sdeg=0, mdeg=0, hdeg=0;
uint16_t osx,osy,omx,omy,ohx,ohy;
uint16_t x0 = 0, x1 = 0, yy0 = 0, yy1 = 0;
uint32_t targetTime = 0;// for next 1 second timeout
uint8_t hh,mm,ss;  //containers for current time


void drawClockFace(){
  tft.fillCircle(ccenterx, ccentery, cradius, BLUE);
  tft.fillCircle(ccenterx, ccentery, cradius-4, BLACK);
  // Draw 12 lines
  for(int i = 0; i<360; i+= 30) {
    sx = cos((i-90)*scosConst);
    sy = sin((i-90)*scosConst);
    x0 = sx*(cradius-4)+ccenterx;
    yy0 = sy*(cradius-4)+ccentery;
    x1 = sx*(cradius-11)+ccenterx;
    yy1 = sy*(cradius-11)+ccentery;
    tft.drawLine(x0, yy0, x1, yy1, BLUE);
  }
}

static uint8_t conv2d(const char* p) {
  uint8_t v = 0;
  if ('0' <= *p && *p <= '9') v = *p - '0';
  return 10 * v + *++p - '0';
}

void setup(void) {
  tft.begin();

  tft.setTextColor(WHITE, BLACK);
  ccenterx = tft.width()/2;
  ccentery = tft.height()/2;
  osx = ccenterx;
  osy = ccentery;
  omx = ccenterx;
  omy = ccentery;
  ohx = ccenterx;
  ohy = ccentery;
  drawClockFace();// Draw clock face
  //get current time from compiler
  hh = conv2d(__TIME__);
  mm = conv2d(__TIME__+3);
  ss = conv2d(__TIME__+6);
  targetTime = millis() + 1000; 
}

void drawClockHands(uint8_t h,uint8_t m,uint8_t s){
  // Pre-compute hand degrees, x & y coords for a fast screen update
  sdeg = s * 6;                  // 0-59 -> 0-354
  mdeg = m * 6 + sdeg * 0.01666667;  // 0-59 -> 0-360 - includes seconds
  hdeg = h * 30 + mdeg * 0.0833333;  // 0-11 -> 0-360 - includes minutes and seconds
  hx = cos((hdeg-90)*scosConst);    
  hy = sin((hdeg-90)*scosConst);
  mx = cos((mdeg-90)*scosConst);    
  my = sin((mdeg-90)*scosConst);
  sx = cos((sdeg-90)*scosConst);    
  sy = sin((sdeg-90)*scosConst);

  // Erase just old hand positions
  tft.drawLine(ohx, ohy, ccenterx+1, ccentery+1, BLACK);  
  tft.drawLine(omx, omy, ccenterx+1, ccentery+1, BLACK);  
  tft.drawLine(osx, osy, ccenterx+1, ccentery+1, BLACK);
  // Draw new hand positions  
  tft.drawLine(hx*(cradius-28)+ccenterx+1, hy*(cradius-28)+ccentery+1, ccenterx+1, ccentery+1, WHITE);
  tft.drawLine(mx*(cradius-17)+ccenterx+1, my*(cradius-17)+ccentery+1, ccenterx+1, ccentery+1, WHITE);
  tft.drawLine(sx*(cradius-14)+ccenterx+1, sy*(cradius-14)+ccentery+1, ccenterx+1, ccentery+1, RED);
  tft.fillCircle(ccenterx+1, ccentery+1, 3, RED);

  // Update old x&y coords
  osx = sx*(cradius-14)+ccenterx+1;
  osy = sy*(cradius-14)+ccentery+1;
  omx = mx*(cradius-17)+ccenterx+1;
  omy = my*(cradius-17)+ccentery+1;
  ohx = hx*(cradius-28)+ccenterx+1;
  ohy = hy*(cradius-28)+ccentery+1;
}


void loop() {
  if (targetTime < millis()) {
    targetTime = millis()+1000;
    ss++;
    if (ss == 60) {
      ss = 0;
      mm++;
      if(mm > 59) {
        mm = 0;
        hh++;
        if (hh > 23) hh = 0;
      }
    }
    drawClockHands(hh,mm,ss);

  }
}

С пинами и прочим разобрался.Ошибка возникала из-за отсутствия графической библиотеки Adafruit_GFX.h

arduino328
Offline
Зарегистрирован: 01.09.2016

SolJa пишет:

Я начал изучать ардуины, но я очень глуп и не понимаю ничерта, однако не теряю надежды.

Человек сразу признался, что на него не стоит тратить своё время.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

arduino328 пишет:

SolJa пишет:

Я начал изучать ардуины, но я очень глуп и не понимаю ничерта, однако не теряю надежды.

Человек сразу признался, что на него не стоит тратить своё время.

...Полу мудрец...полу невежда...но есть надежда, что станет полным! Наконец

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

SolJa пишет:

Вот какую ошибку показывает.
error: 'ILI9163C' was not declared in this scope

Я правильно понимаю, что вот этой строчкой:

UTFT myGLCD(ILI9341_16,38,39,40,41);  // прописываем сюда дисплей сэндвича

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

И если да, то какие это выходы экранчика? И что значат названия лапок SCK, SDA?

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

Вашего дисплея в этой либе нет, но вы можете обратить как-бы другим типом дисплея, если правильно распаян какое-то изображение быть должно, по ссылке в посте рассматривается и ваш дисплей, нашёл позднее

slider
Offline
Зарегистрирован: 17.06.2014

справа вверху поиск по форуму , можете забить свой  ILI9163C .ну или загуглить , ещё больше найдете

 

 

Joiner
Offline
Зарегистрирован: 04.09.2014

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

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Joiner пишет:

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

Как у них с этим дисплеем запущено )))

"...когда в обществе отсутствует цветовая дифференциация штанов..." (C) КУ

Joiner
Offline
Зарегистрирован: 04.09.2014

ua6em пишет:

....

Как у них с этим дисплеем запущено )))

"...когда в обществе отсутствует цветовая дифференциация штанов..." (C) КУ

Простите....ни чего не понял. Вы чего хотели сказать?

Logik
Offline
Зарегистрирован: 05.08.2014

ua6em пишет:

Как у них с этим дисплеем запущено )))

Смотря в каком смысле, если расчитываете купить, тыкнуть и заработало, то наверно да, т.к. каждый китаец паяет как желает и цвет по вкусу выбирает. Но контроллер то один, читаете на него спеку - https://www.crystalfontz.com/controllers/ILItek/ILI9163C/136 Понятное дело что ниче не понимаете, это нормально, достаточно поверхам глянуть и иметь представление что в ней можна найти и где, если с английски совсем плохо -ну так хоть картинки посмотреть. Полезно рускоязычную статейку тоже зачитать. Они в паре лучше усвояются. После этого можна и платы посмотреть, и окажется что в общем они одинаковые только цветом и подробностями отличаются (но одной же мелочи достаточно чтоб совсем не работало!!!): там к одному штырю припаяли здесь к соседнему (не беда - правим скетч), там один вариант шины, здесь немного другой (не беда настраиваем либу, или меняем или свою пишем). 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Joiner пишет:

ua6em пишет:

....

Как у них с этим дисплеем запущено )))

"...когда в обществе отсутствует цветовая дифференциация штанов..." (C) КУ

Простите....ни чего не понял. Вы чего хотели сказать?

Вы не одиноки, 99 и 9 в периоде ничёнипанимают, о чём говорится в киндзаза )))
Начните с КУ, если Вам это конечно интересно

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Logik пишет:

ua6em пишет:

Как у них с этим дисплеем запущено )))

Смотря в каком смысле, если расчитываете купить, тыкнуть и заработало, то наверно да, т.к. каждый китаец паяет как желает и цвет по вкусу выбирает. Но контроллер то один, читаете на него спеку - https://www.crystalfontz.com/controllers/ILItek/ILI9163C/136 Понятное дело что ниче не понимаете, это нормально, достаточно поверхам глянуть и иметь представление что в ней можна найти и где, если с английски совсем плохо -ну так хоть картинки посмотреть. Полезно рускоязычную статейку тоже зачитать. Они в паре лучше усвояются. После этого можна и платы посмотреть, и окажется что в общем они одинаковые только цветом и подробностями отличаются (но одной же мелочи достаточно чтоб совсем не работало!!!): там к одному штырю припаяли здесь к соседнему (не беда - правим скетч), там один вариант шины, здесь немного другой (не беда настраиваем либу, или меняем или свою пишем). 

Я сейчас другой дисплей мучаю, у меня всё работает, проект индийского программиста, вот сижу пытаюсь написать общение по протоколу GS-232 и, даже вроде получается, хотя в СИ не в зуб ногой, пока материалов по языку с этого сайта хватает, но это пока, тут надо преобразование из char в int организовать, разбираюсь...

phoenixoid
Offline
Зарегистрирован: 14.07.2015

Погуглите "atoi"

Joiner
Offline
Зарегистрирован: 04.09.2014

ua6em пишет:

Вы не одиноки, 99 и 9 в периоде ничёнипанимают, о чём говорится в киндзаза )))
Начните с КУ, если Вам это конечно интересно

Мне это абсолютно неинтересно.

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

ua6em пишет:

"...когда в обществе отсутствует цветовая дифференциация штанов..." (C) КУ

А чего не продолжили, то??? Там ведь очень хорошо сказано "..., то нет цели!". Так что всё отлично с эими дисплеями. Были б они все одинаковые и все б хорошо работали, о чём бы мы тут трепались? На чём бы зарабатывали продавцы попкорна?  А так, всё замечательно!

AHTucTaTuK
Offline
Зарегистрирован: 14.11.2016

Дабы не плодить ненужные темы - напишу сюда:
Вообщем, я как и топикстартер, не сидён в ардруине. Заказал с китая ардруину УНО, дисплей 1.44 дюйма (на ST7735) и часы реального времени ds1307. Уже неделю ковыряюсь немогу простейшие часы на LED экране собрать((( сам экран и часы к ардруине подключил, написать скетч проблема ))....кто поможет разобраться начинающему??

Araris
Offline
Зарегистрирован: 09.11.2012

Никто не поможет, пока не выложите схему подключения и скетч, с которыми "неделю ковыряетесь", и не начнёте задавать конкретные вопросы по ним.

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

AHTucTaTuK пишет:

Дабы не плодить ненужные темы - напишу сюда:
Вообщем, я как и топикстартер, не сидён в ардруине. Заказал с китая ардруину УНО, дисплей 1.44 дюйма (на ST7735) и часы реального времени ds1307. Уже неделю ковыряюсь немогу простейшие часы на LED экране собрать((( сам экран и часы к ардруине подключил, написать скетч проблема ))....кто поможет разобраться начинающему??

я помогаю начинающим здесь Памахите навечку! 001 - заходи, помогу, чем смогу.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

да есть тут простейшие часы, идут хреново и DS не нужна, начните хотя бы с этого )))