【问题标题】:Error in arduino communication with COMarduino 与 COM 通信时出错
【发布时间】:2016-04-12 22:03:51
【问题描述】:

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);
}
}

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

Python 工作正常,但是 Arduino 给我这个错误,从 'int' 到 'const char*' [-fpermissive] 无效转换,我认为数据类型有问题,但我昨天开始学习这种语言。

【问题讨论】:

    标签: python c++ arduino arduino-uno arduino-ide


    【解决方案1】:

    我认为问题出在这里:

    TFTscreen.text(Serial.read(), 0, 0);
    

    您调用返回整数的“读取”函数。屏幕的“文本”函数需要一个 char 指针而不是第一个参数,并且您不能像错误“从 'int' 到 'const char* 的无效转换”中所说的那样将 int 转换为 char*

    您可以在 arduino 文档中查找所有参数和返回类型: https://www.arduino.cc/en/Serial/Read

    【讨论】:

    • 我该如何解决?
    • 嗯,我只是假设,但我想你不想每次都在 TFT 屏幕上显示一个字节,因为“读取”函数只返回一个字节。如果我的假设是正确的,我会将所有接收到的字节保存在 int 数组中,然后将其转换为 char 数组。此处涵盖的转换例如:stackoverflow.com/questions/4712737/…
    • #include #include #define cs 10 #define dc 9 #define rst 8 TFT TFTscreen = TFT(cs, dc, rst);国际领导= 13;无效设置(){ TFTscreen.begin();序列号.开始(9600); pinMode(LED,输出); } 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
    • 如何更新您的原始问题并在此处插入代码,而不是将其发布在绝对没有人可以阅读的地方
    • 我必须等待 90 分钟才能提出新问题
    【解决方案2】:

    也许,在您的 python 上添加一个'\0',然后再将字符串发送到串行,这将作为接收字符串的结尾。我不记得python是否默认发送这个,但你可以明确地发送这个。

    在 arduino 上,获取接收到的数据并填充字符数组(可能使用计数器或执行指针算法,小心超出数组声明的最大大小),然后等待“\0”。一旦它得到 \0,也将它附加到 char 数组中,然后进行 TFT 显示。然后再次重复该过程,重置计数器然后等待传入的字节流。

    我没有使用过那个 TFT 库,但我预计在您的实现中会出现的问题之一是它不会显示任何单词,因为您将继续将每个字符写入 0,0。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-14
      • 2011-06-17
      • 1970-01-01
      相关资源
      最近更新 更多