What programming language can be used to code in Arduino IDE? - arduino

I'm in beginner level of learning Arduino. I want to know what programming language used in Arduino?
I've followed tutorials and tried some codes and then got outputs such as blink LED, knight_rider ,measure distance using ultrasound sensor & etc.
Here is a peice of code I learned in the tutorial for measure distance using ultrasound sensor.
`Serial.print`(inches);
`Serial.print`("in \t ");
`Serial.print`(cm);
`Serial.println`("cm");
When I searched google, It says C/C++ are used in Arduino. I have learnt Cand C#. But as far I know there is no function called println in C language. It confuse me what language is this?

From the Arduino FAQ:
Can I program the Arduino board in C? In fact, you already are; the
Arduino language is merely a set of C/C++ functions that can be called
from your code. Your sketch undergoes minor changes (e.g. automatic
generation of function prototypes) and then is passed directly to a
C/C++ compiler
From Wikipedia:
The Arduino IDE supports the languages C and C++ using special rules
of code structuring.
You can define your own functions in pretty much any programming language. That there is a function named println doesn't mean that it isn't C++ anymore.

Related

Why do we need to select a board to work with arduino IDE

I always wondered how this works . In arduino IDE we have option to select different boards because the code upload i guess is different ? Also there is possibility to even add board manager url to add other boards.
Why uploading the code is so different from board to board , and what exactly differs there ? The code is sent to via serial connection and i understand that a board might have different chip for handling USB to serial but ..
Can someone explain as clear as possible , how the code is uploaded to a board and why there is no generic way , why so many configurations.
Thanks and sorry if is a dumb question.
One of the important things that selecting a board does is, as you say, inform the IDE of how to load code onto the board. Perhaps more importantly, the board definitions give you the logical mapping of the board's hardware to the code constructs you are using to program against. For example, have you ever wondered what happens when you use a constant like PIN_13, or how that constant maps to a physical pin on your board, which has a trace to some contact on the microcontroller chip itself?
There is a lot of other code you don't see, much of it in the board definitions (and some in the Arduino core) which lets you work with relatively direct concepts (like pin numbers and modes) in the code that you write or edit.

Is it possible to program Arduino boards using a few lines of assembly in the Arduino IDE?

I want to measure the time between two signals that are not in phase and i am using arduino Uno. I have converted the 2 sinusoidal signals into square waves and i am feeding them on INT0 and INT1 respectively. To measure the lag between the two signals i want to measure the time between the rising edges or falling edges of the signals using interrupts. On receiving the first rising edge i want to start a timer, say timer 3, upon receiving the second rising edge i want to stop the timer. my problem is i cant find a library that will allow me to start and stop timer the 3 and use the value it so i have chosen to include a few lines of Assembly language in my program for that purpose. Is it possible on the Arduino boards using the arduino IDE?
Yes it's possible. See for example this tutorial. However, I'd strongly recommend if you're doing anything more than a few instructions, you download and install Atmel studio -- which is free -- and use its excellent user interface to do your coding and debugging. I do all my programming for bare microcontrollers, in-system programming, and Arduinos using Atmel Studio.

Draw image from live arduino sensor data

I want to draw real time graph using data coming from a rotating ultrasonic sensor through arduino. What are the tools or library required for this. I am using official arduino IDE using C language.
The Arduino itself can't really draw a plot, so you'll have to send the data to your computer using Serial communcation. Your computer can then draw a graph. There are two options:
Use an existing program
The easy way.
This official Arduino page has some example code for the program Processing, but I'm sure you can find a bunch of other examples and tutorials online.
Write it yourself
This is the difficult and fun way.
If you already know a programming language, great! Search some tutorials about how to connect your Arduino & how to plot data.
Otherwise, I recommend starting with Python, this is a good place to start.
Java
I have some old code written in Java that connects to the Arduino using the very easy JSSC library:
SerialPort port = new SerialPort("COM9");
port.openPort();
port.setParams(9600, 8, 1, 0);
byte b = port.readBytes(1)[0]; //read a single byte
port.writeByte(b); //write a single byte
Where you'd replace "COM9" with whatever port your Arduino is connected to, as displayed in the bottom right of the Arduino IDE.
Actually plotting the data would require another library, I see JFreeChart being recommend a lot online.

Can arduino tell room temperature by voice call using sim900?

I'm building a temperature monitoring unit with arduino, LM35 and a 16*2 LCD display. Now I am going to integrate this unit by SIM900A GSM/GPRS module and I get temperature readings by SMS.
Now my question is, can I get those values by voice calling. If I called to the GSM modem, can it tell the temperature readings.
You need to add all possible values as .amr files or you can break them and play the appropriate files using at commands. Like for 35 you can play sound "thirty" and then "five".
Follow the AMR playing application note available here
Apart of having all the messages in PCM files there is also possibility to use TTS (text to speech) There are small and compact TTS engines out there suitable for Arduino port. Here two I am using (with AVR32):
Tiny Speech Synth by stan 1901
just port it to your arduino (removing the waveout stuff and just use the buffer as PCM). The only lib it really needs is math.h for sin,cos. It may need a bit more work to actually make it more comprehensible but its not that bad when tuned the frequencies ... its using floats heavily but I think port to integer math is also possible ...
KECAL 1.0 ports for ATMEGA
its much older TTS engine originaly from ZX Spectrum but its a bit less comprehensible especially with low quality reproductors (like buzzer) ... But id does not need PWM or DAC ...
I do not know of any more recent OpenSource TTS engine compact enough for MCU platform all I know of are too big or relaying on SAPI,.NET or other OS integrated stuff making them useless.
The #1 is simple and commented enough to make changes improving the phonemes. The #2 was heavily optimized for speed and size (it run on ~4MHz Z80) so no way to improve quality there.
Btw there are also IC for TTS out there so that might be even better choice...
[edit1]
Take a look at this:
Is there any text to speech program that will run on an 8- or 16-bit CPU?
Among other things I added there very good quality and low CPU demand TTS engine ported from Z80 asm into C++, which can be directly used by MCUs ...

A way to change mcu program from the outside

We need to change a controller code from the out side as they do with industrial MCU .
So that you have an mcu,with a program on it, and someone can program some "words" to it, that will determine how it works.
So for example you can program an mcu -not with a programer but with some inputs from serial, to do some simple things such as:
if input A==1
b=1
I wonder if there is a smart way to do that with simple software on the mcu, that it has many #defines for various commands, and it perform them according to values it gets from the outside (and saved for the rest of the program).
I wonder if the industrial programers are using that method, or that every programing of a user is actually load a code(.hex) to the chip(with internal programer ) .
I prefer the simplest way(i wonder if its by pre defined software)
A couple of options come to mind so hopefully this answers your question. It sounds like the simplest version of your question is "How do I change the behavior of the MCU without an actual MCU programmer?" A couple of options come to mind.
1) Depending on the MCU you can have a bootloader that is essentially a small piece of code programmed in the MCU by a programmer that has the ability to reprogram other parts of the MCU. This doesn't require a programmer but involves some other form of letting the bootloader know what the new code is (USB, Serial, SD Card, etc). This will only work if the MCU has the ability to self flash.
2) Again, depending on MCU and scenario you could program a generic set of rules that carry out functionality based on the inputs given to the MCU. This could be in the form of IO pins, EEPROM, or a domain-specific script on an SD card that the MCU can read and interpret at runtime.
Both options depend on the MCU you are using and what hardware capabilities you have at your disposal. But you certainly have options other than reprogramming the end hardware with an actual programmer every time you want to make a change. Hopefully that helps.

Resources