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.

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 58 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

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

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 1 guest