AoboSir 博客

相信相信的力量,相信积累的力量

记录笔记时得到的人生的两个道理


Alt text

今天遇到一个问题,这个对于以前的我来说,简直就是小菜一碟,但是今非昔比啊,学过的东西忘记得太快了,虽然我以前也记过笔记,到那时可笑的是:我记得笔记我都不知道放到哪里了。通过这件事情,我就知道了两个人生的道理:

  • 笔记是重要的,人学过的东西回随着时间的流逝会渐渐的忘记,这句话是错误的。正确的说法应该是:随着时间的流逝,以前学过的东西慢慢的放到了大脑的不经常使用区域。如果你今天突然想到要使用这些知识,如果你没有任何的提示的话,你就感觉自己已经将这部分的知识给忘记了。但是如果这个时候你看了已经记过的笔记,此时这个笔记对于你的大脑来说既是一个提示,笔记会让你快速回忆起之前学过的知识点、遇到过的问题、以及你当时是如何解决这个问题的方法。
  • 记笔记是一个学问,知识意味的记录也是没有用的。你需要一个好的记笔记的工具和一种好的归类知识点的技巧。这样,你记录的笔记才有真正的意义。

树莓派 Learning 003 — GPIO 003 中断模式 — 按键控制LED


我的树莓派型号:Raspberry Pi 2 Model B V1.1 装机系统:NOOBS v1.9.2


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# -*- coding:UTF-8 -*-

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)

GPIO.setup(24, GPIO.IN, pull_up_dwon=GPIO.PUD_DOWN)
GPIO.setup(25, GPIO.OUT)

ledStatus = True

def my_callback(channel):
    print("button pressed!")
    global ledStatus
    ledStatus = not ledStatus
    if ledStatus:
        GPIO.output(25, GPIO.HIGH)
        pass
    else:
        GPIO.output(25, GPIO.LOW)
        pass
    pass

GPIO.add_event_detect(24, GPIO.RISING, callback=my_callback)

while True:
    try:
        print("I'm working...")
        time.sleep(5)
        pass
    except KeyboardInterrupt:
        break
        pass
    pass

GPIO.cleanup()

代码讲解:

  • global ledStatushttp://c.biancheng.net/cpp/html/1827.html
  • GPIO.add_event_detect(24, GPIO.RISING, callback=my_callback) :给24引脚添加一个事件函数,触发条件是:捕获到上升沿(GPIO.RISING)。这个参数还可以是:GPIO.FALLING(下降沿)、GPIO.BOTH(两者都有)
  • except KeyboardInterrupt: 是用来捕获用户是否按了Ctrl + C 组合键。退出程序
  • GPIO.cleanup():之前都没有使用过这个函数。这个函数的功能是:jaingaobo所有的GPIO还原回初始输入状态。我们建议在使用RPi.GPIO模块的所有Python程序的最后,都写上这个函数。

现在这个程序我们来运行一下:

1
2
sudo chmod +x key_control_led_callback.py
python key_control_led_callback.py

现在的运行效果就已经很好的,即使我们上面写的程序脚本里面没有编写按键去抖的相关程序,并且我们也没有安装硬件去抖的电容。但是为了安全起见,我们还是应该摆去抖的程序给它加上。

对于中断模式的检测按键,我们给这种程序添加去抖程序,相当的简单,我们只需要将上面的程序中的这行语句:

1
GPIO.add_event_detect(24, GPIO.RISING, callback=my_callback)

修改为:

1
GPIO.add_event_detect(24, GPIO.RISING, callback=my_callback, bouncetime=200)

其中bouncetime=200 是延时200ms的意思。就是当检测到上升沿后,进入这个中断,要延时200ms才会执行这个中断里面的程序。

这就是软件去抖。


搞定


参考网站:https://sourceforge.net/p/raspberry-gpio-python/wiki/Inputs/

树莓派 Learning 003 — GPIO 002 输入模式 — 按键控制LED


我的树莓派型号:Raspberry Pi 2 Model B V1.1 装机系统:NOOBS v1.9.2


我们在之前学会了如何进行输出,现在来讲讲如何进行输入:

使用按键为例。

我们先按照下面这幅图片连接电路:

Alt text

知识点:当你设置一个GPIO为输入模式的,这个GPIO口要么是连接到信号端,要么是接GND。注意设置为输入模式的GPIO口不允许悬空(floating)。(因为这种情况下GPIO输入的值是不确定的。)

上面这个图中, 按键的一个引脚连接一个10K电阻和树莓派的24引脚上,然后10K电阻连接GND。按键的另一个引脚连接到3V3。

LED还是正极连接到25引脚上,另一个引脚连接GND。


写程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# -*- coding:UTF-8 -*-

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(25, GPIO.OUT)

ledStatus = True

while True:
    if (GPIO.input(24) == GPIO.HIGH):
        print("button pressed!")
        ledStatus = not ledStatus
        if ledStatus:
            GPIO.output(25, GPIO.HIGH)
            pass
        else:
            GPIO.output(25, GPIO.LOW)
            pass
        time.sleep(0.03)
        pass
    time.sleep(0.01)
    pass

执行下面的命令,来启动这个程序脚本:

1
2
sudo chmod +x key_control_led.py
python key_control_led.py

你会发现这个运行效果并不是很好:主要的原因就是因为按键的去抖。你可以使用硬件去抖(就是在按键的引脚上并联一个电容),也可以软件去抖,上面的程序中已经进行软件去抖了(你可以通过增大延时时间来改善程序运行效果)。


到现在应该学会了如何使用GPIO的输入模式了。

上面检测按键的程序,它是用轮询的方式,接下来,我们来学习,如果使用GPIO的中断模式,来实现使用中断的方式来检测一个按键是否被按下。

树莓派 Learning 003 — GPIO 001 — 点亮一个LED


我的树莓派型号:Raspberry Pi 2 Model B V1.1 装机系统:NOOBS v1.9.2


我们使用Python程序来编写树莓派的程序

导入 RPi.GPIO 模块 — 检测当前树莓派中,是否含有 RPi.GPIO模块,如果没有,我们就安装

我们在终端中执行:

1
python

默认启动的是Python2的终端交互程序:

1
2
3
4
5
pi@raspberrypi:~$ python
Python 2.7.9 (default, Mar  8 2015, 00:52:26) 
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

接着,我们试着导入 RPi.GPIO 模块 来看看有没有这个模块。

1
>>> import RPi.GPIO

如果出现了ImportError错误提示:没有这个模块。我们可以先按Ctrl + D 来退出Python终端交互程序,然后执行下面的命令来安装RPi.GPIO模块:

sudo apt-get install RPi.GPIO

如果你的树莓派里面已经存在RPi.GPIO模块,但是它不能正常的工作的话,我们可以这样解决这个问题:删除现有的RPi.GPIO模块,然后在重新安装它:

sudo apt-get remove RPi.GPIO
sudo apt-get install RPi.GPIO

编写第一个程序:hello_raspberrypi.py 程序脚本

你可以参考我之前写的这篇博文:(操了,我都他妈的忘记了之前写过树莓派点亮LED)树莓派 Learning 003 — GPIO 001 — 点亮LED


树莓派 Learning 002 装机后的必要操作 11 解决在使用SecureCRT软件链接树莓派时,SecureCRT软件的终端中显示树莓派的中文字体乱码的问题


我的树莓派型号:Raspberry Pi 2 Model B V1.1 装机系统:NOOBS v1.9.2


如果你已经将你的树莓派上面默认字体设置为了:中文。(编码方式为:UTF-8)(如果不是,你可以参考这篇博文进行设置)

当你使用SecureCRT软件连接上树莓派后,回看到原本应该显示中文的,但是是乱码。

Alt text


解决办法:

Alt text

Alt text

然后,点击 OK


搞定

现在在执行一下 sudo apt-get update。中文就正常的显示了:

Alt text


参考网站:http://riching.iteye.com/blog/349754

Linux 如何使用桂电ipclient出校器上网 --- 最新的方法 --- 可以使用


我之前写过在Linux系统或者树莓派上使用ipclient上网的教程,但是自从 2016年9月1号,学校换了新的ipclient出校器后,我之前记录的那些方法都不能使用了。

下面介绍一种新的方法。这个方法我已经测试过,可行!!


树莓派等开发板(比如pcduino) 使用ipclient出校器上网

对于树莓派,如果你在桂电这个学校,如果一个初学者,你手头没有一个树莓派专用的Wifi USB无线模块的话,你都不知道如何使用网线让你的树莓派连接外网。

下面介绍一个方法,你学会了这个方法后,你没有树莓派Wifi USB专用模块,只需要一根网线,就可以上网。(前提是:我没有在宿舍试过。)


到GitHub上,下载这个网站里面的源代码:https://github.com/xuzhipengnt/ipclient_gxnu

下载完成后,在终端中来到刚刚下载后的源代码的这个路径下:ipclient_gxnu /ipclient_python/

我们先使用文本编辑器打开这个路径里面的ipclient.py文件,然后修改一个地方:

Alt text

将第8行的代码修改为:(如果你是桂电的,需要修改;但是如果你是师大的,就不需要改动。)

1
server =  ' 172.16.1.1 '

广西师范大学的服务器地址为:202.193.160.123

桂林电子科大服务器地址为:172.16.1.1

保存文件后,执行下面的命令:

在执行下面的命令之前,你需要树莓派连接网线。

1
2
sudo chmod 777 ipclient.py
python ipclient.py

如果你看到下面的输出:

1
2
3
4
5
pi@raspberrypi:~/Downloads/ipclient_gxnu/ipclient_python $ python ipclient.py
IP Client for GXNU  (xzpmail@gmail.com)
...........................................
Please input username and password:
Username:

这个时候,你输入你的学号和密码,就可以上网了。

Alt text

搞定


Linux系统(比如:Ubuntu) 使用ipclient出校器上网

同理。就不啰嗦了。

解决问题:Qt5 OpenCV “uring Startup Program Exited With Code 0xc0000135” “ Exited With Code -1073741515”


前言

之前已经搭建好的Qt5 和 OpenCV的环境(并且我之前写过博文,在这里),今天我运行了一下之前可以运行的程序, 竟然出现了问题:

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <QCoreApplication>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/core/core.hpp>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    cv::Mat image = cv::imread("..\\helloWorld\\image.jpg");
    cv::namedWindow("Image");
    cv::imshow("Image", image);

    cv::waitKey(0);
    return a.exec();
}

配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
QT += core
QT -= gui

CONFIG += c++11

TARGET = helloWorld
CONFIG += console
CONFIG -= app_bundle

TEMPLATE = app

SOURCES += main.cpp

INCLUDEPATH+=C:\third_packages\opencv\opencv2410-qt5\include\opencv \
             C:\third_packages\opencv\opencv2410-qt5\include\opencv2 \
             C:\third_packages\opencv\opencv2410-qt5\include

LIBS+=  C:\third_packages\opencv\opencv2410-qt5\lib\libopencv_calib3d2410.dll.a \
        C:\third_packages\opencv\opencv2410-qt5\lib\libopencv_contrib2410.dll.a \
        C:\third_packages\opencv\opencv2410-qt5\lib\libopencv_core2410.dll.a \
        C:\third_packages\opencv\opencv2410-qt5\lib\libopencv_features2d2410.dll.a \
        C:\third_packages\opencv\opencv2410-qt5\lib\libopencv_flann2410.dll.a \
        C:\third_packages\opencv\opencv2410-qt5\lib\libopencv_gpu2410.dll.a \
        C:\third_packages\opencv\opencv2410-qt5\lib\libopencv_highgui2410.dll.a \
        C:\third_packages\opencv\opencv2410-qt5\lib\libopencv_imgproc2410.dll.a \
        C:\third_packages\opencv\opencv2410-qt5\lib\libopencv_legacy2410.dll.a \
        C:\third_packages\opencv\opencv2410-qt5\lib\libopencv_ml2410.dll.a \
        C:\third_packages\opencv\opencv2410-qt5\lib\libopencv_nonfree2410.dll.a \
        C:\third_packages\opencv\opencv2410-qt5\lib\libopencv_objdetect2410.dll.a \
        C:\third_packages\opencv\opencv2410-qt5\lib\libopencv_ocl2410.dll.a \
        C:\third_packages\opencv\opencv2410-qt5\lib\libopencv_photo2410.dll.a \
        C:\third_packages\opencv\opencv2410-qt5\lib\libopencv_stitching2410.dll.a \
        C:\third_packages\opencv\opencv2410-qt5\lib\libopencv_ts2410.a \
        C:\third_packages\opencv\opencv2410-qt5\lib\libopencv_video2410.dll.a \
        C:\third_packages\opencv\opencv2410-qt5\lib\libopencv_videostab2410.dll.a \

出现的问题

调试的时候出现了下面的错误:

Alt text

Alt text

Alt text

运行程序的时候,什么的没有。但是在应用程序输出栏里面有这面截图是如数

Alt text

Alt text

我简单的用语言叙述一下出现的这个问题:

当我点击运行的时候,程序会弹出黑色的终端窗口,在应用程序窗口里面,程序会显示自动退出,然后代码是:-1073741515

我想研究一下,究竟是什么地方出现看错误,所以,我点击 调试 按钮,然后就出现了上面三个错误提示窗口。


解决办法

在我没有上网上找解决办法之前,我猜测是因为我后来在电脑上安装了什么软件或者又搭建了什么环境,然后可能是影响到了Qt 和 OpenCV 的开发环境了,可能是被神不知鬼不觉的给改了什么地方。

网上说:是因为环境变量没有添加的原因,但是我之前都添加过环境变量了。我想可能是因为其他的软件把我添加的环境变量个删除了或者挤下去了。所以现在我来查看一下当前的环境变量:

通过查看,环境变量都在:


我使用下面的程序测试Qt5软件。程序是可以正常运行的。正常的输出的 Hello World!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <QCoreApplication>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/core/core.hpp>

#include <iostream>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

//    cv::Mat image = cv::imread("..\\helloWorld\\image.jpg");
//    cv::namedWindow("Image");
//    cv::imshow("Image", image);

//    cv::waitKey(0);
    std::cout << "Hello World!" << std::endl;
    return a.exec();
}

我刚刚再次查看了一下系统的环境变量,还真的发现:OpenCV-Qt的编译生成的bin的路径不在了。(也不知道是我之前根本就没有添加,我也忘记了)

将我之前编译的OpenCV-Qt的bin路径添加到当前的系统的环境变量里面:

Alt text

然后现在,关掉Qt软件(必须要关闭,然后重新启动)。然后重新启动Qt5软件。

现在再次运行程序,问题解决:

Alt text

SolidWorks 在装配体中,如果想修改里面其中一个零部件,要怎么做


但你在制作 装配体的时候,发现有个零部件零件需要修改,这个时候,我们可以这样做:

对着这个零部件点击鼠标左键,选择里面的 打开零件 图标工具。

Alt text

这个时候,就进入了这个零部件文件里面。我们现在就可以对其进行编辑了。

Alt text

当你修改完成后,记得要保存(按 Ctrl + S)。然后在点击下面截图里面的 叉号 回到装配体文件里面:

Alt text

搞定

SolidWorks 如果装配体里面的的装配体有动态关节,如何让它活动


如果你在装配体里面插入一个装配体的话,如果被插入的装配体原本是有可动关节的,但是被插入后,可动的关节不能运动了。

要想让它还能动, 其他很简单,我们只需要这样做:

对着我们需要恢复可动的关节的转配体:

Alt text

然后将 求解为 选为 柔性(F)。(被插入到装配体中的装配体默认这一项是为 刚性®的。)

Alt text

现在转配体里面的包含的装配体的可动关节就可以动了。(如果可动的关节太多,你会明显的感觉到SolidWorks软件运行有点卡。)


Windows 10 下载、安装、破解 SolidWorks 2012 Sp5.0 软件 图文教程


  • 我使用的电脑的系统:Windows 10 64位
  • 我之前在电脑里面安装过SolidWorks 2011软件,然后我又给它卸载了。

下载

下载网站:http://www.mfcad.com/solidworks/xiazai/18686.html

我们下载两个文件,一个是SolidWorks软件安装包,一个是注册软件(就是破解软件)。

Alt text

这次下载的是BT文件,你可以使用迅雷软件下载。

下载已经下载好了。


安装

Alt text

Alt text

把电脑的网给断了:

Alt text

选择 单机安装(此计算机上)

Alt text

接下来,添加序列号:

附序列号: SolidWorks Serial: 0000 0000 0000 3486 Q5HF FG98 或者 0001 0001 0736 0361 JK3Q HDJ3 其他产品的序列号: SolidWorks Simulation 9000 0000 0001 8043 TB9T SGD9 SolidWorks Motion 9000 0000 0002 7942 9KW4 9FBC Flow Simulation 9000 0000 0003 3107 V8F3 PG44 SW Composer 9000 0000 0021 4754 DCB4 HC3J SW ComposerPlayer 9000 0000 0022 1655 536J H9KH SW Electrical 2D 9000 0000 0000 1616 MDZ8 R8J2 注意,输入序列号以后,最好是先断网,以跳过远程验证。

Alt text

出现了下面的没有网络的提示。我们直接点击 取消 即可:

Alt text


出现下面的截图,我们需要一个一个的对其进行配置。

Alt text


Alt text

Alt text


Alt text

Alt text


Alt text

我选择安装到 C盘

Alt text


Alt text

因为我之前安装了SolidWorks 2011软件,然后卸载了它,所以我的电脑里面还是有Toolbox的,所以,我现在现在的单选项:

Alt text


点击 现在安装

Alt text

出现下面的提示框。我们直接选择:

Alt text

开始安装:

Alt text

大约10分钟的时间,终于安装完成了:

Alt text


破解

双击启动SW2010-2013.Activator.SSQ.exe注册机:

Alt text

出现下面的窗口,我们直接点击 :Install>>

Alt text

Alt text

弹出下面的提示窗口。我们直接点击

Alt text

弹出下面的提示窗口,直接点击

Alt text

点击

Alt text

点击

Alt text

Alt text

弹出下面提示窗口,点击

Alt text

点击 Finish 按钮

Alt text


现在就已经破解完了。


启动 SolidWorks 2012 软件

http://www.mfcad.com/solidworks/anzhuang/23651.html

Alt text

弹出下面的窗口,选择

Alt text

Alt text

成功:

Alt text


因为,我之前没有已经安装过sw_urdf_exporter插件。并且我没有卸载:

Alt text

现在,我们在SolidWorks 2012 软件 中看看 这个插件还在不在:

Alt text

还在:

Alt text

搞定