Arduino代码
#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);
}
}
&#13;
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
&#13;
Python工作正常,但Arduino给我这个错误无效转换来自&#39; int&#39;到#char; char *&#39; [-fpermissive],我认为数据类型存在问题,但我昨天开始学习这门语言。
答案 0 :(得分:0)
我想问题就在这里:
TFTscreen.text(Serial.read(), 0, 0);
您调用“read”函数,该函数返回一个整数。屏幕的“text”函数需要一个char指针作为第一个参数,并且你不能将int转换为char *,如错误“无效转换为'int'到'const char *”
您可以在arduino文档中查找所有参数和返回类型: https://www.arduino.cc/en/Serial/Read
答案 1 :(得分:0)
也许,在你的python上添加一个&#39; \ 0&#39;在将字符串发送到串行之前,这将作为接收字符串的结尾。我不记得python是否默认发送它,但你可以明确地发送它。
在arduino上,获取接收的数据并填充一个字符数组(可能使用计数器或指针aritchmetic,小心超过数组声明的最大大小),然后等待&#39 ; \ 0&#39 ;.一旦它得到\ 0,将它附加到char数组,并做一个TFT显示。然后再次重复该过程,重置计数器,然后等待传入的字节流。
我还没有使用过那个TFT库,但是我在实现中遇到的一个问题就是它不会显示任何单词,因为你会继续将每个字符写成0,0。