极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13974|回复: 2

控制电机并且用电位计读数。

[复制链接]
发表于 2012-4-4 18:34:36 | 显示全部楼层 |阅读模式
我是一个刚学Arduino的菜鸟,最近碰到一个疑惑。

我想用Arduino Motor Schield(专门控制电机的扩展版)控制一个电机然后让这个电机带动一个杠杆,杠杆的另一端和电位计绑定在一起。然后我想让电机转动然后带动这个杠杆,这样电位计就会随之变化。然后我想通过analog.read()这个函数得到电位计的模拟值。

我的想法是是否Arduino同时支持两个程序同时运行,这样一个程序控制电机,另一个程序用来读取电位计的模拟值。Arduino好像不支持多线程吧。如果我这样写代码的话,就只能分别读两次电位值,即电机转动到两端的值,如果我想要电机转动每一时刻的值应该怎么做呢。

非常感谢各位指教。

//电机控制

void setup(){

  pinMode(12,OUTPUT);
  pinMode(9,OUTPUT);
  Serial.begin(9600);

}

void loop(){
  int potiValue;
  digitalWrite(12,HIGH);//电机方向
  digitalWrite(9,LOW);//电机停止
  analogWrite(3,1000);//电机速度
  
  potiValue = analogRead(A5);//电位计模拟值
  Serial.println(potiValue);//打印

  delay(5000);
   
  digitalWrite(12,LOW);//另一个方向
  digitalWrite(9,LOW);
  analogWrite(3,1000);
  
  potiValue = analogRead(A5);
  Serial.println(potiValue);
  
  delay(5000);
  
}
回复

使用道具 举报

发表于 2012-4-4 20:20:53 | 显示全部楼层

  
  potiValue = analogRead(A5);//电位计模拟值
  Serial.println(potiValue);//打印

  delay(5000);
   

改为
unsigned long pMillis=millis();
while(millis()-pMillis<5000)
{
potiValue = analogRead(A5);//电位计模拟值
  Serial.println(potiValue);//打印
}
这样就能不断读取电位器值了,少用delay,因为用delay就不能干别的事了
还有,其实所谓的多线程,也是一次运行一个程序,只是程序间的切换相当快,看上去就像是同时运行多个程序了,除非是多核cpu,呵呵
arduino也有多线程库,以后接触多了再用吧

评分

参与人数 1 +3 收起 理由
黑马 + 3 支持热心的站友

查看全部评分

回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-4-4 21:56:35 | 显示全部楼层
Malc 发表于 2012-4-4 20:20
改为
unsigned long pMillis=millis();
while(millis()-pMillis

非常感谢!我马上就去试试。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-25 12:24 , Processed in 0.045508 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表