2016年8月28日 星期日
[Arduino]Day-10-Timer1
要記得將TimerOne解壓到Libiary資料夾裡面
基本上,可以從序列埠看到一秒顯示一次
Ardunio只有三個Timer
分別為Timer0,1,2
其中0是8bit,1是16Bit,2是8Bit
////////////////////////////////////////////////
#include <TimerOne.h>
int Timer_count = 0;
void setup()
{
Serial.begin(9600);
Serial.println("Serial ready" ) ;
Timer1.initialize(1000000); // 1000000 = 1sec, set a timer of length 1 sec
Timer1.attachInterrupt( timer_1_Isr ); // attach the service routine here
}
/// --------------------------
/// Loop Routine
/// --------------------------
void loop()
{
}
/// --------------------------
/// Custom ISR Timer Routine
/// --------------------------
void timer_1_Isr(void)
{
Timer_count++;
Serial.print("Timer_count = ");
Serial.println(Timer_count);
}
http://playground.arduino.cc/Code/Timer1
https://oscarliang.com/arduino-timer-and-interrupt-tutorial/
http://coopermaa2nd.blogspot.tw/2011/07/41-blink-with-timer.html
[Arduino]Day-10-UNO-Hardware
Technical specs
Microcontroller | ATmega328P |
Operating Voltage | 5V |
Input Voltage (recommended) | 7-12V |
Input Voltage (limit) | 6-20V |
Digital I/O Pins | 14 (of which 6 provide PWM output) |
PWM Digital I/O Pins | 6 |
Analog Input Pins | 6 |
DC Current per I/O Pin | 20 mA |
DC Current for 3.3V Pin | 50 mA |
Flash Memory | 32 KB (ATmega328P) of which 0.5 KB used by bootloader |
SRAM | 2 KB (ATmega328P) |
EEPROM | 1 KB (ATmega328P) |
Clock Speed | 16 MHz |
Length | 68.6 mm |
Width | 53.4 mm |
Weight | 25 g |
https://www.arduino.cc/en/Main/ArduinoBoardUno
2016年8月20日 星期六
[Arduino]Day-9-超音波加伺服馬達
程式碼
=========================================================
#include <Servo.h>
#define Servo_Pin 7 // 定義伺服馬達輸出腳位(PWM)
#define servo_delay 5 // 伺服馬達轉向後的穩定時間
Servo myservo; // 宣告伺服馬達變數
int val = 0;
int Count_up = 1;
// Ultrasonic
int ECHO_Pin=2; // ultrasonic ECHO
int TRIG_Pin=3; // ultrasonic TRIG
int distance = 0;
// initial
int Ini_Flag = 0;
void setup()
{
Serial.begin(9600);
pinMode(ECHO_Pin, INPUT);
pinMode(TRIG_Pin, OUTPUT);
myservo.attach(Servo_Pin);
//
val = 90;
testServo(val);
delay(3000);
Serial.println("Servo 90 and serial ready" ) ;
//
}
void loop()
{
// //給安裝伺服馬達時的初始校正
// if(Ini_Flag == 0)
// {
// testServo(0);
// delay(3000);
// testServo(180);
// delay(3000);
// testServo(90);
// delay(5000);
// Ini_Flag = 1;
// }
if(Count_up)
{
val+=1;
if(val >= 170)
{
Count_up = 0;
}
}else{
val-=1;
if(val <= 9)
{
Count_up = 1;
}
}
testServo(val);
distance = Get_Distance();
Serial.print("motor = ");
Serial.print(val); //Output val
Serial.print(" distance = "); //Output
Serial.println(distance);
}
int Get_Distance(void)
{
digitalWrite(TRIG_Pin, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_Pin, HIGH); // Pulse for 10 micro sec to trigger ultrasonic detection
delayMicroseconds(10);
digitalWrite(TRIG_Pin, LOW);
int distance = pulseIn(ECHO_Pin, HIGH); // Read receiver pulse time
distance= distance/58; // Transform pulse time to distance
return distance;
}
void testServo(int angle)
{
myservo.write(angle);
delay(servo_delay); // 等待伺服馬達穩定
}
[轉貼]Arduino:stk500_getsync(): not in sync
下午也同樣發生這狀況,後來是燒錄時不能用腳位0與1。
燒錄時,若看到錯誤訊息「avrdude: stk500_getsync(): not in sync: resp=0x00」,雖然知道這代表著電腦端的燒錄程式avrdude不能與微控制器內的bootloader進行溝通,但卻無法知曉錯誤的源頭在哪,因為可能出錯的地方太多了。
底下列出可能導致此錯誤的原因,以及解決辦法:
原因:「工具-板子(Tools-Board)」與「工具-序列埠(Tools-Serial Port)」沒選好
辦法:確認你的板子到底是哪一塊,確認它所連接的序列埠是哪一個,重新設定正確的值
原因:序列埠被佔用了
辦法:關閉佔用序列埠的軟體,或電腦重開機
原因:驅動程式壞了、沒裝好
辦法:重新安裝驅動程式
原因:零件影響了燒錄所需的線路,譬如Uno板燒錄時須經由腳位0與1的線路
辦法:燒錄時拔除相關接線、暫時先拔掉擴充板
原因:舊板子與某些較小型的板子,需要自己按板子上的Reset鍵
辦法:觀看avrdude燒錄時輸出的訊息,在適當的時機按下Reset鍵;多試幾次,嘗試在不同的時間點按下
原因:若是自己買「USB轉Serial介面」模組再加上微控制器晶片,有可能TX與RX接反了
辦法:反過來接試試看
原因:微控制器裡的bootloader壞了,或根本沒有bootloader
辦法:找個ISP燒錄器,重新燒錄bootloader
原因:不明
辦法:電腦重開機
原因:不明
辦法:重新啟動Arduino IDE
原因:不明
辦法:重新拔插USB連接線
原因:不明
辦法:換插別的USB埠
原因:不明
辦法:改用USB集線器或改為直接插電腦的USB埠
原因:不明
辦法:換條USB線
出處
http://yehnan.blogspot.tw/2014/10/arduinostk500getsync-not-in-sync.html
燒錄時,若看到錯誤訊息「avrdude: stk500_getsync(): not in sync: resp=0x00」,雖然知道這代表著電腦端的燒錄程式avrdude不能與微控制器內的bootloader進行溝通,但卻無法知曉錯誤的源頭在哪,因為可能出錯的地方太多了。
底下列出可能導致此錯誤的原因,以及解決辦法:
原因:「工具-板子(Tools-Board)」與「工具-序列埠(Tools-Serial Port)」沒選好
辦法:確認你的板子到底是哪一塊,確認它所連接的序列埠是哪一個,重新設定正確的值
原因:序列埠被佔用了
辦法:關閉佔用序列埠的軟體,或電腦重開機
原因:驅動程式壞了、沒裝好
辦法:重新安裝驅動程式
原因:零件影響了燒錄所需的線路,譬如Uno板燒錄時須經由腳位0與1的線路
辦法:燒錄時拔除相關接線、暫時先拔掉擴充板
原因:舊板子與某些較小型的板子,需要自己按板子上的Reset鍵
辦法:觀看avrdude燒錄時輸出的訊息,在適當的時機按下Reset鍵;多試幾次,嘗試在不同的時間點按下
原因:若是自己買「USB轉Serial介面」模組再加上微控制器晶片,有可能TX與RX接反了
辦法:反過來接試試看
原因:微控制器裡的bootloader壞了,或根本沒有bootloader
辦法:找個ISP燒錄器,重新燒錄bootloader
原因:不明
辦法:電腦重開機
原因:不明
辦法:重新啟動Arduino IDE
原因:不明
辦法:重新拔插USB連接線
原因:不明
辦法:換插別的USB埠
原因:不明
辦法:改用USB集線器或改為直接插電腦的USB埠
原因:不明
辦法:換條USB線
出處
http://yehnan.blogspot.tw/2014/10/arduinostk500getsync-not-in-sync.html
[轉貼]Cooper Maa: 超棒的 Arduino pinout diagrams
Cooper Maa: 超棒的 Arduino pinout diagrams: 有個叫 Pighixxxx 的義大利人,最近製作了好多 Arduino 的 pinout diagrams 貼在 Arduino forum 上,有 Arduino UNO 的,有很多張 ATMega 的,例如 ATMega328 與 ATMega1284p 等,也有幾張是 A...
//筆記
Cooper Maa是個神人,他的部落格有許多玩Ardunio的玩家值得去看的文章,
這篇應該算是很有用的
//筆記
Cooper Maa是個神人,他的部落格有許多玩Ardunio的玩家值得去看的文章,
這篇應該算是很有用的
Mega版本
http://forum.arduino.cc/index.php/topic,146511.0.html
[Arduino]Day-9-servo_test2
今天得要一個人在家顧女兒,
因為女兒哭鬧不止,只能一手抱在腿上,一手coding,
弄完,拍好片上傳,貼上影片跟原始碼後,
突然發現....
女兒已經打呵欠了,
呵呵,
果然程式對女兒還是沒有吸引力的。
不過女兒倒是盯著轉來轉去的馬達一陣子,
大概3分鐘吧...
抱去睡覺後,現在來補充一下這篇裡面的文字
在這實驗裡面發現,delay不加也是能跑,而且感覺不出來比較快,
另外,透過序列埠,之後可以將資料回傳,再用VC或其他軟體接資料來畫圖,
下一步想將超音波資料讀回來。
=======================================================
#include <Servo.h>
#define Servo_Pin 2 // 定義伺服馬達輸出腳位(PWM)
#define servo_delay 15 // 伺服馬達轉向後的穩定時間
Servo myservo; // 宣告伺服馬達變數
int val;
int Count_up = 0;
void setup()
{
myservo.attach(Servo_Pin);
Serial.begin(9600);//
Serial.println("servo=o_seral_simple ready" ) ;
}
void loop()
{
if(Count_up)
{
if(val == 179)
{
Count_up = 0;
}
val++;
}else{
if(val == 0)
{
Count_up = 1;
}
val--;
}
testServo(val);
}
void testServo(int angle)
{
Serial.print("moving servo to ");
Serial.print(angle,DEC);
Serial.println();
myservo.write(angle);
delay(servo_delay); // 等待伺服馬達穩定
}
2016年8月19日 星期五
[Arduino]Day-8-Servo_Motor
利用Com埠送控制命令
控制Servo Motor
一如往常,組機構與找螺絲鎖孔的時間占了九成....
機構孔徑大小不合,鎖孔位置只能將就,基本上就是能鎖就好,其他就不要多要求。
=======================================================
#include <Servo.h>
#define MotorA_in1 8 //定義 馬達A in 1
#define MotorA_in2 9 //定義 馬達A in 2
#define MotorB_in1 10 //定義 馬達B in 1 to L298N IN3
#define MotorB_in2 11 //定義 馬達B in 2 to L298N IN4
#define MotorA_PWNA 5 //定義 ENA (PWM) 接腳
#define MotorB_PWNB 6 //定義 ENB (PWM) 接腳
// 伺服馬達(舵機)
#define Servo_Pin 2 // 定義伺服馬達輸出腳位(PWM)
#define servo_delay 250 // 伺服馬達轉向後的穩定時間
Servo myservo; // 宣告伺服馬達變數
int val;
int dir;
void setup()
{
pinMode(MotorA_in1,OUTPUT);
pinMode(MotorA_in2,OUTPUT);
pinMode(MotorB_in1,OUTPUT);
pinMode(MotorB_in2,OUTPUT);
pinMode(MotorA_PWNA,OUTPUT);
pinMode(MotorB_PWNB,OUTPUT);
myservo.attach(Servo_Pin);
Serial.begin(9600);//
Serial.println("servo=o_seral_simple ready" ) ;
}
void loop()
{
val=Serial.read();//
if(val>'0'&&val<='9')
{
val=val-'0';
dir=val*(180/9);//
Serial.print("moving servo to ");
Serial.print(dir,DEC);
Serial.println();
myservo.write(dir);
delay(servo_delay); // 等待伺服馬達穩定
}
}
2016年8月17日 星期三
[Arduino]Day7-L298N直流馬達驅動
測試L298N
#define MotorA_in1 8 //定義 馬達A in 1
#define MotorA_in2 9 //定義 馬達A in 2
#define MotorB_in1 10 //定義 馬達B in 1 to L298N IN3
#define MotorB_in2 11 //定義 馬達B in 2 to L298N IN4
#define MotorA_PWNA 5 //定義 ENA (PWM) 接腳
#define MotorB_PWNB 6 //定義 ENB (PWM) 接腳
void setup()
{
pinMode(MotorA_in1,OUTPUT);
pinMode(MotorA_in2,OUTPUT);
pinMode(MotorB_in1,OUTPUT);
pinMode(MotorB_in2,OUTPUT);
pinMode(MotorA_PWNA,OUTPUT);
pinMode(MotorB_PWNB,OUTPUT);
}
void loop()
{
// 直走
analogWrite(MotorA_PWNA,200); //設定直流馬達轉速
analogWrite(MotorB_PWNB,200);
digitalWrite(MotorA_in1,HIGH); //直流馬達(右)順時針轉動
digitalWrite(MotorA_in2,LOW);
digitalWrite(MotorB_in1,HIGH); //直流馬達(左)逆時針轉動
digitalWrite(MotorB_in2,LOW);
delay(2000);
//後退
analogWrite(MotorA_PWNA,200); //設定直流馬達轉速
analogWrite(MotorB_PWNB,200);
digitalWrite(MotorA_in1,LOW); //直流馬達(右)逆時針轉動
digitalWrite(MotorA_in2,HIGH);
digitalWrite(MotorB_in1,LOW); //直流馬達(左)順時針轉動
digitalWrite(MotorB_in2,HIGH);
delay(2000);
//左轉
analogWrite(MotorA_PWNA,80); //設定直流馬達轉速
analogWrite(MotorB_PWNB,80);
digitalWrite(MotorA_in1,HIGH); //直流馬達(右)順時針轉動
digitalWrite(MotorA_in2,LOW);
digitalWrite(MotorB_in1,LOW); //直流馬達(左)順時針轉動
digitalWrite(MotorB_in2,HIGH);
delay(2000);
//右轉
analogWrite(MotorA_PWNA,80); //設定馬達轉速
analogWrite(MotorB_PWNB,80);
digitalWrite(MotorA_in1,LOW); //馬達(右)逆時針轉動
digitalWrite(MotorA_in2,HIGH);
digitalWrite(MotorB_in1,HIGH); //馬達(左)逆時針轉動
digitalWrite(MotorB_in2,LOW);
delay(2000);
//停止
digitalWrite(MotorA_in1,HIGH); //馬達(右)停止轉動
digitalWrite(MotorA_in2,HIGH);
digitalWrite(MotorB_in1,HIGH); //馬達(左)停止轉動
digitalWrite(MotorB_in2,HIGH);
delay(2000);
}
blogger沒有私密文章的現成功能
原來blogger沒有私密文章的現成功能,
必須自己加入HTLML碼
參考
http://www.wfublog.com/2013/06/blogger-private-post.html
看起來無法把讀者分群
訂閱:
文章 (Atom)
[Sensor]MPU92/65
MPU92/65是很久以前買的感測器 基本上有加速度計、陀螺儀、電子羅盤、溫度計 以下是該電子商城的介紹 https://www.factoryforward.com/product/gy-87-mpu-9265-3-axis-9-dof-attitude-gyro-magnet...
-
程式碼 ========================================================= #include <Servo.h> #define Servo_Pin 7 // 定義伺服馬達輸出腳位(...
-
昨天發現NB風扇一直發生出運轉聲音,之前使用都不會這樣, 打開工作管理員,發現有個程序固定會占用30%左右的CPU效能, 如下 wlanext.exe Windows Wireless LAN 802.11 Extensibility Framework 這個程序只知...
-
本文引用自 https://www.arduino.cn/thread-12445-1-1.html // 控制 LED 亮滅, 每秒閃爍 5 次: 亮 0.1 秒滅 0.1 秒 ... // Prescaler 用 64 volatile int ggy...