Jump to content

Segment Display 4x7: API request


JavaLaurence

Recommended Posts

Without the API, you need to jump through a few hoops to manage the segments yourself..

package com.softwarepearls.apps.hardware.tinkerforge.clock.sevensegment;

import static com.softwarepearls.lego.hardware.tinkerforge.enums.BrickletType.BRICKLET_SEGMENT_DISPLAY_4x7;

import com.softwarepearls.lego.graphics.SevenSegmentDigits;
import com.softwarepearls.lego.hardware.tinkerforge.interfaces.io.SegmentDisplay4x7;
import com.softwarepearls.lego.hardware.tinkerforge.stack.BrickletDescriptor;
import com.softwarepearls.lego.hardware.tinkerforge.stack.TinkerForgeStack;
import com.softwarepearls.lego.time.Frequency;
import com.softwarepearls.lego.time.TimeAndDateKit;
import com.tinkerforge.TinkerforgeException;

import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

/**
* Bare-bones 24 hour HH:MM clock rendered on a Tinkerforge 7-segment display.
*/
public final class Clock {

private static final int NUM_DIGITS = 4;
private static final String DISPLAY_UID = "kTz";
private static final String TO_TF_SEGMENTS_LUT = "AFBGECD";
private final static DateFormat DATE_FORMATTER = new SimpleDateFormat("HHmm");

private static final List<BrickletDescriptor> EXPECTED_BRICKLETS = Arrays.asList(
//
		new BrickletDescriptor(BRICKLET_SEGMENT_DISPLAY_4x7, DISPLAY_UID));

private static void go() throws TinkerforgeException, IOException {

	final TinkerForgeStack tinkerForgeStack = TinkerForgeStack.initializeTinkerForgeStack(EXPECTED_BRICKLETS);

	final SegmentDisplay4x7 display = (SegmentDisplay4x7) tinkerForgeStack.getBricklet(DISPLAY_UID);

	final Frequency clockRefreshFrequency = Frequency.EVERY_SECOND;
	while (true) {

		final int hhmmDigits = timeDigitsFor(new Date());

		final short[] segments = getSegmentBitsFor(hhmmDigits);
		final boolean flashingColon = (TimeAndDateKit.currentSecond() & 1) == 0;

		display.setSegments(segments, (short) 2, flashingColon);

		clockRefreshFrequency.delay();
	}
}

private static int timeDigitsFor(final Date time) {

	final String timeString = DATE_FORMATTER.format(time);

	return Integer.parseInt(timeString);
}

private static short[] getSegmentBitsFor(final int value) {

	if ((value < 0) || (value > 9999)) {
		throw new IllegalArgumentException("Illegal value for 7-segment display: " + value);
	}

	final short[] segments = new short[NUM_DIGITS];
	int dddd = value;
	for (int i = 0; i < NUM_DIGITS; i++) {
		segments[NUM_DIGITS - 1 - i] = segmentBitsForDigit(dddd);
		dddd = dddd / 10;
	}
	return segments;
}

private static short segmentBitsForDigit(final int d) {

	final int digit = d % 10;

	final String litSegments = SevenSegmentDigits.DIGIT_DEFINITIONS[digit];
	short segmentBits = 0x00;
	for (int i = 0; i < litSegments.length(); i++) {
		final char ch = litSegments.charAt(i);
		final int bitNumber = TO_TF_SEGMENTS_LUT.charAt(ch - 'A') - 'A';
		segmentBits |= 1 << bitNumber;
	}
	return segmentBits;
}

public static void main(final String[] args) throws TinkerforgeException, IOException {

	go();
}
}

Link zu diesem Kommentar
Share on other sites

  • 2 weeks later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...