Arduino 无法使Serial.print正常工作
我有一个简单的程序:Arduino 无法使Serial.print正常工作,arduino,Arduino,我有一个简单的程序: void setup() { Serial.begin(9600); } void loop() { int x = 0; Serial.print(x++); } // SparkFun Soil Moisture Sensor and Serial LCD example 1 // By Sarah Al-Mutlaq 2015 // Sketch reads sensor and desplays level and whether soil is w
void setup() {
Serial.begin(9600);
}
void loop() {
int x = 0;
Serial.print(x++);
}
// SparkFun Soil Moisture Sensor and Serial LCD example 1
// By Sarah Al-Mutlaq 2015
// Sketch reads sensor and desplays level and whether soil is wet or dry
// Use the softwareserial library to create a new "soft" serial port
// for the display. This prevents display corruption when uploading code.
#include <SoftwareSerial.h>
// Attach the serial display's RX line to digital pin 2
SoftwareSerial mySerial(3,2); // pin 2 = TX, pin 3 = RX (unused)
// Here we are setting up some water thersholds that we will
// use later. Note that you will need to change these to match
// your soil type and environment.
int thresholdUp = 400;
int thresholdDown = 250;
// We are setting up the pin A0 on the redboard to be our sensor
// pin input:
int sensorPin = A0;
void setup(){
mySerial.begin(9600); // set up serial port for 9600 baud (speed)
delay(500); // wait for display to boot up
}
void loop(){
// Here we are declaring a string, which are lines of words,
// and we want DisplayWords to be the words displayed on
// the LCD screen, which will change based on whether the soil
// wet or dry based on our threshold values above.
String DisplayWords;
// We need to set up a pin to get the value that the soil
// moisture sensor is outputting, so sensorValue will get the
// analog value from the sensor pin A0 on the redboard that we
// set up earlier.
int sensorValue;
sensorValue = analogRead(sensorPin);
// move cursor to beginning of first line on LCD:
mySerial.write(254);
mySerial.write(128);
// clear display:
mySerial.write(" ");
mySerial.write(" ");
// move cursor to beginning of first line of the LCD screen:
mySerial.write(254);
mySerial.write(128);
//Write what we want to desplay on the screen:
mySerial.write("Water Level: ");
mySerial.print(sensorValue); //Using .print instead of .write for values
// Now we are going to check if the water level is below a
// out thresholdDown value we set earlier, and if it is have
// words "Dry, Water it!" display one column over on the first
// row:
if (sensorValue <= thresholdDown){
// move cursor to beginning of second line on LCD:
mySerial.write(254);
mySerial.write(192);
DisplayWords = "Dry, Water it!";
mySerial.print(DisplayWords);
// If the value is not below our thresholdDown value we want to
// check if it is above our thresholdUp value, and if it is
// change the display words to "Wet, Leave it!":
} else if (sensorValue >= thresholdUp){
// move cursor to beginning of second line on LCD:
mySerial.write(254);
mySerial.write(192);
DisplayWords = "Wet, Leave it!";
mySerial.print(DisplayWords);
// Otherwise if it is inbetween the two values we want it to
// the display it had, so if our soil was really wet and drying
// the words would only change to "Dry, Water it!" when it got to the lower threshold
// (thresholdDown), but if it was dry and getting wetter the words
// would only change to "Wet, Leave it!" when it got to the upper
// threshold (thresholdUp_):
} else {
// move cursor to beginning of second line on LCD:
mySerial.write(254);
mySerial.write(192);
mySerial.print(DisplayWords);
}
delay(500); //wait for half a second, so it is easier to read
}
每当我试图查看串行日志时,都没有显示任何内容,这说明我做错了什么。我使用的是Arduino Leonardo,草图已编译并上传
---------更新1--------
我真正想让控制台打印出来的是以下代码。但是,由于失败,我制作了一个简短的程序:
void setup() {
Serial.begin(9600);
}
void loop() {
int x = 0;
Serial.print(x++);
}
// SparkFun Soil Moisture Sensor and Serial LCD example 1
// By Sarah Al-Mutlaq 2015
// Sketch reads sensor and desplays level and whether soil is wet or dry
// Use the softwareserial library to create a new "soft" serial port
// for the display. This prevents display corruption when uploading code.
#include <SoftwareSerial.h>
// Attach the serial display's RX line to digital pin 2
SoftwareSerial mySerial(3,2); // pin 2 = TX, pin 3 = RX (unused)
// Here we are setting up some water thersholds that we will
// use later. Note that you will need to change these to match
// your soil type and environment.
int thresholdUp = 400;
int thresholdDown = 250;
// We are setting up the pin A0 on the redboard to be our sensor
// pin input:
int sensorPin = A0;
void setup(){
mySerial.begin(9600); // set up serial port for 9600 baud (speed)
delay(500); // wait for display to boot up
}
void loop(){
// Here we are declaring a string, which are lines of words,
// and we want DisplayWords to be the words displayed on
// the LCD screen, which will change based on whether the soil
// wet or dry based on our threshold values above.
String DisplayWords;
// We need to set up a pin to get the value that the soil
// moisture sensor is outputting, so sensorValue will get the
// analog value from the sensor pin A0 on the redboard that we
// set up earlier.
int sensorValue;
sensorValue = analogRead(sensorPin);
// move cursor to beginning of first line on LCD:
mySerial.write(254);
mySerial.write(128);
// clear display:
mySerial.write(" ");
mySerial.write(" ");
// move cursor to beginning of first line of the LCD screen:
mySerial.write(254);
mySerial.write(128);
//Write what we want to desplay on the screen:
mySerial.write("Water Level: ");
mySerial.print(sensorValue); //Using .print instead of .write for values
// Now we are going to check if the water level is below a
// out thresholdDown value we set earlier, and if it is have
// words "Dry, Water it!" display one column over on the first
// row:
if (sensorValue <= thresholdDown){
// move cursor to beginning of second line on LCD:
mySerial.write(254);
mySerial.write(192);
DisplayWords = "Dry, Water it!";
mySerial.print(DisplayWords);
// If the value is not below our thresholdDown value we want to
// check if it is above our thresholdUp value, and if it is
// change the display words to "Wet, Leave it!":
} else if (sensorValue >= thresholdUp){
// move cursor to beginning of second line on LCD:
mySerial.write(254);
mySerial.write(192);
DisplayWords = "Wet, Leave it!";
mySerial.print(DisplayWords);
// Otherwise if it is inbetween the two values we want it to
// the display it had, so if our soil was really wet and drying
// the words would only change to "Dry, Water it!" when it got to the lower threshold
// (thresholdDown), but if it was dry and getting wetter the words
// would only change to "Wet, Leave it!" when it got to the upper
// threshold (thresholdUp_):
} else {
// move cursor to beginning of second line on LCD:
mySerial.write(254);
mySerial.write(192);
mySerial.print(DisplayWords);
}
delay(500); //wait for half a second, so it is easier to read
}
我知道你现在控制着一个显示器。使用它们不像向终端仿真器发送字节。它们必须受到控制。控制这些串行显示器通常包括发送一些初始化命令,这些命令对于不同的显示器通常是相似的,但并不总是相似的,前提是它们具有相同的显示控制器 我不知道您使用的是什么显示部件,但我敢说缺少一些初始化命令。500毫秒延迟通常是其中的一部分,但在发送光标定位命令之前,请查看文档中需要发送的任何其他init命令
通常,您必须发送一个初始字节命令以将显示器置于命令模式,发送一些配置命令,然后退出命令模式以实际使用显示器。如果是基于Hitachi 44780的显示器,您可以查看数据表。@Drew1208完全是基于看到您的LCD控制而更改了我的答案。