Jul 04, 2012 This Tutorial is progressive and will be updated from time to time. The goal is to start from a very basic form of Arduino Serial communication, and progressively add or improve components so that we can ultimately transmit data from one computer to another using an XBee. Dasar Control Arduino With Delphi. Setelah memasukkan program pada delphi kemudian upload program di bawah ini ke dalam arduino: int x = 0; void setup { Serial. I have done this on purpose. I wanted to show you how the Arduino reads numbers from the com port, and how easy it is to exclude vital functionality in your code. I have kept this script simple, however, if you wanted to, you could make the Arduino deal with each of the above situations and more. Multiplication, division and subtraction is handled in the same way. This is the last thing I want you to try before we go to the next stage: 6. Enter this sequence: +1= Result: +1= +1= Result: +1= - Note that the maximum size of a 'long' number is. If you add one to this number, the result is equal to the minimum size of a 'long' which is. STAGE 4: Sending doubles to Arduino: The double doubler. The blue text represents the string (or array of characters) being sent using lines 19 and 21. The red text represents the actual double being sent using lines 20 and 22. You will notice that myDub2 rounds to 2.00. This may or may not be what you want. If you wish to increase the number of decimal places, then you will need to change lines 20 and 22 to the following: 20 Serial.println(myDub1, 4 ); 22 Serial.println(myDub2, 4 ); The number 4 highlighted in red, indicates the number of decimal places you wish to send. And try changing this number to something bigger or smaller. --------------------------------------------------------------------------------------------------- Ok - now that we understand this little Serial.print(double,decimals) trick, we will now get the Arduino to echo back a Double. Before we jump in, perhaps we should try and map out our strategy. For this we will choose a simple decimal to make it easier. So in this example, we will choose 0.1. STAGE 5: Sending sensor data to the Serial Monitor We know the Arduino is very good at copy-Cat games, how about getting the Arduino to send us some data from one of our sensors. We will use the Serial Monitor to view the sensor data. Disconnect the USB cable, and hook up one of your favourite analog sensors to your Arduino. For simplicity, I am going to hook up a potentiometer as per the Fritzing sketch below. Parts Required • Arduino UNO (or equivalent) • Computer with USB cable • Breadboard • Potentiometer • 3 Wires. Hi Anonymous, Please note the difference between Serial.write() and Serial.print(). See stage 4 of this tutorial on how to send a value such as 1.456 from the Arduino to the Serial Monitor. Once you get this part working, then you can work on the other half of your project, which would be the task of getting Simulink to listen for Serial data. If you wanted to send 1.456 through using Serial.write, then I would write the code like this: Serial.write(49); Serial.write(46); Serial.write(52); Serial.write(53); Serial.write(54); Serial.println(); You may want to look at the ASCII table as to how I got those numbers. I'll give you a hint: When you write 49, it sends through a 1 If you choose to send through the value using Serial.print(): I would send it through like this: Serial.println(1.456, 3); If you write it like this: Serial.println(1.456); then it will only send to the default 2 decimal places which is 1.46 Hope this helps Scott. Anonymous Thanks for your answer, Scott C! I understand that I can send different types of data depending on using.write or print. On simulink I have a block that strictly needs his input data to be bytes, that is the reason I am using Serial.write. In that Simulink block, I can choose how the data can be shown (double, single, int8, unint8.). My problem is that just int8 or unint8 works. Once I select 'double' or 'single', the data obtained is not correct. I assume that the problem remains on the sender, the arduino, and consequently Serial.write. Then, once I use Serial.write(1.456),theorically the receiver should or should not be able to obtain 1.456 again? Thanks for your effort! Anonymous Thanks for your help Scott, The block I am using does not understand about strings I guess. In simulink you are able to select the data that is receiving, that is: int8,int16,int32, single and double. You can select the 'parity' too, which I selected 'none' (from: none, even, odd, mark or space), is that correct? And, I also can select 'byte order' between bigEndian or LittleEndian (I have BigEndian but I do not know the difference). I am thinking about sending a byte of the integer of the float and a byte of the 2 decimals of the float.
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. Archives
January 2019
Categories |