What is PWM?PWM refers to Pulse Width Modulation. In very simple terms, we can output a square wave from certain pins of the Arduino board, and we can control the fraction of time for which the wave will be at the HIGH state (known as the duty cycle).Why is PWM needed?PWM finds several applications. An important application is running motors. The RPM of the motor can be controlled by the PWM output. PWM can also be used in general for generating voltages between HIGH and LOW. So, if your HIGH level is at 5V and LOW level is at 0V, ... Read More
FloatFloating point numbers are stored using 4 bytes (32 bits).Their max value can be 3.4028235E+38 and their min value can be -3.4028235E+38.They have a precision of about 6-7 decimal places.DoubleWhile on several platforms, double has more precision than float. However, on most Arduino boards (Uno and many other ATmega boards), double has the same size as float. Arduino Due is an exception, wherein double has a size of 8 bytes (compared to 4 bytes of float).On the boards where double is stored using 8 bytes, the max value can be 1.7*10^308 and the min value can be -1.7*10^308. On the ... Read More
When you define an integer, it is signed by default. In other words, it can accept both positive and negative values. Unsigned integers, as the name suggests, accept only positive values. Therefore, they have a higher range.If you are using a board that uses two bytes (16 bits) to represent an integer, then the maximum range you would get for an unsigned integer is 0 to 65535 (216-1).However, when representing signed integers, the range would be -32767 to +32767. Note that 32767 corresponds to (215 -1). As you can see, the most significant bit seems to be out of action. ... Read More
Defining new functions in Arduino is equivalent to defining the functions in C.The syntax is −Syntaxreturn_type function_name(arg_type arg)The only difference is that in C, the function needs to be declared at the top, if it is invoked before its definition. No such constraint exists in Arduino. The following code demonstrates this −Examplevoid setup() { Serial.begin(9600); Serial.println(); } void loop() { // put your main code here, to run repeatedly: for (int i = 0; i < 10; i++) { long int w = square(i); Serial.println(w); delay(1000); ... Read More
In order to convert a string to lower/upper case, the in-built .toLowerCase() and .toUpperCase() functions can be used.Note: These functions change the original string itself, and don't return a new string with the changes.The implementation is shown below −Examplevoid setup() { Serial.begin(9600); Serial.println(); String s1 = "Hello World"; Serial.println(s1); s1.toLowerCase(); Serial.println(s1); s1.toUpperCase(); Serial.println(s1); } void loop() { // put your main code here, to run repeatedly: }The corresponding Serial Monitor output is −OutputAs you can see, the changes have been made in s1 itself. The return of .toUpperCase() and .toLowerCase() is void.Read More
The .replace() function in Arduino allows you to replace a character or a substring with another character/substring in Arduino.Note: This function replaces substrings in the original string itself, and does not return a new string containing the changes.Examples are given in the code below −Examplevoid setup() { Serial.begin(9600); Serial.println(); String s1 = "Hello World"; Serial.println(s1); s1.replace('e', 'a'); Serial.println(s1); s1 = "Hello World"; s1.replace("ll", "gg"); Serial.println(s1); s1 = "Hello World"; s1.replace("li", "gg"); Serial.println(s1); } void loop() { // put your main code here, to run ... Read More
In order to convert a string to an integer or a float, the .toInt() and .toFloat() functions can be used. Of course, the string should actually correspond to the integer or floating-point value. For instance, "1.87" can be converted to float. But it doesn't make sense to convert "Hello" to float. The below example code illustrates the conversions −Examplevoid setup() { Serial.begin(9600); Serial.println(); // put your setup code here, to run once: String s1 = "235"; String s2 = "1.56"; String s3 = "Hello"; int i1 = s1.toInt(); int i2 = s2.toInt(); ... Read More
String concatenation in Arduino is quite straightforward and also robust. You simply use the + operator to join strings. However, it doesn't end with joining two strings. You can concatenate characters, and even integers and floats to strings (Arduino converts the integers and floating-point numbers to string internally). Examples can be seen in the below code.Examplevoid setup() { Serial.begin(9600); Serial.println(); // put your setup code here, to run once: String s1 = "Hello "; String s2 = "Bond!"; String s3 = s1 + s2; Serial.println(s3); s3 = s1 + 7; Serial.println(s3); ... Read More
In order to convert a character array to a string, the String() constructor can be used. An example is shown below −Examplevoid setup() { // put your setup code here, to run once: Serial.begin(9600); Serial.println(); char buf[10] = "Hello!"; Serial.print("Char array: "); Serial.println(buf); String s = String(buf); Serial.print("String: "); Serial.println(s); } void loop() { // put your main code here, to run repeatedly: }The output of the Serial monitor is shown below −Output
There are several libraries built for Arduino whose functions take in character arrays as inputs instead of strings. Thankfully, Arduino has an inbuilt method (toCharArray()) to covert a String to a Character Array. A sample implementation is given below −Examplevoid setup() { // put your setup code here, to run once: Serial.begin(9600); String s1 = "Hello World!"; char buf[30]; s1.toCharArray(buf, 6); Serial.println(buf); s1.toCharArray(buf, s1.length()); Serial.println(buf); } void loop() { // put your main code here, to run repeatedly: }As you can see, the toCharArray function takes in two arguments, ... Read More