TFT ошибка

Тема в разделе "Arduino & Shields", создана пользователем mike_KH, 7 янв 2016.

  1. mike_KH

    mike_KH Гик

    Делаю часы, но нет DS для определение реального времени, так вот написал на питоне программу, все работает, но вот на дуне не работает
    Arduino code
    Код (C++):
    #include <TFT.h>
    #include <SPI.h>
    #define cs   10
    #define dc   9
    #define rst  8
    TFT TFTscreen = TFT(cs, dc, rst);

    int led = 13;
    void setup() {
      TFTscreen.begin();
      Serial.begin(9600);
      pinMode(led, OUTPUT);
    }

    void loop() {
      TFTscreen.background(0, 0, 0);
      TFTscreen.setTextSize(1);
    if (Serial.available() > 0) {
        digitalWrite(led, HIGH);
        TFTscreen.text(Serial.read(), 0, 0);
    }
    }
    Pythone code
    Код (Python):
    import os
    import sys
    import serial
    import datetime
    ser = serial.Serial('COM4', 9600)
    print(ser.name)
    print(datetime.datetime.now())
    date_string = str(datetime.datetime.now())
    date_bytes = date_string.encode('ascii')
    ser.write(date_bytes)
    print('OK')
    ser.close
     
    Помогите кто может
     
  2. mike_KH

    mike_KH Гик

    Ошибка следующая
    exit status 1
    invalid conversion from 'int' to 'const char*' [-fpermissive] , как понимаю проблема с типами данных
     
  3. geher

    geher Гуру

    Рискну предположить, что ругань идет на эту строку:
    Код (Text):
    TFTscreen.text(Serial.read(), 0, 0);
    Также рискну предположить, что первый параметр метода text класса TFT требует параметр char*, т.е. указатель на нультерминированную строку, в то время как Serial.read возвращает код единственного символа, считываемого из последовательного порта.
    Так что, если есть желание в данном контексте воспользоваться именно методом text, то правильнее будет примерно так (пример сделан грубо и в лоб, логично привести в более цивилизованный вид по месту, также возможны опечатки):
    Код (Text):

    // объявляем массив, в котором будет храниться
    // строка длиной один символ и завершающий ее байт со
    // значением 0
    char readstr[2]=" ";
    // читаем из последовательного порта один символ и загоняем его на место первого символа в строке, хранящейся в readstr
    readstr[0]=Serial.read();
    // выводим полученную односимвольную строку
    TFTscreen.text(readstr, 0, 0);
     
    Но лучше в данном контексте попробовать воспользоваться методом write, который наверняка просто обязан заваляться у класса TFT, поскольку должен по цепочке наследоваться от класса Print (впрочем, это не факт, могли и наворотить чего-то, а в дебри реализации залезать лень, но скорее всего, поскольку в реализации text используется print).
    Примерно так, если сработает:

    Код (Text):
    TFTscreen.SetCursor(0, 0);
    TFTscreen.write(Serial.read());
     
  4. mike_KH

    mike_KH Гик

    Спасибо, есть еще гении, пойду испробую.
     
  5. mike_KH

    mike_KH Гик

    Вы оказались не правы только в одной строчке, но я сам все пробил SetCursor нет в библиотеке TFT
     
  6. mike_KH

    mike_KH Гик

    Только вот ничего не происходит скорее все курсор не в том месте
     
  7. mike_KH

    mike_KH Гик

    Не помогло не одно не другое((
     
  8. mike_KH

    mike_KH Гик

    #include <TFT.h>
    #include <SPI.h>
    #define cs 10
    #define dc 9
    #define rst 8
    TFT TFTscreen = TFT(cs, dc, rst);

    int led = 13;
    void setup() {
    TFTscreen.begin();
    Serial.begin(9600);
    pinMode(led, OUTPUT);
    }

    void loop() {
    TFTscreen.background(0, 0, 0);
    TFTscreen.setTextSize(1);
    if (Serial.available() > 0) {
    digitalWrite(led, HIGH);
    for (int i = 0; Serial.available() > 0; i++){
    int x[26];
    for(int c = 0; c < 26; c++){
    x = Serial.parseInt();
    }
    char y[26];
    for(int z = 0; z < 26; z++){
    y = x;
    TFTscreen.text(y, 0, 0);
    }
    }
    }
    }
    Новый код, но всей равно не работает, черный экран и ничего больше