snow7788 發表於 2019-7-29 16:27:25

arduino+app藍牙控制步進馬達

本帖最後由 snow7788 於 2019-7-29 16:28 編輯

各位前輩好,小弟最近接觸了Arduino 最近還學到了App Inventor2

目前只會設定固定圈數+控制正反轉1圈

請問如果我想要讓他我按住按鈕"收"他會一直反轉,放開則停住,按住按鈕"放"他會一直正轉,放開則停住,我應該怎麼去寫Arduino跟app的程式呢?


Arduino程式碼如下(目前的程式碼就是按一下轉一圈)

#include <Stepper.h>
#include <SoftwareSerial.h>
SoftwareSerial BT(7,8);
#define STEPS 2048
//stepper(一圈的步數,IN1 IN2 IN3 IN4)
Stepper stepper( STEPS, 2, 3, 4, 5); //28BYJ-48馬達需要把中間兩pin位置交換
int speed = 14; //設定馬達速度(最大17),速度過快馬達不動
int Rece; //接收藍牙模組端訊號
void setup() {
BT.begin(9600);
stepper.setSpeed(speed); //將馬達的速度設定成15 RPM(1分鐘轉15圈)
}

void loop() {
if(BT.available()>0){    //判斷是否有收到訊號      
Rece=BT.read();          //讀入變數Rece中
switch(Rece){
    case 'u' :      
   stepper.step(2048);   //正1圈
   break;
    case 'd' :
   stepper.step(-2048);//反1圈
   break;
    }
}
}

APP程式如下

超新手 發表於 2019-7-30 12:44:22

本帖最後由 超新手 於 2019-7-30 12:47 編輯


APP 的按鍵要改用"被壓下"和"被鬆開"
收的被壓下傳 u, 被鬆開傳 s
放的被壓下傳 d, 被鬆開傳 s
arduino 端則宣告一變數

其他部份不變

unsigned char f =0;
void loop() {
if(f == 1) {
   stepper.step(1);
} else(f == 2) {
   stepper.step(-1);
}
if(BT.available()>0){    //判斷是否有收到訊號      
Rece=BT.read();          //讀入變數Rece中
switch(Rece){
    case 'u' :      
   f = 1;
   break;
    case 'd' :
   f = 2;
   break;
    case 's' :
   f = 0;
   break;
    }
}
}

snow7788 發表於 2019-7-30 14:58:38

超新手 發表於 2019-7-30 12:44
APP 的按鍵要改用"被壓下"和"被鬆開"
收的被壓下傳 u, 被鬆開傳 s
放的被壓下傳 d, 被鬆開傳 s


感謝你><! 讓我燒焦的腦袋得以恢復
頁: [1]
查看完整版本: arduino+app藍牙控制步進馬達