Прошу помогите, нигде не могут дать ответ. Вот код, я с питоном даже не лезу, отправляю 20160108183925 получаю -468303499, понимаю что кодировка ASKII, но все известные мне способы не помогают. Пожалуйста избавьте меня уже от этого мазохизма, третий день сижу, а сделал как кот наплакал. Код (C++): #include <SPI.h> #define cs 10 #define dc 9 #define rst 8 TFT TFTscreen = TFT(cs, dc, rst); char DATETIME[26]; void setup() { TFTscreen.begin(); Serial.begin(9600); } void loop() { String ComData = String(Serial.parseInt()); ComData.toCharArray(DATETIME, 26); if(Serial.available() > 0){ Serial.print(DATETIME); } TFTscreen.background(0, 0, 0); TFTscreen.stroke(255, 255, 255); TFTscreen.setTextSize(2); TFTscreen.text(DATETIME, 0, 20); } Код на питоне Код (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_string = date_string[:4] + date_string[5:7] + date_string[8:10] + date_string[11:13] + date_string[14:16] + date_string[17:19] print(date_string) date_bytes = date_string.encode('ascii') ser.write(date_bytes) print('OK') print(date_bytes) print(len(date_bytes)) ser.close
Такая же тема на http://arduino.ru/forum/programmirovanie/kod-ne-rabotaet-problema-s-tft#comment-159418
Вы отправляете. Вы принимаете Код (C++): String ComData = String(Serial.parseInt()); Вас не смущает, что то, что Вы отправляете не поместится в int? Вот код, который работает и принимает данную строку. Код (C++): // Константа хранящая мак. размер массива хранящего пакет данных #define receiveSizeArrayCOM 26 // Массив хранящий полученый пакет данных. char DATETIME[receiveSizeArrayCOM]; // Переменная хранящая завершено ли получения данных. boolean finishReceiveData = false; // Переменная хранящая индекс текущего char в массиве хранящего пакет данных. int indexCharInArray; // Переменная хранящая ошибку длины полученных данных. boolean errorLengthReceiveData = false; void setup() { Serial.begin(9600); } void loop() { // Получение данных с Serial порта GetReceiveDataFromSerial(); // Ошибка длинны данных. if (errorLengthReceiveData) { Serial.println("Данных пришло больше."); // Очистка переменных получения данных, после получения данных. ClearReceiveDataVariable(); // Обнуляем переменую errorLengthReceiveData. errorLengthReceiveData = false; } else if (finishReceiveData) { //Serial.println(receiveCharArrayCOM); TFTscreen.background(0, 0, 0); TFTscreen.stroke(255, 255, 255); TFTscreen.setTextSize(2); TFTscreen.text(DATETIME, 0, 20); // Очистка переменных получения данных, после получения данных. ClearReceiveDataVariable(); } } /// <summary> /// Получение данных с Serial порта /// </summary> void GetReceiveDataFromSerial() { // Крутимся в цикле, до тех пор пока есть данные для чтения. while(Serial.available()) { // Объявляем переменную и сохрянем 1 char нее. char incomingChar = (char)Serial.read(); // Проверяем, если пришел символ новой строки или символ конца строки. if(incomingChar != '\n' && incomingChar != '\0') { // Заполняем массив. DATETIME[indexCharInArray] = incomingChar; // Проверяем индекс массива. if ((indexCharInArray+1) < receiveSizeArrayCOM) { // Увеличеваем индекс массива. indexCharInArray++; } else { // Данных больше, чем можем вместить. // Очень коварная ситуация, если мы выдем за пределы массива, отладка будет очень тяжелая. errorLengthReceiveData = true; break; } } else { // Увеличеваем индекс массива. DATETIME[indexCharInArray] = '\0'; // Взводим флаг, данные получены. finishReceiveData = true; } } } /// </summary> /// Очистка переменных получения данных, после получения данных. /// </summary> void ClearReceiveDataVariable() { indexCharInArray = 0; memset(DATETIME,'\0',receiveSizeArrayCOM); finishReceiveData = false; } Читает все данные до символа конца строки ('\n') и сохраняет в Ваш массив, от нее можете отталкиваться. Впрочем, данный код можно использовать, добавив после отправки данных символ '\n', на стороне Питона. Кодировка UTF8, когда-то делал на C# приложение использовал ее. UPD. C TFT не работал, не подскажу.