Difference between revisions of "Arduino"
m (→Resources: Added Embedded Portal; classified resources) |
|||
Line 27: | Line 27: | ||
The following section describes how your Lazarus/FPC application can communicate with Arduino boards, no matter whether fpc or arduino is running on the arduino board. | The following section describes how your Lazarus/FPC application can communicate with Arduino boards, no matter whether fpc or arduino is running on the arduino board. | ||
− | == | + | == One-way serial communication example using Synaser == |
Here we show how to communicate with your board through serial communication channel. | Here we show how to communicate with your board through serial communication channel. | ||
Line 101: | Line 101: | ||
==== Minimal Arduino FPC serial example ==== | ==== Minimal Arduino FPC serial example ==== | ||
Yes, your Arduino 8-bit AVR board [[AVR Programming|can be programmed with FPC]] too. TBD. | Yes, your Arduino 8-bit AVR board [[AVR Programming|can be programmed with FPC]] too. TBD. | ||
+ | |||
+ | == Bidirectional serial communication example using SDPO == | ||
+ | The single directional example is based on synaser, which is not a visual component. SDPO provides a visual wrapper around Synaser, and some people may find this method easier. The following example requires the SDPO package (currently 0.4.0) to be installed in Lazarus. There are other tutorials to show you how to install package. If you cannot find the SDPO component on your component palette, this example will not work. Note. I will try to post the code files on the Forum that started this page, found in the references below. | ||
+ | |||
+ | ==== Bidirectional Lazarus SDPO serial example ==== | ||
+ | Open a new project, and add the following to a form: (Names are the default names) | ||
+ | 1) the SDPO port (under the SDPO tab after you have installed it). | ||
+ | 2) four buttons. Caption as follows: Button1 SEND; Button2 CLEAR; Button3 UP; Button4 DOWN; | ||
+ | 3) a memo. Used to display what is sent and received. | ||
+ | 4) a panel. Used to display which number is being sent. | ||
+ | |||
+ | Configure the Sdposerial1 properties to match the Arduino with the object inspector. | ||
+ | Baudrate = br__9600; Device = *YourSerialPort* ( mine is /dev/ttyUSB0 ). This is probably the same port you use to program your Arduino. FlowControl = fcNone; Parity = pNone; StopBits = sbOne; SynSer = (TBlockSerial); Tag = 0; | ||
+ | |||
+ | Using the code window, find the spot under var where it defines '''Form1: Tform;''' , and add the next three variables: | ||
+ | <syntaxhighlight lang="pascal"> | ||
+ | var | ||
+ | Form1: TForm1; | ||
+ | incomingstring: String; | ||
+ | completestring: String; | ||
+ | messagenum: integer; | ||
+ | </syntaxhighlight> | ||
== Ethernet communication == | == Ethernet communication == |
Revision as of 05:04, 6 February 2021
│
Deutsch (de) │
English (en) │
español (es) │
This article applies to Arduino boards only.
See also: Multiplatform Programming Guide
Many Arduino projects have the need to send data to a PC running a program for data aquisition and visualisation. Lazarus is highly suitable for developing such programs, i.e. to build the PC-sided counterpart of an Arduino project.
For Lazarus developers Arduino opens a whole new world of smart physical sensors and actuators for monitoring, control and data acquisition.
The fpc compiler is even capable to compile programs for Arduino boards itself.
FPC on Arduino
Currently (2017) most Arduino boards carry microcontrollers of the AVR family (Atmega). An other popular arduino board carries a STM32 (ARM Cortex). For both microcontroller families there are fpc compilers available. Programming Arduino with FPC of course doesn't mean to use the arduino ecosystem with just a different language. Nevertheless arduino libs (C++) can be used in fpc programms, but mixing languages obviously is an advanced topic. While compilation the fpc creates a .hex-file (binary), this can be loaded to the microcontroller, arduino board respectively, using a programming software by choice. AVRDude e.g. also supports program upload using the Arduino bootloader.
There are further wiki pages for programing AVR microcontrollers: AVR, AVR Programming
There is also a tutorial on how to use Lazarus on a AtMega328p (Arduino Uno/Nano) in German language: AVR Embedded Tutorial/de
Communication between a Lazarus application and Arduino
The following section describes how your Lazarus/FPC application can communicate with Arduino boards, no matter whether fpc or arduino is running on the arduino board.
One-way serial communication example using Synaser
Here we show how to communicate with your board through serial communication channel.
Lazarus side serial application
There are many ways for serial communication in Lazarus and FPC.
Minimal Lazarus Synaser serial example
We will use Synaser from Synapse library in this example. Create Lazarus application with one form and two buttons. Include Synaser unit and add Synapse package as a new requirement to your project (you do this in Project Inspector). In OnClick event of both buttons put something like this:
procedure TForm1.Button1Click(Sender: TObject);
var
ser: TBlockSerial;
begin
ser := TBlockSerial.Create;
try
ser.Connect('COM1'); // write here Arduino COM port number (on linux it's something like '/dev/ttyUSB0')
Sleep(250);
ser.config(9600, 8, 'N', SB1, False, False);
ser.SendString('on'); // button 2 should have 'off' here
finally
ser.free;
end;
end;
Arduino side serial application
You can program your Arduino in several languages.
Minimal Arduino C sketch serial example
You can follow this nice step by step tutorial. In short, you need to add a led with proper resistor to your input pin 13, compile this sketch in your Arduino IDE, and download it to your board:
int led = 13; // Pin 13
void setup()
{
pinMode(led, OUTPUT); // Set pin 13 as digital out
// Start up serial connection
Serial.begin(9600); // baud rate
Serial.flush();
}
void loop()
{
String input = "";
// Read any serial input
while (Serial.available() > 0)
{
input += (char) Serial.read(); // Read in one char at a time
delay(5); // Delay for 5 ms so the next char has time to be received
if (input == "on")
{
digitalWrite(led, HIGH); // on
}
else if (input == "off")
{
digitalWrite(led, LOW); // off
}
}
}
Minimal Arduino mikroPascal serial example
mikroPascal for AVR can be used to develop Arduino programs. TBD.
Minimal Arduino E-Lab AvrCo serial example
E-Lab AvrCo Multitasking Pascal can be used to develop Arduino programs. TBD.
Minimal Arduino FPC serial example
Yes, your Arduino 8-bit AVR board can be programmed with FPC too. TBD.
Bidirectional serial communication example using SDPO
The single directional example is based on synaser, which is not a visual component. SDPO provides a visual wrapper around Synaser, and some people may find this method easier. The following example requires the SDPO package (currently 0.4.0) to be installed in Lazarus. There are other tutorials to show you how to install package. If you cannot find the SDPO component on your component palette, this example will not work. Note. I will try to post the code files on the Forum that started this page, found in the references below.
Bidirectional Lazarus SDPO serial example
Open a new project, and add the following to a form: (Names are the default names) 1) the SDPO port (under the SDPO tab after you have installed it). 2) four buttons. Caption as follows: Button1 SEND; Button2 CLEAR; Button3 UP; Button4 DOWN; 3) a memo. Used to display what is sent and received. 4) a panel. Used to display which number is being sent.
Configure the Sdposerial1 properties to match the Arduino with the object inspector. Baudrate = br__9600; Device = *YourSerialPort* ( mine is /dev/ttyUSB0 ). This is probably the same port you use to program your Arduino. FlowControl = fcNone; Parity = pNone; StopBits = sbOne; SynSer = (TBlockSerial); Tag = 0;
Using the code window, find the spot under var where it defines Form1: Tform; , and add the next three variables:
var
Form1: TForm1;
incomingstring: String;
completestring: String;
messagenum: integer;
Ethernet communication
Here we show how to communicate with your board through ethernet communication channel.
Lazarus side ethernet application
TBD
Arduino side ethernet application
TBD