利用树莓派控制步进电机——C语言

电路连接方式请看另一篇博文:【利用树莓派控制步进电机——pythony语言】

/******************************************************
*   File name: stepMotor.c
*      Author: Jason Dai
*        Date: 2015/01/26
******************************************************/
#include <wiringPi.h>
#include <stdio.h>

#define IN1 0    // wiringPi GPIO0(pin11)
#define IN2 1
#define IN3 2
#define IN4 3

void setStep(int a, int b, int c, int d)
{
	digitalWrite(IN1, a);
	digitalWrite(IN2, b);
	digitalWrite(IN3, c);
	digitalWrite(IN4, d);
}

void stop()
{
	setStep(0, 0, 0, 0);
}

void forward(int t, int steps)
{
	int i;

	for(i = 0; i < steps; i++){
		setStep(1, 0, 0, 0);
		delay(t);
		setStep(0, 1, 0, 0);
		delay(t);
		setStep(0, 0, 1, 0);
		delay(t);
		setStep(0, 0, 0, 1);
		delay(t);
	}
}

void backward(int t, int steps)
{
	int i;

	for(i = 0; i < steps; i++){
		setStep(0, 0, 0, 1);
		delay(t);
		setStep(0, 0, 1, 0);
		delay(t);
		setStep(0, 1, 0, 0);
		delay(t);
		setStep(1, 0, 0, 0);
		delay(t);
	}
}

int main(void) {
	if (-1 == wiringPiSetup()) {
		printf("Setup wiringPi failed!");
		return 1;
	}

	/* set mode to output */
	pinMode(IN1, OUTPUT);
	pinMode(IN2, OUTPUT);
	pinMode(IN3, OUTPUT);
	pinMode(IN4, OUTPUT);

	while (1){
		printf("forward...\n");
		forward(3, 256);	

		printf("stop...\n");
		stop();
		delay(2000);       // 2s

		printf("backward...\n");
		backward(3, 512);  // 512 steps ---- 360 angle	

		printf("stop...\n");
		stop();
		delay(2000);       // 2s
	}

	return 0;
}

编译:

gcc stepMotor.c -o stepMotor -lwiringPi

运行:

./stepMotor
时间: 2024-11-08 09:47:26

利用树莓派控制步进电机——C语言的相关文章

利用树莓派控制步进电机——Python语言

步进电机的优点在于它能够被精确定位,正向或反向一次性转动"一步",并且也能够连续转动. #!/usr/bin/env python ######################################################### # File name: stepMotor.py # Author: Jason Dai # Date: 2015/01/26 ########################################################

极客大讲堂:手把手教你用树莓派控制红绿灯

涉及硬件:树莓派以及相关套件.LED红绿灯 涉及知识:电路实验板.CanaKit 当准备好以上,我们就可以开始啦.使用树莓派进行LED原型控制. 首先要明白的是,接入所有的电线.电阻器以及工具包附带的指示灯需要谨慎操作,毕竟如果你设置操作不当将有可能损坏你的硬件. 为了简化与树莓派和LED的接触,也为了方便编写控制代码,我决定编写一个叫做Pi交通灯的小玩意,这是用树莓派控制LED的第一步. 有了这个“红绿灯”之后,你要做的就只是把这个小装置直接插到树莓派的GPIO接口上.你不需要担心连接到线路板

利用手势控制动画的进度

最近在研究一个项目,利用手势控制动画的进度,发现简单的还可以,如果遇到了复杂的情况就比较麻烦了,ios7新出了一个特性,可以利用NavigationController的自定义转场动画,提供进度来控制. //这个方法控制转场动画的进度 - (id <UIViewControllerInteractiveTransitioning>)navigationController:(UINavigationController *)navigationController               

利用range() 控制循环

s = ['a','b','c','d','e'] for i in range(len(s)):...     if i < len(s)-1:...         print s[i] abcd for i in range(len(s)):...     if i < len(s)-1:...         print s[i+1]...bcde for i in range(len(s)):...     if i < len(s)-1:...         print s

STM32串口控制步进电机(原创)

用的42步进电机: 厂家可能不一样,两项四线步进电机,里面有两个线圈.在电机什么电都没有接的情况下,用万用表测量四个管脚:两两短接(或者阻值很小)的为一组,可以分别接A+,a-剩余接B+,B-;顺序可以互换:  经测,我用的17hs4417  黑绿一组,红蓝一组. 建议还是买个步进电机驱动器,五六十一个,相当好用. 贴一下STM32串口控制步进电机的代码: #include "led.h" #include "delay.h" #include "key.

利用栈实现队列(C语言实现)

在上一篇优化后队列的实现(C语言实现)  中,虽然我们对队列的时间复杂度进行了优化,但是却让代码的可读性变差了,代码显得略微臃肿(当然,这些话你看看就好,主要是为了奉承这篇博文的). 这里主要实现的是:利用栈来实现队列 基本思路: 1,创建两个栈 2,两个栈合并起来组装成一个队列,分别取名为instack,outstack,用于进队列,出队列 3,比如有1,2,3,4,5 需要进入队列,先将这一串数压入instack栈中,假设压入顺序为1,2,3,4,5(1为栈底),再将instack中的数据移

利用JavaScript控制表格的合并

<html> <head> <title>用JavaScript进行表格的合并</title> </head> <body> 表格1: <table id="table1" border="1" width="300px" height="300px"> <tr><td>11</td><td>12

利用FPGA控制WIFI模块(1)——8266篇

0.前言: 这一系列博客主要用来记录通过FPGA控制无线传输设备,特别是WIFI模块的博客.希望为后来的FPGAer提供相关的经验,少走弯路. 1.模组简介 ESP8266 系列模组是基于乐鑫ESP8266的超低功耗的UART-WiFi模块的模组,可以方便地进行二次开发,接入云端服务,以最低成本提供最大实用性.可以在10元以内实现WIFI-UART的双向控制.模块的基本外观可以参考下面官网的图片.图片里模块的型号是ESP-01S,安信可公司除了这款模块以外,还有几款几款类似的型号,都是基于ESP

树莓派通过GPIO控制步进电机

一.接线方式与GPIO调用方法: 电源接入+5v和GND In1-4分别接GPIO1-4 正转时,GPIO1-4分次传入:[1,0,0,0],[sleep],[0,1,0,0],[sleep],[0,0,1,0],[sleep],[0,0,0,1] 逆转时,GPIO1-4分次传入:[0,0,0,1],[sleep],[0,0,1,0],[sleep],[0,1,0,0],[sleep],[1,0,0,0] 停止时,GPIO1-4一次传入:[0,0,0,0] 二.电机图