Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using Serial.print and digitalWrite in Same Arduino Script

I am using an Arduino Uno and Windows 7. My goal is to have an LED light that blinks, and when it blinks, it prints out "Blink" to the serial monitor.

When I run the code below, I am able to print out "Blink" to the serial monitor every 2 seconds, however, the light remains constantly on. When I remove the line

Serial.begin(9600);

the lights will blink, but nothing will print. The code I am running is as follows:

int LED3 = 0;
void setup() {
  // When I comment out the line below, the lights flash as intended, but 
  // nothing prints.  When I have the line below not commented out, 
  // printing works, but the lights are always on (ie do not blink). 

  Serial.begin(9600);  // This is the line in question.
  pinMode (LED3, OUTPUT);
}

void loop() {
  Serial.println("Blink");
  digitalWrite (LED3, HIGH);
  delay(1000);
  digitalWrite (LED3, LOW);
  delay(1000);
}

I am unclear on what causes this behavior and would appreciate an explanation of why this occurs and how to avoid this problem. Thank you!

like image 329
Marjoram Avatar asked May 10 '17 00:05

Marjoram


People also ask

Can Arduino read and write at the same time?

You can indeed simultaneously read and write through the serial port. At the hardware level, the serial port (the UART) is a transmitter and a receiver, which are almost independent. At the software level, they are both handled through interrupts that read from / write to a software buffer.

What is the difference between serial print and serial Println in Arduino?

Serial. print() prints only the number or string, and Serial. println() prints it with a newline character.

How do you go to the next line in a serial print Arduino?

Description. Prints data to the serial port as human-readable ASCII text followed by a carriage return character (ASCII 13, or '\r') and a newline character (ASCII 10, or '\n'). This command takes the same forms as Serial. print().

Which function in the Arduino IDE is used to sending and printing data on a serial monitor?

print() function to send the data to a computer monitor via the USB cable. If you open up the serial monitor window (Tools > Serial Monitor), you will see the values streaming in from the Arduino.


2 Answers

what causes this behavior ?

Pins 0 and 1 are used for serial communications. It's really not possible to use pins 0 and 1 for external circuitry and still be able to utilize serial communications or to upload new sketches to the board.

From the Arduino Serial reference documentation:

Serial is used for communication between the Arduino board and a computer or other devices. All Arduino boards have at least one serial port (also known as a UART or USART): Serial. It communicates on digital pins 0 (RX) and 1 (TX) as well as with the computer via USB. Thus, if you use them in functions in your sketch, you cannot also use pins 0 and 1 for digital input or output.

Just think it this way how can a pin act serial and digital simultaneously ? Yeah that's what you are trying to do !! . You set pin to serial at a baud rate and then you used it for making LED blink.

So, when you do serial.begin(9600); it Sets the data rate in bits per second (baud) for serial data transmission to 9600.Thus you used serial pins in this function, after that you cannot use pins 0 and 1 for digital input or output ( like an LED ). when you comment serial.begin(9600); your pins are free to use and thus you obtain the output.

how to avoid this problem ?

Change the LED from pin 0 to digital pins.

The following code will obtain the result that you expect (I used pin 7 in it) :

int LED3 = 7; //I have changed pin to 7 ( you can use any except 0 and 1 )
void setup() {
  // When I comment out the line below, the lights flash as intended, but 
  // nothing prints.  When I have the line below not commented out, 
  // printing works, but the lights are always on (ie do not blink). 

  Serial.begin(9600);  // This is the line in question.
  pinMode (LED3, OUTPUT);
}

void loop() {
  Serial.println("Blink");
  digitalWrite (LED3, HIGH);
  delay(1000);
  digitalWrite (LED3, LOW);
  delay(1000);
}
like image 83
Mathews Sunny Avatar answered Dec 17 '22 10:12

Mathews Sunny


The Arduino is using pins 0 and 1 for serial communications. Pin 0 is RX and 1 is TX, so when you are trying to flash the LED also connected to pin 0, the two start stomping all over each other.

Try to move the LED to a different pin and update your sketch to match, and it should start working.

This page contains information on the Arduino serial connection: https://www.arduino.cc/en/Reference/Serial

Happy hacking

like image 35
Erik HB Avatar answered Dec 17 '22 10:12

Erik HB