Crude Accelerometer Level on Android

This is the place to post any code that you want to share with the community. Only completed scripts should be posted here.
Note: posts here are not necessarily endorsed by the community, and may represent amateur or even bad practices.

Crude Accelerometer Level on Android

Postby Guitarman2010 » Mon Aug 18, 2014 8:16 pm

I'm learning Python and here is a crude program I wrote for an Android device with an accelerometer to be used as a leveling device. This was written with the landscape orientation in mind.

Code: Select all
import android
import os


#Initiates the android module
droid = android.Android()


#Acts as a CLEAR statement for console
def cls():
  os.system(['clear','cls'][os.name == 'nt'])


#Starts the device's sensors for reading data
droid.startSensingTimed(1,5000)



#counter variable short for "continue" so the program will end at some point
cont = 0


while cont < 2000:

     #Reads actual accelerometer data in 3 different axis
     (id, result, error) = droid.sensorsReadAccelerometer()
     
     #This would print all data for accelerometer (3 axis)
     #print result


#These are when the device's left side is raised
     if result[1] == 0:
         print
         print
         print
         print '                            |0|'
         print '                            *-*'
         cls()       
     elif result[1] < 0.09 and result[1] >= 0:
         print
         print
         print
         print '                            |0|'
         print '                            *-*'
         cls()
     elif result[1] > 0.1 and result[1] < 0.5:
         print
         print
         print
         print '                             0'       
         print '                           *-*'
         cls()
     elif result[1] > 0.5 and result[1] < 1:
         print
         print
         print
         print '                             0'       
         print '                          *-*'
         cls()
     elif result[1] > 1 and result[1] < 1.5:
         print
         print
         print
         print '                             0'       
         print '                         *-*'
         cls()
     elif result[1] > 1.5 and result[1] < 2:
         print
         print
         print
         print '                             0'       
         print '                        *-*'
         cls()
     elif result[1] > 2 and result[1] < 2.5:
         print
         print
         print
         print '                             0'       
         print '                       *-*'
         cls() 
     elif result[1] > 2.5 and result[1] < 3:
         print
         print
         print
         print '                             0'       
         print '                      *-*'
         cls()
     elif result[1] > 3 and result[1] < 3.5:
         print
         print
         print
         print '                             0'       
         print '                     *-*'
         cls()                                     
     elif result[1] > 3.5 and result[1] < 4:
         print
         print
         print
         print '                             0'       
         print '                    *-*'
         cls() 
     elif result[1] > 4 and result[1] < 4.5:
         print
         print
         print
         print '                             0'       
         print '                   *-*'
         cls() 
     elif result[1] > 4.5 and result[1] < 5:
         print
         print
         print
         print '                             0'       
         print '                  *-*'
         cls()
     elif result[1] > 5 and result[1] < 5.5:
         print
         print
         print
         print '                             0'       
         print '                 *-*'
         cls()
     elif result[1] > 5.5 and result[1] < 6:
         print
         print
         print
         print '                             0'       
         print '                *-*'
         cls()
     elif result[1] > 6 and result[1] < 6.5:
         print
         print
         print
         print '                             0'       
         print '               *-*'
         cls()
     elif result[1] > 6.5 and result[1] < 7:
         print
         print
         print
         print '                             0'       
         print '              *-*'
         cls()
     elif result[1] > 7 and result[1] < 7.5:
         print
         print
         print
         print '                             0'       
         print '             *-*'
         cls()
     elif result[1] > 7.5 and result[1] < 8:
         print
         print
         print
         print '                             0'       
         print '            *-*'
         cls()
     elif result[1] > 8 and result[1] < 8.5:
         print
         print
         print
         print '                             0'       
         print '           *-*'
         cls()
     elif result[1] > 8.5 and result[1] < 9:
         print
         print
         print
         print '                             0'       
         print '          *-*'
         cls()
     elif result[1] > 9 and result[1] < 9.5:
         print
         print
         print
         print '                             0'       
         print '         *-*'
         cls()
     elif result[1] > 9.5 and result[1] < 10:
         print
         print
         print
         print '                             0'       
         print '        *-*'
         cls()
     elif result[1] > 10 and result[1] < 10.5:
         print
         print
         print
         print '                             0'     
         print '       *-*'
         cls()




#Right side up

     elif result[1] <= 0  and result[1] > -0.05:
         print
         print
         print
         print '                            |0|'
         print '                            *-*'
         cls()
     elif result[1] < -0.05 and result[1] > -0.09:
         print
         print
         print
         print '                            |0|'
         print '                            *-*'
         cls()           
     elif result[1] < -0.1 and result[1] > -0.5:
         print
         print
         print
         print '                             0'       
         print '                             *-*'
         cls()
     elif result[1] < -0.5 and result[1] > -1:
         print
         print
         print
         print '                             0'       
         print '                              *-*'
         cls()
     elif result[1] < -1 and result[1] > -1.5:
         print
         print
         print
         print '                             0'       
         print '                               *-*'
         cls()
     elif result[1] < -1.5 and result[1] > -2:
         print
         print
         print
         print '                             0'       
         print '                                *-*'
         cls()
     elif result[1] < -2 and result[1] > -2.5:
         print
         print
         print
         print '                             0'       
         print '                                 *-*'
         cls()
     elif result[1] < -2.5  and result[1] > -3:
         print
         print
         print
         print '                             0'       
         print '                                  *-*'
         cls()
     elif result[1] < -3 and result[1] > -3.5:
         print
         print
         print
         print '                             0'       
         print '                                   *-*'
         cls()
     elif result[1] < -3.5 and result[1] > -4:
         print
         print
         print
         print '                             0'       
         print '                                    *-*'
         cls()
     elif result[1] < -4 and result[1] > -4.5:
         print
         print
         print
         print '                             0'       
         print '                                     *-*'
         cls()
     elif result[1] < -4.5 and result[1] > -5:
         print
         print
         print
         print '                             0'       
         print '                                      *-*'
         cls()
     elif result[1] < -5 and result[1] > -5.5:
         print
         print
         print
         print '                             0'       
         print '                                       *-*'
         cls()
     elif result[1] < -5.5 and result[1] > -6:
         print
         print
         print
         print '                             0'       
         print '                                        *-*'
         cls()
     elif result[1] < -6 and result[1] > -6.5:
         print
         print
         print
         print '                             0'       
         print '                                         *-*'
         cls()
     elif result[1] < -6.5 and result[1] > -7:
         print
         print
         print
         print '                             0'       
         print '                                          *-*'
         cls()
     elif result[1] < -7 and result[1] > -7.5:
         print
         print
         print
         print '                             0'       
         print '                                           *-*'
         cls()
     elif result[1] < -7.5 and result[1] > -8:
         print
         print
         print
         print '                             0'       
         print '                                            *-*'
         cls()
     elif result[1] < -8 and result[1] > -8.5:
         print
         print
         print
         print '                             0'       
         print '                                             *-*'
         cls()     
     elif result[1] < -8.5 and result[1] > -9:
         print
         print
         print
         print '                             0'       
         print '                                              *-*'
         cls()
     elif result[1] < -9 and result[1] > -9.5:
         print
         print
         print
         print '                             0'       
         print '                                               *-*'
         cls()
     elif result[1] < -9.5 and result[1] > -10:
         print
         print
         print
         print '                             0'       
         print '                                                *-*'
         cls()
     elif result[1] < -10 and result[1] > -10.5:
         print
         print
         print
         print '                             0'       
         print '                                                 *-*'
         cls()


If you guys could give me some pointers about maybe eliminating the countless 'if' statements and replacing them with some kind of formatting technique I would greatly appreciate it. Here is the video I made quickly demonstrating it in action on a rooted Kindle Fire (1st Gen):
https://www.youtube.com/watch?v=Ch8v-8vQovs&list=UUOrEEnNv157HyuUTpIfgO-w



Here is a slightly refined version of the leveling program with different ranges for the "bubble" movement and also a simple XML layout for the display as opposed to the console:

Code: Select all
import android
from time import sleep

droid = android.Android()



def main_loop():

    print layout
    print droid.fullShow(layout)
   
    droid.startSensingTimed(2,5000)
   
    cont = 0
   
    while cont < 1000:
   
        (id, result, error) = droid.sensorsReadAccelerometer()
       
       
       
#left side up       
        if result[1] == 0:
            droid.fullSetProperty('textView2', 'text', str('|*0*|'))
           
        elif result[1] < 0.2 and result[1] >= 0:
            droid.fullSetProperty('textView2', 'text', str('|*0*|'))
           
        elif result[1] > 0.2 and result[1] < 0.4:
            droid.fullSetProperty('textView2', 'text', str('*0*  '))
                   
        elif result[1] > 0.4 and result[1] < 0.6:
            droid.fullSetProperty('textView2', 'text', str('*0*    '))
           
        elif result[1] > 0.6 and result[1] < 0.8:
            droid.fullSetProperty('textView2', 'text', str('*0*      '))
           
        elif result[1] > 0.8 and result[1] < 1.0:
            droid.fullSetProperty('textView2', 'text', str('*0*        '))
           
        elif result[1] > 1.0 and result[1] < 1.2:
            droid.fullSetProperty('textView2', 'text', str('*0*          '))
           
        elif result[1] > 1.2 and result[1] < 1.4: 
            droid.fullSetProperty('textView2', 'text', str('*0*            '))
           
        elif result[1] > 1.4 and result[1] < 1.6:
            droid.fullSetProperty('textView2', 'text', str('*0*             '))
           
        elif result[1] > 1.6 and result[1] < 1.8:
            droid.fullSetProperty('textView2', 'text', str('*0*               '))
           
        elif result[1] > 1.8 and result[1] < 2.0:
            droid.fullSetProperty('textView2', 'text', str('*0*                 '))
           
        elif result[1] > 2.0 and result[1] < 2.2:
            droid.fullSetProperty('textView2', 'text', str('*0*                   '))
           
        elif result[1] > 2.2 and result[1] < 2.4:   
            droid.fullSetProperty('textView2', 'text', str('*0*                     '))
           
        elif result[1] > 2.4 and result[1] < 2.6:
            droid.fullSetProperty('textView2', 'text', str('*0*                       '))
           
        elif result[1] > 2.6 and result[1] < 2.8:
            droid.fullSetProperty('textView2', 'text', str('*0*                         '))
                       
        elif result[1] > 2.8 and result[1] < 3.0:
            droid.fullSetProperty('textView2', 'text', str('*0*                           '))
           
        elif result[1] > 3.0 and result[1] < 3.2:
            droid.fullSetProperty('textView2', 'text', str('*0*                             '))
           
        elif result[1] > 3.2 and result[1] < 3.4:
            droid.fullSetProperty('textView2', 'text', str('*0*                               '))
   
        elif result[1] > 3.4 and result[1] < 3.6:
            droid.fullSetProperty('textView2', 'text', str('*0*                                 '))
           
        elif result[1] > 3.6 and result[1] < 3.8:
            droid.fullSetProperty('textView2', 'text', str('*0*                                   '))
           
        elif result[1] > 3.8 and result[1] < 4.0:
            droid.fullSetProperty('textView2', 'text', str('*0*                                     '))
           
           
#right side up

       
        elif result[1] <= 0  and result[1] > -0.2:
            droid.fullSetProperty('textView2', 'text', str('|*0*|'))
           
        elif result[1] < -0.2 and result[1] > -0.4:
            droid.fullSetProperty('textView2', 'text', str('|*0*|'))
           
        elif result[1] < -0.4 and result[1] > -0.6:
            droid.fullSetProperty('textView2', 'text', str('  *0*'))
           
        elif result[1] < -0.6 and result[1] > -0.8:
            droid.fullSetProperty('textView2', 'text', str('    *0*'))
           
        elif result[1] < -0.8 and result[1] > -1.0:
            droid.fullSetProperty('textView2', 'text', str('      *0*'))
           
        elif result[1] < -1.0 and result[1] > -1.2:
            droid.fullSetProperty('textView2', 'text', str('        *0*'))
           
        elif result[1] < -1.2 and result[1] > -1.4:   
            droid.fullSetProperty('textView2', 'text', str('          *0*'))       
       
        elif result[1] < -1.4  and result[1] > -1.6:
            droid.fullSetProperty('textView2', 'text', str('            *0*'))
           
        elif result[1] < -1.6 and result[1] > -1.8:
            droid.fullSetProperty('textView2', 'text', str('              *0*'))
           
        elif result[1] < -1.8 and result[1] > -2.0:
            droid.fullSetProperty('textView2', 'text', str('                *0*'))
           
        elif result[1] < -2.0 and result[1] > -2.2:   
            droid.fullSetProperty('textView2', 'text', str('                  *0*'))
                       
        elif result[1] < -2.2 and result[1] > -2.4:
            droid.fullSetProperty('textView2', 'text', str('                    *0*'))
           
        elif result[1] < -2.4 and result[1] > -2.6:
            droid.fullSetProperty('textView2', 'text', str('                      *0*'))
           
        elif result[1] < -2.6 and result[1] > -2.8:
            droid.fullSetProperty('textView2', 'text', str('                        *0*'))
           
        elif result[1] < -2.8 and result[1] > -3.0: 
            droid.fullSetProperty('textView2', 'text', str('                          *0*'))
           
        elif result[1] < -3.0 and result[1] > -3.2:
            droid.fullSetProperty('textView2', 'text', str('                            *0*'))
           
        elif result[1] < -3.2 and result[1] > -3.4:
            droid.fullSetProperty('textView2', 'text', str('                              *0*'))
           
        elif result[1] < -3.4 and result[1] > -3.6:
            droid.fullSetProperty('textView2', 'text', str('                                *0*'))
           
        elif result[1] < -3.6 and result[1] > -3.8:
            droid.fullSetProperty('textView2', 'text', str('                                  *0*'))
           
        elif result[1] < -3.8 and result[1] > -4.0:
            droid.fullSetProperty('textView2', 'text', str('                                    *0*'))
           
        elif result[1] < -4.0 and result[1] > -4.2:
            droid.fullSetProperty('textView2', 'text', str('                                      *0*'))
           
           
       
layout="""<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/background"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#000000">
       

        <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text=""
                android:textSize="18dp"
                android:id="@+id/textView1"
                android:textAppearance="?android:attr/textAppearanceLarge"         
                android:gravity="center_vertical|center_horizontal|center">
        </TextView>       
           
        <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text=""
                android:textSize="18dp"
                android:id="@+id/textView1"
                android:textAppearance="?android:attr/textAppearanceLarge"         
                android:gravity="center_vertical|center_horizontal|center">
        </TextView>


       
        <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text=""
                android:textSize="18dp"
                android:id="@+id/textView1"
                android:textAppearance="?android:attr/textAppearanceLarge"         
                android:gravity="center_vertical|center_horizontal|center">
        </TextView>
       
       
        <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text=""
                android:textSize="18dp"
                android:id="@+id/textView1"
                android:textAppearance="?android:attr/textAppearanceLarge"         
                android:gravity="center_vertical|center_horizontal|center">
        </TextView>
       
               
        <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text=""
                android:textSize="18dp"
                android:id="@+id/textView1"
                android:textAppearance="?android:attr/textAppearanceLarge"         
                android:gravity="center_vertical|center_horizontal|center">
        </TextView>
       
       
        <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="_____________|       |_____________"
                android:textSize="30dp"
                android:id="@+id/textView1"
                android:textAppearance="?android:attr/textAppearanceLarge"   
                android:gravity="center_vertical|center_horizontal|center">
        </TextView>

       
        <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text=""
                android:textSize="35dp"
                android:textColor="#ffffff00"
                android:id="@+id/textView2"
                android:textAppearance="?android:attr/textAppearanceLarge"     
                android:gravity="center_vertical|center_horizontal|center">
        </TextView>
       
       
        <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="|_____________|       |_____________|"
                android:textSize="30dp"
                android:id="@+id/textView1"
                android:textAppearance="?android:attr/textAppearanceLarge"   
                android:gravity="center_vertical|center_horizontal|center">
        </TextView>

 
 
 
</LinearLayout>"""


main_loop()




























Here's a link to see a crappy demo of the refined script in action on a rooted 1st gen Kindle Fire: http://youtu.be/uq5NX29shf4
Attachments
Screenshot_2014-11-23-08-45-35.png
Screenshot_2014-11-23-08-45-35.png (12.91 KiB) Viewed 1199 times
Last edited by Guitarman2010 on Thu Nov 27, 2014 7:41 pm, edited 7 times in total.
Guitarman2010
 
Posts: 22
Joined: Thu Mar 07, 2013 4:39 pm
Location: USA

Re: Crude Accelerometer Level on Android

Postby freddyhard » Mon Aug 25, 2014 10:52 am

i'm not sure that you want to skip the boundaries of 0.5, because that is what you are currently doing.
anyway, try this function
Code: Select all
def makeString(result, movementRange = 20, rate = 0.5):
    steps = 0
    if result < 0:
        steps = int((result + rate) / rate)
        if steps < -movementRange:
            steps = -movementRange
    else:
        steps = int((result - rate) / rate)
        if steps > movementRange:
            steps = movementRange
   
    distance = 28 - steps
    string = ""
   
    for f in range(distance):
        string += " "
   
    return string + "*-*"

and then call it in the while loop with this
Code: Select all
    if result[1] > -1.0 and result[1] < 1.0:
        print '                            |0|'
        print '                            *-*', result[1]
        cls()       
    else:
        print '                             0'
        print makeString(result[1]), result[1]
        cls()



essentially it is every 0.5 jump that the sprites need to move a ±position
freddyhard
 
Posts: 36
Joined: Wed Jul 16, 2014 9:32 pm

Re: Crude Accelerometer Level on Android

Postby Guitarman2010 » Mon Sep 01, 2014 3:31 am

I appreciate your feedback freddyhard and will try your idea in the program :)
Guitarman2010
 
Posts: 22
Joined: Thu Mar 07, 2013 4:39 pm
Location: USA

Re: Crude Accelerometer Level on Android

Postby freddyhard » Wed Sep 03, 2014 10:25 am

in the function i wrote, this line should not have the number 28 hard coded into it
Code: Select all
distance = 28 - steps

ideally the starting position should be passed to it in the formal parameters like
Code: Select all
def makeString(result, movementRange = 20, rate = 0.5, startPosition = 28):

with that line being
Code: Select all
distance = startPosition - steps

it just allows for more flexibility when using the function
freddyhard
 
Posts: 36
Joined: Wed Jul 16, 2014 9:32 pm

Re: Crude Accelerometer Level on Android

Postby freddyhard » Fri Sep 05, 2014 2:05 pm

OOPS - the variable result[1] should not be printed. i was only doing that for testing purposes, because i had no other way of testing the code. so remove the , result[1] from these 2 lines

Code: Select all
        print '                            *-*', result[1]

and
Code: Select all
        print makeString(result[1]), result[1]
freddyhard
 
Posts: 36
Joined: Wed Jul 16, 2014 9:32 pm


Return to Completed Scripts

Who is online

Users browsing this forum: No registered users and 2 guests