Arduino 小车简单程序

int rightMz = 11;
int rightMf = 3;
3int leftMz = 6;
int leftMf =5;
int carspeed=120; //车辆根据重量160以上才能转动起来
void setup(){
pinMode(rightMz,OUTPUT);//电机端口的管脚模式。
pinMode(rightMf,OUTPUT);//电机端口的管脚模式。
pinMode(leftMz,OUTPUT);//电机端口的管脚模式
pinMode(leftMf,OUTPUT);//电机端口的管脚模式。
carstop();
}
void loop(){
  int delayTime =2000;
  forward(carspeed);//前进
  delay(delayTime);
  backward(carspeed);//后退
  delay(delayTime);
  turnLeft(carspeed);//原地左转
  delay(delayTime);//原地右转
  turnRight(carspeed);
  delay(delayTime);
  leftC(carspeed);
  delay(delayTime);
  rightC(carspeed);
  delay(delayTime);
  carstop();
  delay(delayTime);
}
//前进
void forward(int sp){
  analogWrite(rightMz,sp);
  digitalWrite(rightmf,0);
  analogWrite(leftMz,sp);
  digitalWrite(leftMf,0);}
//后退
void backward(int sp){
  analogWrite(rightMf,sp);
  digitalWrite(rightMz,0);
  analogWrite(leftMf,sp);
  digitalWrite(leftMz,0);}
//原地左转
void turnLeft(int sp){
  analogWrite(rightMz,sp);
  digitalWrite(rightMf,0);
  analogWrite(leftMz,0);
  digitalWrite(leftMf,0);}
//原地右转
void turnRight(int sp){
  analogWrite(rightMz,0);
  digitalWrite(rightMf,0);
  analogWrite(leftMz,sp);
  digitalWrite(leftMf,0);}
//左转圈
void leftc(int sp){
  analogWrite(rightMz,sp);
  digitalWrite(rightMf,0);
  analogWrite(leftMf,sp);
  digitalWrite(leftMz,0);}
//右转圈
void rightc(int sp){
  analogWrite(rightMf,sp);
  digitalWrite(rightMz,0);
  analogWrite(leftMz,sp);
  digitalWrite(leftMf,0);}

你学会了吗?

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然,我可以帮你提供一个简单Arduino小车测速程序代码。请注意,以下代码仅为参考,具体实现可能会因不同的硬件和需求而有所变化。 ```cpp // 引入库 #include <Wire.h> #include <Adafruit_MotorShield.h> #include "utility/Adafruit_MS_PWMServoDriver.h" // 创建马达盾对象 Adafruit_MotorShield AFMS = Adafruit_MotorShield(); // 定义电机对象 Adafruit_DCMotor *motorA = AFMS.getMotor(1); Adafruit_DCMotor *motorB = AFMS.getMotor(2); // 定义编码器引脚 const int encoderPinA = 2; const int encoderPinB = 3; // 初始化编码器变量 volatile long encoderCount = 0; int lastEncoded = 0; void setup() { // 初始化串口 Serial.begin(9600); // 设置编码器引脚为输入模式 pinMode(encoderPinA, INPUT); pinMode(encoderPinB, INPUT); // 当编码器引脚发生状态变化时触发中断 attachInterrupt(digitalPinToInterrupt(encoderPinA), updateEncoder, CHANGE); // 启动马达盾 AFMS.begin(); // 设置马达速度 motorA->setSpeed(255); motorB->setSpeed(255); } void loop() { // 获取当前编码器计数 long currentCount = encoderCount; // 清零编码器计数 encoderCount = 0; // 计算小车速度(这里假设编码器的每个脉冲对应车轮的一个单位距离) float speed = (float)currentCount / 10; // 例如,每个脉冲对应0.1cm // 输出速度值 Serial.print("Speed: "); Serial.print(speed); Serial.println(" cm/s"); // 延迟一段时间 delay(100); } // 编码器中断处理函数 void updateEncoder() { int MSB = digitalRead(encoderPinA); // 获取A引脚状态 int LSB = digitalRead(encoderPinB); // 获取B引脚状态 int encoded = (MSB << 1) | LSB; // 将A、B引脚状态合并为一个值 int sum = (lastEncoded << 2) | encoded; // 上一次和当前状态合并 if (sum == 0b1101 || sum == 0b0100 || sum == 0b0010 || sum == 0b1011) { encoderCount++; } else if (sum == 0b1110 || sum == 0b0111 || sum == 0b0001 || sum == 0b1000) { encoderCount--; } lastEncoded = encoded; // 更新上一次状态 } ``` 以上代码使用了Adafruit_MotorShield库进行马达控制,并使用两个编码器引脚来测量小车的速度。编码器每次计数时触发中断,然后通过计算编码器计数的变化来计算小车的速度。 请注意,这只是一个简单的示例代码,具体的实现可能会根据你的硬件配置和需求进行调整。希望对你有所帮助!如果你有更多问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值