Robofun 機器人論壇

標題: 用App Inventor 2 控制 Arduino PWM輸出 [打印本頁]

作者: ymin    時間: 2015-3-19 20:53
標題: 用App Inventor 2 控制 Arduino PWM輸出
請問大家,我用App Inventor 2 來控制 Arduino 自走車的DC馬達 PWM 轉速我用 http://blog.cavedu.com/programmi ... uinowithbluetooth2/ 來參考
但我做出來的程式,用手機控制Arduino的PWM 轉速,為什麼會速度會亂轉
作者: ates1687    時間: 2015-3-19 23:59
回復 1# ymin

DC直流馬達? 怎麼不是伺服馬達?
作者: ymin    時間: 2015-3-20 07:38
回復 2# ates1687
我買回來的套件就是用直流馬達,是否要改成伺服馬達才會比較好控制?
作者: ates1687    時間: 2015-3-20 17:55
回復 3# ymin

你要把你的"程式"跟"實體"還有"App Inventor"通通放上來才可以解決 0.0
作者: ymin    時間: 2015-3-20 19:33
本帖最後由 ymin 於 2015-3-20 19:44 編輯

回復 4# ates1687
Arduino 程式
#include <SoftwareSerial.h>
#include <Wire.h>
SoftwareSerial BT(3,2);
byte cmmd[20];
int insize;
int a=0;

void setup()
{
   Serial.begin(9600);

   BT.begin(9600);

   pinMode(5, OUTPUT);
   pinMode(10, OUTPUT);  
   pinMode(9, OUTPUT);   
}

void loop()
{
  while(1)
  {
    if ((insize=(BT.available()))>0)
    {
      Serial.print("input size = ");
      Serial.println(insize);
      for (int i=0; i<insize; i++)
      {
        Serial.print(cmmd=char(BT.read()));
        Serial.print(" ");
      }
    }
    if(insize==4)
    {  
      a = (cmmd[0]-48)*10;
      a=a+(cmmd[1]-48);
    }
    if(insize==3)
    {
      a=(cmmd[0]-48);
    }
     Serial.println(a);
     analogWrite(5,map(a,0,255,0,255));
     digitalWrite(10,HIGH);
     digitalWrite(9,LOW);
  }
}

app inventor.png (102.2 KB, 下載次數: 358)

app inventor.png

實體.jpg (2.17 MB, 下載次數: 382)

實體.jpg

作者: ates1687    時間: 2015-3-20 19:56
回復 5# ymin


#include <SoftwareSerial.h>
#include <Wire.h>
SoftwareSerial I2CBT(10,11);
int n=0;
int o=0;
int p=0;
int ledPin1 = 5;
int ledPin2 = 9;
int ledPin3 = 6;
void setup() {
   Serial.begin(9600);
   I2CBT.begin(9600);
   pinMode(ledPin1, OUTPUT);  
   pinMode(ledPin2, OUTPUT);
   pinMode(ledPin3, OUTPUT);
}
void loop() {
byte cmmd[20];
int insize;
while(1){
   if ((insize=(I2CBT.available()))>0){  //讀取藍牙訊息
      Serial.println("input size = ");
      Serial.println(insize);
      for (int i=0; i<insize; i++){
Serial.print(cmmd=char(I2CBT.read()));
Serial.print(" ");
      }
   }
//--------------------------------------------------------------------------- (LED1)
   if (cmmd[0] == 97) { //讀取第一個字
         n=n+25.5;
          if(n>=255) {
            n=255;
          }
          analogWrite(ledPin1,n);
          delay(500);
          cmmd[0]=0;
   }
   if(cmmd[0] == 98){
         n=n-25.5;
          if(n<=0) {
            n=0;
          }
          analogWrite(ledPin1,n);
          delay(500);
          cmmd[0]=0;
   }
//--------------------------------------------------------------------------- (LED2)
   if (cmmd[0] == 99) { //讀取第一個字
         o=o+25.5;
          if(o>=255) {
            o=255;
          }
          analogWrite(ledPin2,o);
          delay(500);
          cmmd[0]=0;
   }
   if(cmmd[0] == 100){
         o=o-25.5;
          if(o<=0) {
            o=0;
          }
          analogWrite(ledPin2,o);
          delay(500);
          cmmd[0]=0;
   }
//--------------------------------------------------------------------------- (LED3)
   if (cmmd[0] == 101) { //讀取第一個字
         p=p+25.5;
          if(p>=255) {
            p=255;
          }
          analogWrite(ledPin3,p);
          delay(500);
          cmmd[0]=0;
   }
   if(cmmd[0] == 102){
         p=p-25.5;
          if(p<=0) {
            p=0;
          }
          analogWrite(ledPin3,p);
          delay(500);
          cmmd[0]=0;
   }
  } //while
}//loop


這是我用pwm控制3色LED變換不同的顏色,應該是一樣的東西你可以做修改



app.png (69.85 KB, 下載次數: 359)

app.png

未命名.png (100.37 KB, 下載次數: 358)

未命名.png

作者: ymin    時間: 2015-3-20 20:25
本帖最後由 ymin 於 2015-3-20 20:27 編輯

回復 6# ates1687
好的,我試試看
非常感謝您
作者: ymin    時間: 2015-3-21 14:43
回復 6# ates1687
請問你的arduino的程式

byte cmmd[20]; 是甚麼意思啊

還有

if (cmmd[0] == 97)  //讀取第一個字

為什麼要 ==97
作者: ates1687    時間: 2015-3-21 16:45
回復 8# ymin



Q:byte cmmd[20]; 是甚麼意思啊

Ans:我是參照上面的網址複製的,但是我沒改道這一行,所以byte cmmd[20]; 我也不知道~~

Q2 if (cmmd[0] == 97)  //讀取第一個字

     為什麼要 ==97

Ans: Ascll碼 對應的97就是 "b"  搜尋關鍵字: Ascll碼
      
       ==97  //是否為b?
作者: qq83429    時間: 2015-3-22 02:21
本帖最後由 qq83429 於 2015-3-22 02:25 編輯

曾經我做過一個小玩具控制四個LED燈我只有控制亮滅其他你能夠改變一下  去控制它前進後退   要APP站內信囉


#include <SortwareSenal.h>
SoftwareSerial mySeria1(3, 2);
ll RX, TX arduino uno pin<-->TX,RX bluetoc
Const byte ledpin_F=7;
Const byte ledpin_B=8;
Const byte ledpin_L=9;
Const byte ledpin_R=l0;
Const byte textpin=1l;
char val;
void setup()
{

Serial.begin(9600);

pinMode(ledpin_F,OUTPUT);

pinMode(ledpin_B,OUTPUT);

pinMode(ledpin_L,OUTPUT);

pinMode(ledpin_R,OUTPUT);

pinMode(textpin,OUTPUT);

mySerial.begin(9600);
}
void loop()
{

digita1Write(textpin,l-IIGH);

delay(200);

if (mySerial.avai1able()>0){

va1=mySeria1.read0;

Seria1.print("val= ");

Seria1.print1n(va1);

switch (val){

case 』w':

stopled();

digitalWrite(ledpin_F,I-IIGH);

break;

case 'x':

stopled();

digita1Write(ledpin_B,l-IIGH);

break;

case 『a』:

st0pledO;

digita1Write(1edpin_L,HIGH);

break;

case 『d』:

st0pledO;

digita1Write(1edpin_R,HIGH);

break;

case 『s』:

st0pledO;

break;
}

digita1Write(textpin,I_OW);

delay(500);
}
}
void stopled(){

digita1Write(1edpin_F,LOW);

digita1Write(1edpin_B,LOW);

digita1Write(1edpin_L,LOW);

digita1Write(1edpin_R,LOW);
}




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2