Make a blog post documenting your project.
It’s also available as a Gist on Github.
#include "simple-OSC/simple-OSC.h" // create OSC object UDP osc; // set IP addresses and ports for I/O IPAddress outIp(128, 237, 246, 8); unsigned int outPort = 9000; unsigned int inPort = 3000; // creat named variables for pins int leftMotorPin = D1; int rightMotorPin = D0; int ledPin = D7; // runs once at the beginning of the program void setup() { // start serial & OSC Serial.begin(115200); osc.begin(inPort); pinMode(leftMotorPin, OUTPUT); pinMode(rightMotorPin, OUTPUT); pinMode(ledPin, OUTPUT); // You can view Serial.print() commands sent from the Photon via your computer's console (while it's plugged in to the computer). // Do `ls /dev/tty.usb*` in terminal to find the address of the Photon, // then do `screen ADDRESS BAUD` to make a serial monitor. // For example, if my Photon is "/dev/tty.usbmodem331", I'd do 'screen /dev/tty.usbmodem331 115200'. // while waiting for connection to be set up while (!WiFi.ready()) { // wait and print to console delay(500); Serial.print("."); } // print to console when connection is started Serial.println(""); Serial.println("WiFi connected"); // get Photon's IP:PORT and print it to console IPAddress ip = WiFi.localIP(); Serial.print(F("ip : ")); Serial.print(ip); Serial.print(F(" : ")); Serial.println(inPort); } // continuously runs throughout the life of the program, after setup() void loop() { // RECEIVE === // create message object OSCMessage inMessage; // if the incoming OSC packet is larger than 0 bytes int size = 0; size = osc.parsePacket(); if (size > 0) { // copy each byte from the incoming packet to the message object while (size > 0) { inMessage.fill(osc.read()); size--; } // if the message can be parsed if (inMessage.parse()) { Serial.println("Message Received"); // route it to a callback function inMessage.route("/A", leftCallback); inMessage.route("/B", rightCallback); } } // SEND === // To test sending messages, you can use `nc -ul PORT` in terminal to listen to incoming messages on localhost. // For example, if outIp is my computer's IP address (128.237.246.8), and outPort is the port I'm sending to (9000), // then I'd run `nc -ul 9000` in terminal, and send a message from the Photon using the following example. // // For TouchOSC, you'd want to send the appropriate route to your mobile device's IP. Follow instructions [here](http://hexler.net/docs/touchosc) // create an outgoing message object OSCMessage outMessage("/sensor"); // add parameters to the object outMessage.addString("test"); outMessage.addFloat(-3.14); outMessage.addInt(-1); // send the object outMessage.send(osc, outIp, outPort); } // callbacks are run asynchronously from the main loop() void leftCallback(OSCMessage &inMessage) { Serial.println("LEFT CALLBACK"); if (inMessage.getInt(0) == 0) { Serial.println("LEFT OFF"); digitalWrite(leftMotorPin, LOW); digitalWrite(ledPin, LOW); } else { Serial.println("LEFT ON"); digitalWrite(leftMotorPin, HIGH); digitalWrite(ledPin, HIGH); } } void rightCallback(OSCMessage &inMessage) { Serial.println("RIGHT CALLBACK"); Serial.println(inMessage.getInt(0)); if (inMessage.getInt(0) == 0) { Serial.println("RIGHT OFF"); digitalWrite(rightMotorPin, LOW); digitalWrite(ledPin, LOW); } else { Serial.println("RIGHT ON"); digitalWrite(rightMotorPin, HIGH); digitalWrite(ledPin, HIGH); } }]]>
You will then make a blog post of your discoveries, following the format below:
IMAGE: You will begin your post with an image of your chosen project. Images must be at least 756 pixels wide, and must be linked to the full-size image.
TEXT: Here you will provide text in the format specified below.
LINK: Please post a linked URL of the project here.
VIDEO (OPTIONAL): If there is a youtube or vimeo video, please link embed it here.
Repeat these steps three times!
Each post should contain THREE relevant projects. Projects you write about should be projects you’ve newly discovered while doing this research, i.e., projects you haven’t come across before (though feel free to add those to your post beyond the three).
]]>Make a wheeled robot that completes a challenge on a whiteboard table. Your team may choose from one of the challenges below:
This is a fast and dirty project which will give you guys the opportunity to program your Photon boards, design physical mechanisms, utilize the tools available in IDeATe, and build with available hardware. We don’t expect these prototypes to be pretty. This project is about the process and the focus should be on functionality and simplicity. You only have a couple of weeks and a lot to learn.
You will work in teams of 2 (may have one team of 3 if there is an odd number). We will assign groups based on the course survey and discussions in class. Your team will select a robot type from the list above and get cranking. We will provide examples of DC motors, servos, stepper motors, ultrasonic depth sensors, photoresistors, etc.
Some example projects are listed below for inspiration and instruction (we will add to this list as you guys find more useful examples):
The final (working) prototype is due Tuesday, January 26th.
In addition, a blog post including the following is due 1/26, as well:
The purpose of this assignment is to ensure all students are familiarized with the PhysComp lab and the primary computational tools used for the duration of the course.
npm -v
into Terminal. If it responds with a number (like 3.3.12), you’re good to go.npm install -g particle-cli
sudo
if you get install errors.particle setup
Control-c
to exit the prompt. IMPORTANT: Do not continue onto further steps in the wizard.particle serial mac