2015年5月18日 星期一

APP Inventor 2 藍芽傳送Slider數值至Arduino

APP Inventor 2
使用計時器 計時時間設為15ms
當Slider位置改變時啟動計時器
計時時間到再傳送Slider數值
這是將timer作為delay



這邊有趣的是如不用floor取整數
會出現xxx.5的數值??

Arduino

此處仍然使用readString()來讀取字串
存放在myString
其資料型態是String

處理方法(一)
以c_str()將他轉成char[]
將它複製到newString[]
最後以atoi轉成int

#include <SoftwareSerial.h>
#include <Wire.h>//引用二個函式庫SoftwareSerial及Wire
SoftwareSerial I2CBT(10,11);//定義PIN10及PIN11分別為RX及TX腳位
//注意此RX, TX分別接藍芽模組的TX, RX
int inSlider=0;
String myString;
char newString[]="000";
void setup() {
   Serial.begin(9600); //Arduino起始鮑率:9600
   I2CBT.begin(57600);
//藍牙鮑率:57600(注意!每個藍牙晶片的鮑率都不太一樣,請務必確認
   I2CBT.setTimeout(5);
   Serial.println("Hello");  
}
void loop() {
   // 檢查是否有資料可供讀取
   while (I2CBT.available()) {
     myString=I2CBT.readString();
     strcpy(newString,myString.c_str());
     inSlider=atoi(newString);
     if (inSlider<=500){
      Serial.println(inSlider);  
    }
     else{
      Serial.println("wrong");}
    }


方法(二)

直接使用Arduino的toInt()
將String轉整數 

#include <SoftwareSerial.h>
#include <Wire.h>//引用二個函式庫SoftwareSerial及Wire
SoftwareSerial I2CBT(10,11);//定義PIN10及PIN11分別為RX及TX腳位
//注意此RX, TX分別接藍芽模組的TX, RX
int inSlider=0;
String myString;

void setup() {
   Serial.begin(9600); //Arduino起始鮑率:9600
   I2CBT.begin(57600);
//藍牙鮑率:57600(注意!每個藍牙晶片的鮑率都不太一樣,請務必確認
   I2CBT.setTimeout(5);
   Serial.println("Hello");  
}
void loop() {
   // 檢查是否有資料可供讀取
   while (I2CBT.available()) {
     myString=I2CBT.readString();
     inSlider=myString.toInt();
     if (inSlider<=500){
      Serial.println(inSlider);  
    }
     else{
      Serial.println("wrong");}
    }














沒有留言:

張貼留言