可以设定进入和停止位置的滑轨代码参考

 

 

// Sketch for CamSlider
// 06/04/2019 by RZtronics <raj.shinde004@gmail.com>
// Project homepage: http://RZtronics.com/
///
//Terms of use
///
//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
//IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
//FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
//AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
//LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
//OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
//THE SOFTWARE.
///

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <AccelStepper.h>
#include <MultiStepper.h>
#include "bitmap.h"

#define limitSwitch 11
#define PinSW 2
#define PinCLK 3  
#define PinDT 8
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

AccelStepper stepper2(1, 7, 6); // (Type:driver, STEP, DIR)
AccelStepper stepper1(1, 5, 4);

MultiStepper StepperControl; 

long gotoposition[2]; 

volatile long XInPoint=0;
volatile long YInPoint=0;
volatile long XOutPoint=0;
volatile long YOutPoint=0;  
volatile long totaldistance=0;
int flag=0; 
int temp=0;
int i,j;
unsigned long switch0=0;
unsigned long rotary0=0;
float setspeed=200;
float motorspeed;
float timeinsec;
float timeinmins;
volatile boolean TurnDetected;  
volatile boolean rotationdirection;  


void Switch()  
{
 if(millis()-switch0>500)
 {
 flag=flag+1;
 }
 switch0=millis();
}

void Rotary()  
{
delay(75);
if (digitalRead(PinCLK))
rotationdirection= digitalRead(PinDT);
else
rotationdirection= !digitalRead(PinDT);
TurnDetected = true;
delay(75);
}

void setup() 
{
  Serial.begin(9600);
  stepper1.setMaxSpeed(3000);
  stepper1.setSpeed(200);
  stepper2.setMaxSpeed(3000);
  stepper2.setSpeed(200);
  
  pinMode(limitSwitch, INPUT_PULLUP);
  pinMode(PinSW,INPUT_PULLUP); 
  pinMode(PinCLK,INPUT_PULLUP); 
  pinMode(PinDT,INPUT_PULLUP);  
  
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C); 
  display.clearDisplay()
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
const int X_pin = 2; // X 摇杆引脚 const int Y_pin = 3; // Y 摇杆引脚 const int start_pin = 4; // 开始按钮引脚 const int end_pin = 5; // 结束按钮引脚 const int oled_pin = 6; // OLED 屏幕引脚int start_x; // 起点 X 位置 int start_y; // 起点 Y 位置 int end_x; // 终点 X 位置 int end_y; // 终点 Y 位置 int speed_x; // X 轴速度 int speed_y; // Y 轴速度 int total_time; // 总时间void setup() { Serial.begin(9600); // 打开串口 pinMode(X_pin, INPUT); // 设置 X 轴输入 pinMode(Y_pin, INPUT); // 设置 Y 轴输入 pinMode(start_pin, INPUT); // 设置开始按钮输入 pinMode(end_pin, INPUT); // 设置结束按钮输入 pinMode(oled_pin, OUTPUT); // 设置 OLED 屏幕输出 start_x = 0; // 设置起点 X 位置 start_y = 0; // 设置起点 Y 位置 end_x = 0; // 设置终点 X 位置 end_y = 0; // 设置终点 Y 位置 speed_x = 0; // 设置 X 轴速度 speed_y = 0; // 设置 Y 轴速度 total_time = 0; // 设置总时间 }void loop() { start_x = analogRead(X_pin); // 读取起点 X 位置 start_y = analogRead(Y_pin); // 读取起点 Y 位置 end_x = analogRead(X_pin); // 读取终点 X 位置 end_y = analogRead(Y_pin); // 读取终点 Y 位置 speed_x = analogRead(X_pin); // 读取 X 轴速度 speed_y = analogRead(Y_pin); // 读取 Y 轴速度 total_time = abs(end_x - start_x) / speed_x + abs(end_y - start_y) / speed_y; // 计算总时间 // OLED 屏幕显示总时间、剩余时间、起点和终点位置 digitalWrite(oled_pin, HIGH); Serial.print("总时间:" + total_time); Serial.print("剩余时间:" + total_time); Serial.print("起点位置:" + start_x +","+ start_y); Serial.print("终点位置:" + end_x +","+ end_y); digitalWrite(oled_pin, LOW); // 摇杆控制屏幕显示开始和停止功能 if (digitalRead(start_pin) == HIGH) { digitalWrite(oled_pin, HIGH); Serial.println("开始"); digitalWrite(oled_pin, LOW); // 开始滑轨运动 for (int x = start_x; x < end_x; x += speed_x) { for (int y = start_y; y < end_y; y += speed_y) { // 执行运动 } } digitalWrite(oled_pin, HIGH); Serial.println("结束"); digitalWrite(oled_pin, LOW); } if (digitalRead(end_pin) == HIGH) { digitalWrite(oled_pin, HIGH); Serial.println("停止"); digitalWrite(oled_pin, LOW); // 停止滑轨运动 } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值