Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 4435|回復: 9
打印 上一主題 下一主題

用App Inventor 2 控制 Arduino PWM輸出

[複製鏈接]
跳轉到指定樓層
1#
發表於 2015-3-19 20:53:32 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
請問大家,我用App Inventor 2 來控制 Arduino 自走車的DC馬達 PWM 轉速我用 http://blog.cavedu.com/programmi ... uinowithbluetooth2/ 來參考
但我做出來的程式,用手機控制Arduino的PWM 轉速,為什麼會速度會亂轉
2#
發表於 2015-3-19 23:59:40 | 只看該作者
回復 1# ymin

DC直流馬達? 怎麼不是伺服馬達?
3#
 樓主| 發表於 2015-3-20 07:38:41 | 只看該作者
回復 2# ates1687
我買回來的套件就是用直流馬達,是否要改成伺服馬達才會比較好控制?
4#
發表於 2015-3-20 17:55:56 | 只看該作者
回復 3# ymin

你要把你的"程式"跟"實體"還有"App Inventor"通通放上來才可以解決 0.0
5#
 樓主| 發表於 2015-3-20 19:33:36 | 只看該作者
本帖最後由 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, 下載次數: 357)

app inventor.png

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

實體.jpg
6#
發表於 2015-3-20 19:56:36 | 只看該作者
回復 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, 下載次數: 357)

未命名.png
7#
 樓主| 發表於 2015-3-20 20:25:36 | 只看該作者
本帖最後由 ymin 於 2015-3-20 20:27 編輯

回復 6# ates1687
好的,我試試看
非常感謝您
8#
 樓主| 發表於 2015-3-21 14:43:46 | 只看該作者
回復 6# ates1687
請問你的arduino的程式

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

還有

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

為什麼要 ==97
9#
發表於 2015-3-21 16:45:09 | 只看該作者
回復 8# ymin



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

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

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

     為什麼要 ==97

Ans: Ascll碼 對應的97就是 "b"  搜尋關鍵字: Ascll碼
      
       ==97  //是否為b?
10#
發表於 2015-3-22 02:21:56 | 只看該作者
本帖最後由 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);
}
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2025-1-31 07:09 , Processed in 0.129293 second(s), 9 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表