Skip to content

Commit a7b6de0

Browse files
committed
IOIO: added working analogInput example
1 parent 5670e1c commit a7b6de0

File tree

4 files changed

+28
-3
lines changed

4 files changed

+28
-3
lines changed

ioio/samples/slider-pot.bas

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ print "ready!!!"
88

99
while 1
1010
print analogIn.read()
11-
delay 100
11+
delay 10
1212
wend
1313

1414
print "done"

ioio/src/main/java/ioio/lib/pc/PausedInputStream.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,11 @@
88
* Pause between read() to avoid excessive CPU usage
99
*/
1010
class PausedInputStream extends BufferedInputStream {
11+
private long lastAccessMillis;
12+
1113
public PausedInputStream(InputStream inputStream) {
1214
super(inputStream);
15+
lastAccessMillis = System.currentTimeMillis();
1316
}
1417

1518
@Override
@@ -32,7 +35,7 @@ public synchronized int read() throws IOException {
3235

3336
private void pause() throws IOException {
3437
try {
35-
Thread.sleep(10);
38+
lastAccessMillis = Timer.tick(lastAccessMillis);
3639
} catch (InterruptedException e) {
3740
throw new IOException(e);
3841
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package ioio.lib.pc;
2+
3+
import java.io.IOException;
4+
5+
public class Timer {
6+
private static final int RATE_MILLIS = 50;
7+
8+
private Timer() {
9+
// no access
10+
}
11+
12+
public static long tick(long lastAccessMillis) throws InterruptedException {
13+
long interval = System.currentTimeMillis() - lastAccessMillis;
14+
if (interval < RATE_MILLIS) {
15+
Thread.sleep(RATE_MILLIS - interval);
16+
}
17+
return System.currentTimeMillis();
18+
}
19+
}

ioio/src/main/java/net/sourceforge/smallbasic/ioio/IOService.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import ioio.lib.api.IOIO;
88
import ioio.lib.api.exception.ConnectionLostException;
9+
import ioio.lib.pc.Timer;
910
import ioio.lib.spi.Log;
1011
import ioio.lib.util.IOIOLooper;
1112
import ioio.lib.util.IOIOLooperProvider;
@@ -69,6 +70,7 @@ private void registerPin(int pin) throws IOException {
6970

7071
public class IOServiceLooper implements IOIOLooper {
7172
public IOIO ioio;
73+
private long lastAccessMillis;
7274

7375
@Override
7476
public void disconnected() {
@@ -88,7 +90,7 @@ public void incompatible(IOIO ioio) {
8890

8991
@Override
9092
public void loop() throws ConnectionLostException, InterruptedException {
91-
Thread.sleep(10);
93+
lastAccessMillis = Timer.tick(lastAccessMillis);
9294
for (IOTask next: ioTasks) {
9395
next.loop();
9496
}
@@ -97,6 +99,7 @@ public void loop() throws ConnectionLostException, InterruptedException {
9799
@Override
98100
public void setup(IOIO ioio) {
99101
this.ioio = ioio;
102+
this.lastAccessMillis = System.currentTimeMillis();
100103
for (IOTask next: ioTasks) {
101104
next.setup(ioio);
102105
}

0 commit comments

Comments
 (0)