Lab: Intro to Asynchronous Serial Communications
Preparing my breadboard: Connected my Arduino Nano, ADXL335 accelerometer, soldered my sensor board to the pins, and added a push button to power and ground
Initializing communication: Sending the value from one sensor, the first analog sensor (the first axis of the accelerometer) and divide the output to give a maximum value of 1023
To get the output into a single byte, mapping the output to a range from 0-255
Sending data in many formats: Trying the program and viewing the results in my serial monitor
Sending the values for all 3 sensors: Formatting multiple serial data with punctuation (to punctuate each set of data uniquely)
Running a program that reads the two analog sensors on the board along with a digital switch (printing them out in the format of analog1, analog2, switch)
Flow control — call and response (handshaking): Asynchronous serial communication is asynchronous, you can run into a problem when the sender sends faster than the receiver can read, and thus need to implement flow control. Adding handshaking to code above:
The code worked for me and I was able to see the word ‘hello’ and a string of sensor values at the end of your hellos after typing a character in the output box.
Reflection: Through this lab, I was able to get a basic understanding of serial data, but definitely hope to continue to familiarize myself with it even more through working on future labs and assignments. I feel like overall all the code and serial data output was working for me, but I was slightly confused a little at the beginning of the lab while initializing communication. From my understanding, I was supposed to get a maximum value of 1023 but the value of my serial outputs are roughly in the 200-300 range and far from reaching 1023. After adjusting the code to get the output into a single byte (output range from 0-255), my serial values are roughly around 60-ish and also not reaching close to 255. I’m assuming that this was either due to the values of what my specific accelerometer produces, or because I wasn’t putting that much movement or vibration to my accelerometer. I plan on going back to experiment and test out my accelerometer a bit more to hopefully get a clearer understanding of the how it works and the serial values it produces. Other than that, I was able to move through this lab fairly smoothly and view the various formats of serial data in my Arduino’s serial monitor.
Lab: Serial Input to p5.js
Preparing my breadboard: Connected my Arduino Nano to power and ground, and added a potentiometer to my breadboard
Connecting to computer with p5.js serial port: After programing my Arduino to read the analog input, I installed the p5 serial control app and followed the instructions to connect my Arduino to my p5.js editor
I then downloaded the “p5.serialport.js” file and uploaded it to my p5.js sketch, and also added in the provided line to my index.html file as instructed to.
The p5.js sketch: To know what serial ports are available in the operating system, I ran the provided code and was able to get a list of ports in my console log
Serial events: After inserting my port name to the sketch, I also added in the serial events in the setup( ) function, and added in the new functions to respond to the callbacks which I just declared underneath. After modifying the serialEvent( ) function, setting up a canvas, and making my draw( ) function to print the sensor value to the screen, I received an error message and the sensor value being undefined (as shown in the image bellow)
After troubleshooting the error, I realized that it was due to the fact that I was working in Safari, and was able to resolve the issue after switching to Chrome.
Drawing a graph with the sensor values: Modifying the code and adding in a drawData( ) function, I was able to run my sketch and get an output of my sensor values in the form of a graph. I tried to play around and turned my potentiometer up and down fairly quickly, and bellow is a screenshot of my graph.
Reading serial data as a string: After changing my Arduino program code and editing my serialEvent( ) function with the provided code, I seem to be having some issues as the graph doesn’t show up. However, I didn’t receive an error message in the console log either and thus was slightly confused and will continue to work on troubleshooting the part to my best ability.
Reflection: As I don’t feel that confident with programing, I feel like I still need to further inspect the provided code to better understand how the serialEvent functions work. I struggled a little bit while trying to get my sensor values working in p5.js at the beginning, but was able to figure out what I was doing wrong or missing in my code to get it to work. However, in the last part of the lab of trying to read my serial data as a string instead, I couldn’t figure out what I was doing wrong as my graph wasn’t showing up after modifying my code. I will definitely try to come back to this part again after I familiarize myself more with woking with serial data.
Lab: Serial Output from p5.js
Preparing my breadboard: Connected my Arduino Nano to power and ground, and added a LED to my breadboard
Programming my microcontroller: Programmed my Arduino to read the analog input with the provided code
Programming p5.js for serial communication: After following the same instructions as the serial input lab to allow access to my port with the serial control app, I then programmed in p5.js with the provided code for setup( ), serial events( ), draw( ), mouseDragged( ), and keyPressed( ) functions
After running my sketch, I was able to get my LED to go brighter or dimmer with both the vertical mouse drag and through pressing on the keys 0 to 9.
Sending ASCII-Encoded Serial Data: Re-programmed my microcontroller code in Arduino
Programming p5.js to control LED: Changed the keyPressed( ) function to read H or L instead of 0 through 9
After running my sketch, I was able to get my LED to turn on as I pressed on the H key and turn off as I pressed on the L key.
Processing ASCII-encoded strings with Arduino: Modifying the Arduino sketch with the provided code using Serial.parseInt( ) this time
I was able to send in ASCII numeric string numbers and see the return values in my serial monitor. I then edited the serial.write( ) command in my p5.js sketch as instructed, and was able to get it to work as well.
Reflection: I personally feel that this serial output lab is slightly more straightforward compared to the input lab as I was able to move through the lab without getting stuck on any parts. I enjoyed learning to connect my Arduino with my computer and to control my LED with my computer keys instead of external buttons like before. I am definitely looking forward to further brainstorming on what I can create and hopefully execute my idea with this newly learned skill in my second project.