Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Lesson11 (mpu6050) scripts: Eugene.Ovdiyuk #118

Open
wants to merge 3 commits into
base: Eugene.Ovdiyuk
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions mpu6050/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#
# mpu6050 accelerometer & gyroscope
#
KERNELDIR+=/lib/modules/4.14.84-sunxi/build
CURDIR:=$(shell pwd)
obj-m := mpu6050.o

# export ARCH = arm
# export CROSS_COMPILE ?= arm-linux-gnueabihf-

.PHONY: all clean

all:
$(MAKE) -C $(KERNELDIR) M=$(CURDIR) modules

clean:
$(MAKE) -C $(KERNELDIR) M=$(CURDIR) clean

142 changes: 142 additions & 0 deletions mpu6050/gui_mpu6050.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
# !/bin/sh
# xxxxx$ reset<CR> And all will be corrected...

draw_ui () {
# Set up the screen per scan and prepare for the bargraph.
clear
printf $WOB" GYRO \n"
printf $WOB" -30 -20 -10 0 10 20 30 x1000\n"
printf $WOB" ---+----+----+----+----+----+----+----+----+----+----+----+----+---\n"
printf $YOB"X(| |) $GYRO_X\n"
printf $GOB"Y(| |) $GYRO_Y\n"
printf $ROB"Z(| |) $GYRO_Z\n"
printf $WOB" ---+----+----+----+----+----+----+----+----+----+----+----+----+---\n\n"
printf $WOB" ACCEL \n"
printf $WOB" -30 -20 -10 0 10 20 30 x1000\n"
printf $WOB" ---+----+----+----+----+----+----+----+----+----+----+----+----+---\n"
printf $YOB"X(| |) $ACCEL_X\n"
printf $GOB"Y(| |) $ACCEL_Y\n"
printf $ROB"Z(| |) $ACCEL_Z\n"
printf $WOB" ---+----+----+----+----+----+----+----+----+----+----+----+----+---\n\n"
printf $WOB" TEMP \n"
printf $WOB" -20 0 20 40 60 80 100 x1\n"
printf $WOB" ---+----+----+----+----+----+----+----+----+----+----+----+----+---\n"
printf $WOB"T(| |) $TEMP\n"
printf $WOB" ---+----+----+----+----+----+----+----+----+----+----+----+----+---\n\n"
}

random_data () {
# Mock data for tests
GYRO_X=$[($RANDOM % (64/1))]
GYRO_X=$(( ($GYRO_X-32)*1000 ))

GYRO_Y=$[($RANDOM % (64/1))]
GYRO_Y=$(( ($GYRO_Y-32)*1000 ))

GYRO_Z=$[($RANDOM % (64/1))]
GYRO_Z=$(( ($GYRO_Z-32)*1000 ))

ACCEL_X=$[($RANDOM % (64/1))]
ACCEL_X=$(( ($ACCEL_X-32)*1000 ))

ACCEL_Y=$[($RANDOM % (64/1))]
ACCEL_Y=$(( ($ACCEL_Y-32)*1000 ))

ACCEL_Z=$[($RANDOM % (64/1))]
ACCEL_Z=$(( ($ACCEL_Z-32)*1000 ))

TEMP=$[($RANDOM % (64/1))]
TEMP=$(( ($TEMP-13)*2 ))
}

read_data () {
GYRO_X=$(cat /sys/class/mpu6050/gyro_x)
GYRO_Y=$(cat /sys/class/mpu6050/gyro_y)
GYRO_Z=$(cat /sys/class/mpu6050/gyro_z)

ACCEL_X=$(cat /sys/class/mpu6050/accel_x)
ACCEL_Y=$(cat /sys/class/mpu6050/accel_y)
ACCEL_Z=$(cat /sys/class/mpu6050/accel_z)

TEMP=$(cat /sys/class/mpu6050/temp)
}

draw_graph () {
GYRO_VAL=$1
LINE_NUM=$2
COLOR1=$3
COLOR2=$4

BARGRAPH_GYRO=$COLOR1"\x1B[$LINE_NUM;2f(|"$COLOR2
for color in $(seq 1 "$GYRO_VAL")
do
BARGRAPH_GYRO=$BARGRAPH_GYRO" "
done
printf "$BARGRAPH_GYRO"$COLOR1"\n"
}

###############
# GLOBAL VARs #
###############

# White On Black.
WOB="\x1B[1;37;40m"
#Bleck on white
BOW="\x1B[1;30;47m"
# Black On Green.
BOG="\x1B[1;30;42m"
# Black On Yellow.
BOY="\x1B[1;30;43m"
# Black On red.
BOR="\x1B[1;30;41m"
# Green On Black.
GOB="\x1B[1;32;40m"
# Yellow On Black.
YOB="\x1B[1;33;40m"
# Red On Black.
ROB="\x1B[1;31;40m"

# Set the pseudo value to zero.
DEPTH=0
GYRO_X=0
GYRO_Y=0
GYRO_Z=0
ACCEL_X=0
ACCEL_Y=0
ACCEL_Z=0
TEMP=0

################
# Main Script ##
################

# Do a clear screen to White On Black.
printf $WOB
clear

while true
do
# random_data # mock random data generating
read_data # real data read
draw_ui

#Scale values to bar size
GYRO_X=$(( ${GYRO_X%%.*}/1000+33 ))
GYRO_Y=$(( ${GYRO_Y%%.*}/1000+33 ))
GYRO_Z=$(( ${GYRO_Z%%.*}/1000+33 ))
ACCEL_X=$(( ${ACCEL_X%%.*}/1000+33 ))
ACCEL_Y=$(( ${ACCEL_Y%%.*}/1000+33 ))
ACCEL_Z=$(( ${ACCEL_Z%%.*}/1000+33 ))
TEMP=$(( ${TEMP%%.*}/2+13 ))

#Draw bars
draw_graph $GYRO_X 4 $YOB $BOY
draw_graph $GYRO_Y 5 $GOB $BOG
draw_graph $GYRO_Z 6 $ROB $BOR
draw_graph $ACCEL_X 12 $YOB $BOY
draw_graph $ACCEL_Y 13 $GOB $BOG
draw_graph $ACCEL_Z 14 $ROB $BOR
draw_graph $TEMP 20 $WOB $BOW

sleep 0.05
done
4 changes: 4 additions & 0 deletions mpu6050/ins_mod.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#!/bin/bash
sudo insmod mpu6050.ko
sudo sh -c "echo mpu6050 0x68 > /sys/bus/i2c/devices/i2c-0/new_device"

33 changes: 33 additions & 0 deletions mpu6050/mpu6050-regs.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#ifndef _MPU6050_REGS_H
#define _MPU6050_REGS_H

/* Registed addresses */
#define REG_CONFIG 0x1A
#define REG_GYRO_CONFIG 0x1B
#define REG_ACCEL_CONFIG 0x1C
#define REG_FIFO_EN 0x23
#define REG_INT_PIN_CFG 0x37
#define REG_INT_ENABLE 0x38
#define REG_ACCEL_XOUT_H 0x3B
#define REG_ACCEL_XOUT_L 0x3C
#define REG_ACCEL_YOUT_H 0x3D
#define REG_ACCEL_YOUT_L 0x3E
#define REG_ACCEL_ZOUT_H 0x3F
#define REG_ACCEL_ZOUT_L 0x40
#define REG_TEMP_OUT_H 0x41
#define REG_TEMP_OUT_L 0x42
#define REG_GYRO_XOUT_H 0x43
#define REG_GYRO_XOUT_L 0x44
#define REG_GYRO_YOUT_H 0x45
#define REG_GYRO_YOUT_L 0x46
#define REG_GYRO_ZOUT_H 0x47
#define REG_GYRO_ZOUT_L 0x48
#define REG_USER_CTRL 0x6A
#define REG_PWR_MGMT_1 0x6B
#define REG_PWR_MGMT_2 0x6C
#define REG_WHO_AM_I 0x75

/* Register values */
#define MPU6050_WHO_AM_I 0x68

#endif /* _MPU6050_REGS_H */
Loading