Difference between revisions of "BakeBit - JoyStick"

From FriendlyELEC WiKi
Jump to: navigation, search
(Created page with "查看中文")
 
 
(9 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
[[BakeBit - JoyStick/zh|查看中文]]
 
[[BakeBit - JoyStick/zh|查看中文]]
 +
 +
==Introduction==
 +
[[File:BakeBit - JoyStick.jpg|thumb|JoyStick]]
 +
* The BakeBit - JoyStick is a joystick module. It consists of two Sliding rheostats. Its positional states can be measured as X and Y axis values as the calibrated resistance of the two potentiometers.
 +
 +
==Hardware Spec==
 +
* Standard 2.0mm pitch 4-Pin BakeBit Interface
 +
* Analog Output
 +
* PCB dimension(mm): 24 * 42
 +
[[File:BakeBit - JoyStick_PCB.png | frameless|350px|BakeBit - JoyStick]]
 +
* Pin Description:
 +
{| class="wikitable"
 +
|-
 +
|Pin || Description
 +
|-
 +
|GND  || Ground
 +
|-
 +
|5V    || 5V Supply Voltage
 +
|-
 +
|X    || X Axis Output
 +
|-
 +
|Y    || Y Axis Output
 +
|}
 +
 +
== Code Sample: UI Control via Joystick ==
 +
 +
By running this code sample you will see a simple configuration window and you can use the joystick to navigate and change a configuration item’s setting.<br />
 +
A [[BakeBit - OLED 128x64]] module is needed in this test case.
 +
 +
=== Hardware Connection ===
 +
Connect the joystick module to the NanoHat Hub's A0 and the OLED module to the NanoHat Hub's I2C interface:
 +
 +
::{| class="wikitable"
 +
|-
 +
|[[File:UI Control via Joystick-1.jpg |frameless|300px]]    || [[File:UI Control via Joystick-2.jpg |frameless|300px]]
 +
|-
 +
|}
 +
 +
=== Source Code ===
 +
 +
<syntaxhighlight lang="python">
 +
import bakebit_128_64_oled as oled
 +
import bakebit
 +
import time
 +
 +
 +
oled.init()                  #initialze SEEED OLED display
 +
oled.clearDisplay()          #clear the screen and set start position to top left corner
 +
oled.setNormalDisplay()      #Set display to normal mode (i.e non-inverse mode)
 +
oled.setPageMode()          #Set addressing mode to Page Mode
 +
 +
# Uses two pins - one for the X axis and one for the Y axis
 +
# This configuration means you are using port A0
 +
xPin = 0
 +
yPin = 1
 +
bakebit.pinMode(xPin,"INPUT")
 +
bakebit.pinMode(yPin,"INPUT")
 +
 +
texts = ["Wi-Fi"
 +
    , "Bluetooth"
 +
    , "Media Vol"
 +
    , "Alarm Vol"
 +
    , "FontSize"
 +
    , "Brightness"
 +
    , "Dim" ]
 +
 +
values = [True
 +
    , False
 +
    , 50
 +
    , 50
 +
    , 9
 +
    , 80
 +
    , 30 ]
 +
 +
opIndex = 0
 +
m = int(1024.0/5)
 +
while True:
 +
    try:
 +
        # Get X/Y coordinates
 +
        x = bakebit.analogRead(xPin)
 +
        y = bakebit.analogRead(yPin)
 +
 +
        oled.setTextXY(0,0)
 +
        oled.putString("[Settings]")
 +
 +
        if x<m:
 +
            # left
 +
            print("left")
 +
            if type(values[opIndex]) is int:
 +
                values[opIndex]=values[opIndex]-1
 +
                if values[opIndex]<0:
 +
                    values[opIndex] = 0
 +
            elif type(values[opIndex]) is bool:
 +
                values[opIndex] = not values[opIndex]
 +
 +
        elif x>(1024-m):
 +
            # right
 +
            print("right")
 +
            if type(values[opIndex]) is int:
 +
                values[opIndex]=values[opIndex]+1
 +
                if values[opIndex]>999:
 +
                    values[opIndex] = 999
 +
            elif type(values[opIndex]) is bool:
 +
                values[opIndex] = not values[opIndex]
 +
        elif y<m:
 +
opIndex = opIndex - 1
 +
        elif y>(1024-m):
 +
opIndex = opIndex + 1
 +
        elif opIndex<0:
 +
opIndex=6
 +
        elif opIndex>6:
 +
opIndex=0
 +
 +
        for i in range(7):
 +
            oled.setTextXY(0,i+1)
 +
            valueStr = ""
 +
            if type(values[i]) is int:
 +
                valueStr = str(values[i])
 +
            elif type(values[i]) is bool:
 +
                if values[i]:
 +
                    valueStr = "On"
 +
                else:
 +
                    valueStr = "Off"
 +
            for j in range(3-len(valueStr)):
 +
                valueStr = " " + valueStr
 +
 +
            title = texts[i]
 +
            if len(title) > 10:
 +
                title = title[:10]
 +
 +
            for j in range(10-len(title)):
 +
                title = title + " "
 +
 +
            if opIndex == i:
 +
                oled.putString("> " + title + " " + valueStr)
 +
            else:
 +
                oled.putString("  " + title + " " + valueStr)
 +
    print("x =", x, " y =", y, " opIndex=", opIndex)
 +
 +
    except IOError:
 +
        print ("Error")
 +
</syntaxhighlight>
 +
 +
[https://github.com/friendlyarm/BakeBit/blob/master/Software/Python/bakebit_prj_UIControl_via_Joystick.py Github]
 +
 +
=== Run Code Sample ===
 +
 +
Before you run the code sample you need to follow the steps in [http://wiki.friendlyarm.com/bakebit bakebit tutorial] to install the BakeBit package.<br />
 +
Enter the "BakeBit/Software/Python" directory and run the "bakebit_prj_UIControl_via_Joystick.py" program:
 +
<syntaxhighlight lang="bash">
 +
cd ~/BakeBit/Software/Python
 +
sudo python bakebit_prj_UIControl_via_Joystick.py
 +
</syntaxhighlight>
 +
 +
=== Observation ===
 +
 +
When the program runs a simple configuration window will be presented on the OLED. When you move the joystick up or down the cursor will move up or down to a configuration item. When you move the joystick left or right the item’s setting will be changed accordingly.<br />
 +
[[File:UI Control via Joystick-Result.jpg |frameless|300px]]
 +
 +
==Resources==
 +
*[Schematic]([http://wiki.friendlyarm.com/wiki/images/6/67/10-SCHEMATIC_JoyStick.pdf BakeBit - JoyStick.pdf])
 +
*[BakeBit Github Project Page](https://github.com/friendlyarm/BakeBit)
 +
*[BakeBit Starter Kit User's Manual](http://wiki.friendlyarm.com/bakebit/bakebit_starter_kit_manual_en.pdf)
 +
 +
==Update Log==
 +
===December-15-2016===
 +
* Released English version
 +
 +
===Jan-19-2017===
 +
* Renamed "NEO-Hub" to "NanoHat-Hub"
 +
 +
===Jan-20-2017===
 +
* Renamed "NanoHat-Hub" to "NanoHat Hub"

Latest revision as of 08:21, 20 January 2017

查看中文

1 Introduction

JoyStick
  • The BakeBit - JoyStick is a joystick module. It consists of two Sliding rheostats. Its positional states can be measured as X and Y axis values as the calibrated resistance of the two potentiometers.

2 Hardware Spec

  • Standard 2.0mm pitch 4-Pin BakeBit Interface
  • Analog Output
  • PCB dimension(mm): 24 * 42

BakeBit - JoyStick

  • Pin Description:
Pin Description
GND Ground
5V 5V Supply Voltage
X X Axis Output
Y Y Axis Output

3 Code Sample: UI Control via Joystick

By running this code sample you will see a simple configuration window and you can use the joystick to navigate and change a configuration item’s setting.
A BakeBit - OLED 128x64 module is needed in this test case.

3.1 Hardware Connection

Connect the joystick module to the NanoHat Hub's A0 and the OLED module to the NanoHat Hub's I2C interface:

UI Control via Joystick-1.jpg UI Control via Joystick-2.jpg

3.2 Source Code

import bakebit_128_64_oled as oled
import bakebit
import time
 
 
oled.init()                  #initialze SEEED OLED display
oled.clearDisplay()          #clear the screen and set start position to top left corner
oled.setNormalDisplay()      #Set display to normal mode (i.e non-inverse mode)
oled.setPageMode()           #Set addressing mode to Page Mode
 
# Uses two pins - one for the X axis and one for the Y axis
# This configuration means you are using port A0
xPin = 0
yPin = 1
bakebit.pinMode(xPin,"INPUT")
bakebit.pinMode(yPin,"INPUT")
 
texts = ["Wi-Fi"
    , "Bluetooth"
    , "Media Vol"
    , "Alarm Vol"
    , "FontSize"
    , "Brightness"
    , "Dim" ]
 
values = [True
    , False
    , 50
    , 50
    , 9
    , 80
    , 30 ]
 
opIndex = 0
m = int(1024.0/5)
while True:
    try:
        # Get X/Y coordinates
        x = bakebit.analogRead(xPin)
        y = bakebit.analogRead(yPin)
 
        oled.setTextXY(0,0)
        oled.putString("[Settings]")
 
        if x<m:
            # left
            print("left")
            if type(values[opIndex]) is int:
                values[opIndex]=values[opIndex]-1
                if values[opIndex]<0:
                    values[opIndex] = 0
            elif type(values[opIndex]) is bool:
                values[opIndex] = not values[opIndex]
 
        elif x>(1024-m):
            # right
            print("right")
            if type(values[opIndex]) is int:
                values[opIndex]=values[opIndex]+1
                if values[opIndex]>999:
                    values[opIndex] = 999
            elif type(values[opIndex]) is bool:
                values[opIndex] = not values[opIndex]
        elif y<m:
			opIndex = opIndex - 1
        elif y>(1024-m):
			opIndex = opIndex + 1
        elif opIndex<0:
			opIndex=6
        elif opIndex>6:
			opIndex=0
 
        for i in range(7):
            oled.setTextXY(0,i+1)
            valueStr = ""
            if type(values[i]) is int:
                valueStr = str(values[i])
            elif type(values[i]) is bool:
                if values[i]:
                    valueStr = "On"
                else:
                    valueStr = "Off"
            for j in range(3-len(valueStr)):
                valueStr = " " + valueStr
 
            title = texts[i]
            if len(title) > 10:
                title = title[:10]
 
            for j in range(10-len(title)):
                title = title + " "
 
            if opIndex == i:
                oled.putString("> " + title + " " + valueStr)
            else:
                oled.putString("  " + title + " " + valueStr)
    	print("x =", x, " y =", y, " opIndex=", opIndex)	
 
    except IOError:
        print ("Error")

Github

3.3 Run Code Sample

Before you run the code sample you need to follow the steps in bakebit tutorial to install the BakeBit package.
Enter the "BakeBit/Software/Python" directory and run the "bakebit_prj_UIControl_via_Joystick.py" program:

cd ~/BakeBit/Software/Python
sudo python bakebit_prj_UIControl_via_Joystick.py

3.4 Observation

When the program runs a simple configuration window will be presented on the OLED. When you move the joystick up or down the cursor will move up or down to a configuration item. When you move the joystick left or right the item’s setting will be changed accordingly.
UI Control via Joystick-Result.jpg

4 Resources

5 Update Log

5.1 December-15-2016

  • Released English version

5.2 Jan-19-2017

  • Renamed "NEO-Hub" to "NanoHat-Hub"

5.3 Jan-20-2017

  • Renamed "NanoHat-Hub" to "NanoHat Hub"