10. Chalkboard Electronics Touchscreen
10" or 7" Form Factor
Connects via HDMI/USB
Tested with JavaFX 8
10% Exclusive Discount:
G1F0U796Z083
11. How to Setup Your Pi
> Step 1: Install Linux
> Step 2: Download/Copy Java 8 for ARM
> Step 3: Deploy and Run JVM Language Apps
http://steveonjava.com/
javafx-on-raspberry-pi-3-easy-steps/
12. Electronic Safety!
> Unplug from wall before wiring
> Get rid of static by touching a metal
surface
> Don't touch exposed wires/metal
> Never remove/insert SD Card while
power is on
12
13. What Comes in Your Lab Kit
1. Touch Screen
2. SD Card
3. Keyboard
4. Yellow Box:
Power Adapter
LVDS Cable/Board
Raspberry Pi Model B
Mini-USB Cable (power)
Please Save All the Packaging for Later
14. Hooking Up the Pi (Part A)
1. Insert the SD Card in to the Pi
Will appear upside down when looking at the top
of your Pi
2. Insert the HDMI board into the Pi's HDMI
jack
3. Connect the Pi power to the HDMI board
Use the Micro USB Cable (short one)
14
Important: Connect everything before plugging into the wall
15. Hooking Up the Pi (Part B)
4. Slide the LCD cable into the back of the display
Side with gold connectors goes up
Be careful, the connector is fragile!
5. Hook up the USB keyboard
6. Connect the USB end to one of the Pi's USB host ports
This provides touch input
15
Verify connections and plug into power now
16. Is it Working?
> Should get a bunch of flashing LEDs to indicate booting
Boot takes approx 30 seconds
> The LCD screen should light up
Might be dim if the light sensor is obstructed
> And you will should see a Linux boot screen with lots of text
17. Logging In
At the login prompt type your username:
> pi
And enter the password:
> raspberry
18. Running the JavaFX Sample Application
Change directory to the project folder
> cd MaryHadALittleLambda
Run the build script
> ant
20. Hacking the Code
Run the nano text editor:
> nano src/sample/MapObject.java
Save your changes:
> Control-O Enter
Exit Nano:
> Control-X
Compile/Run:
> ant
21. Mary Had a Little Lambda
Mary had a little lambda
Whose fleece was white as snow
And everywhere that Mary went
Lambda was sure to go!
https://github.com/steveonjava/MaryHadALittleLambda
22. Generating Streams
From a collection:
> anyCollection.stream();
Known set of objects:
> Stream.of("bananas", "oranges", "apples");
Numeric range:
> IntStream.range(0, 50)
Iteratively:
> Stream.iterate(Color.RED,
> c -> Color.hsb(c.getHue() + .1, c.getSaturation(),
> c.getBrightness()));
22
23. Let's Create Some Barn Animals!
SpriteView tail = s.getAnimals().isEmpty() ?
s : s.getAnimals().get(s.getAnimals().size() - 1);
Stream.iterate(tail, SpriteView.Lamb::new)
.skip(1).limit(7)
.forEach(s.getAnimals()::add);
23
28. Filtering Collections
Collection.removeIf
> Removes all elements that match the predicate
List.replaceAll
> In-place filtering and replacement using an unary operator
ObservableCollection.filtered
> Returns a list filtered by a predicate this is also Observable
28
29. Picky Eaters…
Predicate<SpriteView> pure =
a -> a.getColor() == null;
mealsServed.set(mealsServed.get() +
s.getAnimals().filtered(pure).size()
);
s.getAnimals().removeIf(pure);
29
31. Mapping Streams
Applies a Map Function to each element:
> Function<? super T, ? extends R>
Result: List is the same size, but may be a different type.
31
35. Flat Map
Applies a One-to-Many Map Function to each element:
> Function<? super T, ? extends Stream<? extends R>>
And then flattens the result into a single stream.
Result: The list may get longer and the type may be different.
35
38. Reduce
Reduces a list to a single element given:
> Identity: T
> Accumulator: BinaryOperator<T>
Result: List of the same type, but only 1 element left.
38
39. And the (formerly little) Fox ate them all!
Double mealSize = shepherd.getAnimals()
.stream()
.map(SpriteView::getScaleX)
.reduce(0.0, Double::sum);
setScaleX(getScaleX() + mealSize * .2);
setScaleY(getScaleY() + mealSize * .2);
shepherd.getAnimals().clear();
39
41. Mary Had a Little Lambda Project
> Open-source project to demonstrate lambda features
> Visual representation of streams, filters, and maps
41
https://github.com/steveonjava/MaryHadALittleLambda
42. Stuff to do…
> Changes to MaryHadALittleLambda:
Change the number of sheep
Make the rainbow have different colors
Change the fox size to be fatter/skinnier
Add new graphics (additional image files under images/extra)
42
camel.png lion.png greendragon.png cow.png Brownbear.png
45. Wiring LEDs
> Wire the elements in
series:
Connect the long end
of the LED to GPIO
Connect the short end
of the LED to the
resistor
Connect the resistor
to Ground
45
To GPIO To Ground
46. Using a Breadboard
> Pins are connected
horizontally in the center
> The edges are connect
vertically
> No current passes the
center line
46
47. Pi Cobbler
> Connects your Pi to the
Breadboard
> The white line is Pin 1
> Connect it in the center
top of your Breadboard
47
48. Pi4J
> The samples are located in
/opt/pi4j/examples
> Compile the samples by typing "./build"
> Instructions for running the samples are
printed out at the end of the build
> Pi4j needs root access to use GPIO (use
"sudo")
48
50. Wiring Buttons
> Connect a circuit
across two legs
> While the button is
pressed…
The legs numbered 1
and 2 are connected
The legs numbered 3
and 4 are connected
50
51. ListenGpioExample
51
> Demonstrates Listening to a pin:
addListener(pinListener)
> Change the message/action when
a button is pressed!
sudo java -classpath .:classes:/opt/pi4j/lib/'*' ListenGpioExample
55. The Heart of the EV3
> TI Sitara AM1808
ARM9, 300Mhz
> 64MB RAM / 16MB Flash
> Analog to Digital Converter
> 4 Motor Ports
> 4 Sensor Ports
> Bluetooth / USB
> MicroSD
64. Bluetooth Pairing
> Make sure your Lego is turned on
> Open "Devices and Printers" from the
Start menu
> Click "Add a device"
> Select the Lego brick
> After pairing, right click on the new
device and choose "Connect using" >
"Access point"
65. Eclipse Setup
> Open Eclipse
> Go to "Preferences"
> Click on leJOS EV3
> Change the brick name to
"10.0.1.1"
65
66. Creating a New LeJOS Project
> Go to "File" > "New" > "Project…"
> Choose a LeJOS EV3 Project
66
67. Create a Class File
> Create a new class ("File" > "New"
> "Class")
> Give it a package (e.g. sample)
> Give it a name (e.g. LCDTest)
67
68. Simple LeJOS Application
import lejos.nxt.Button;
import lejos.nxt.LCD;
public class EV3FirstProgram {
public static void main(String[] args) {
LCD.clear();
LCD.drawString("First EV3 Program", 0, 5);
Button.waitForAnyPress();
LCD.clear();
LCD.refresh();
}
}
91. Wind Turbine Wiring
> Port A – Medium Moto
Power Fan
> Port B – Large Motor
Rotate Wind Turbine
> Port 1 – Light Sensor
Track Ambient Light
91
94. Making the Wind turbine turn
public class WindTurbine {
public static void main(String[] args) {
EV3MediumRegulatedMotor fan =
new EV3MediumRegulatedMotor(MotorPort.A);
fan.setSpeed(1500);
fan.setAcceleration(150);
fan.backward();
Delay.msDelay(10000);
}
}
95. Making the Tower spin
public class WindTurbine {
public static void main(String[] args) {
EV3LargeRegulatedMotor base =
new EV3LargeRegulatedMotor(MotorPort.B);
base.setSpeed(80);
base.rotateTo(-90);
base.rotateTo(90);
}
}
96. Checking the Ambient Light
public class WindTurbine {
public static void main(String[] args) {
EV3ColorSensor light =
new EV3ColorSensor(SensorPort.S1);
float[] sample = new float[1];
SensorMode mode = light.getAmbientMode();
mode.fetchSample(sample, 0);
LCD.drawString("Light = " + sample[0], 0, 4);
Delay.msDelay(5000);
}
}
97. Putting it all together…
> Can you write a program that will:
1. Rotate the fan in a circle
2. Check the ambient light while rotating
3. Move back to the brightest angle
4. Spin the fan
http://commons.wikimedia.org/wiki/Wind_generator#mediaviewer/File:Eolienne_et_centrale_thermique_Nuon_Sloterdijk.jpg
99. Safe Harbor Statement
The preceding is intended to outline our general product
direction. It is intended for information purposes only, and
may not be incorporated into any contract. It is not a
commitment to deliver any material, code, or functionality,
and should not be relied upon in making purchasing
decisions. The development, release, and timing of any
features or functionality described for Oracle’s products
remains at the sole discretion of Oracle.