# Arduino ## p.29_光敏電阻+LED燈 ``` int val = 0; void setup(){ Serial.begin(115200); pinMode(15, INPUT); } void loop() { val = analogRead(15); Serial.println(val); } ``` *** ## p.34_超音波程式+LED燈 ``` int trig = 12, echo = 13, ultrasinic, distance; void setup() { pinMode(trig, OUTPUT); pinMode(echo, INPUT); Serial.begin(115200); } void loop() { digitalWrite(trig, LOW); delayMicroseconds(2); digitalWrite(trig, HIGH); delayMicroseconds(10); digitalWrite(trig, LOW); ultrasinic = pulseIn(echo, HIGH); distance = ultrasinic/2/29; Serial.println(distance); delay(500); } ``` *** ## P.47_音樂演出 ``` #include"pitches.h" const int speakerPin = 18; int channel = 0; int relayPin = 8; int freq = 2000; int resolution = 8; void setup() { Serial.begin(115200); ledcSetup(channel, freq, resolution); ledcAttachPin(speakerPin, channel); pinMode(13, OUTPUT); pinMode(16, OUTPUT); pinMode(15, INPUT); } void loop() { int lengthSong = 25; int tempo = 200; //音高順序陣列 int melody[] = { NOTE_C5, NOTE_C5, NOTE_D5, NOTE_C5, NOTE_F5, NOTE_E5, NOTE_C5, NOTE_C5, NOTE_D5, NOTE_C5, NOTE_G5, NOTE_F5, NOTE_C5, NOTE_C5, NOTE_C6, NOTE_A5, NOTE_F5, NOTE_E5, NOTE_D5, NOTE_AS5, NOTE_AS5, NOTE_A5, NOTE_F5, NOTE_G5, NOTE_F5 }; //每一個音要幾拍 int beats[] = {1, 1, 2, 2, 2, 4, 1, 1, 2, 2, 2, 4, 1, 1, 2, 2, 2, 2, 6, 1, 1, 2, 2, 2, 4}; ledcWrite(channel, 75); //迴圈把每個音都跑過 for(int thisNote = 0;thisNote < lengthSong;thisNote++){ ledcWriteTone(channel, melody[thisNote]); int noteDuration = tempo*beats[thisNote]; int pauseBetweenNotes = noteDuration * 1.30; delay(pauseBetweenNotes); ledcWriteTone(channel, 0); delay(100); }delay(10000); } ``` *** ### pitches.h 模組 ``` #define NOTE_B0 31 #define NOTE_C1 33 #define NOTE_CS1 35 #define NOTE_D1 37 #define NOTE_DS1 39 #define NOTE_E1 41 #define NOTE_F1 44 #define NOTE_FS1 46 #define NOTE_G1 49 #define NOTE_GS1 52 #define NOTE_A1 55 #define NOTE_AS1 58 #define NOTE_B1 62 #define NOTE_C2 65 #define NOTE_CS2 69 #define NOTE_D2 73 #define NOTE_DS2 78 #define NOTE_E2 82 #define NOTE_F2 87 #define NOTE_FS2 93 #define NOTE_G2 98 #define NOTE_GS2 104 #define NOTE_A2 110 #define NOTE_AS2 117 #define NOTE_B2 123 #define NOTE_C3 131 #define NOTE_CS3 139 #define NOTE_D3 147 #define NOTE_DS3 156 #define NOTE_E3 165 #define NOTE_F3 175 #define NOTE_FS3 185 #define NOTE_G3 196 #define NOTE_GS3 208 #define NOTE_A3 220 #define NOTE_AS3 233 #define NOTE_B3 247 #define NOTE_C4 262 #define NOTE_CS4 277 #define NOTE_D4 294 #define NOTE_DS4 311 #define NOTE_E4 330 #define NOTE_F4 349 #define NOTE_FS4 370 #define NOTE_G4 392 #define NOTE_GS4 415 #define NOTE_A4 440 #define NOTE_AS4 466 #define NOTE_B4 494 #define NOTE_C5 523 #define NOTE_CS5 554 #define NOTE_D5 587 #define NOTE_DS5 622 #define NOTE_E5 659 #define NOTE_F5 698 #define NOTE_FS5 740 #define NOTE_G5 784 #define NOTE_GS5 831 #define NOTE_A5 880 #define NOTE_AS5 932 #define NOTE_B5 988 #define NOTE_C6 1047 #define NOTE_CS6 1109 #define NOTE_D6 1175 #define NOTE_DS6 1245 #define NOTE_E6 1319 #define NOTE_F6 1397 #define NOTE_FS6 1480 #define NOTE_G6 1568 #define NOTE_GS6 1661 #define NOTE_A6 1760 #define NOTE_AS6 1865 #define NOTE_B6 1976 #define NOTE_C7 2093 #define NOTE_CS7 2217 #define NOTE_D7 2349 #define NOTE_DS7 2489 #define NOTE_E7 2637 #define NOTE_F7 2794 #define NOTE_FS7 2960 #define NOTE_G7 3136 #define NOTE_GS7 3322 #define NOTE_A7 3520 #define NOTE_AS7 3729 #define NOTE_B7 3951 #define NOTE_C8 4186 #define NOTE_CS8 4435 #define NOTE_D8 4699 #define NOTE_DS8 4978 ``` *** ## p.56_按鈕燈程式 p.59_邏輯判斷程式 ``` int val = 0; void setup() { Serial.begin(115200); pinMode(15, INPUT); pinMode(13, OUTPUT); pinMode(17, OUTPUT); } void loop() { val = digitalRead(15); Serial.println(val); if (val == 1){ digitalWrite(13, 1); digitalWrite(17, 0); } else { digitalWrite(17, 1); digitalWrite(13, 0); } } ``` *** ## p.63_計數控制程式 ``` int count = 0; void setup(){ Serial.begin(115200); pinMode(15, INPUT); pinMode(13, OUTPUT); pinMode(14, OUTPUT); } void loop() { if(!(digitalRead(15))){ count++; } count %= 6; switch(count){ case 0: digitalWrite(13, 0); digitalWrite(14, 0); delay(1000); break; case 1: digitalWrite(13, 1); delay(1000); digitalWrite(14, 1); delay(1000); break; case 2: digitalWrite(14, 1); delay(1000); digitalWrite(14, 0); delay(1000); break; case 3: digitalWrite(13, 1); digitalWrite(14, 1); delay(1000); digitalWrite(13, 0); digitalWrite(14, 0); delay(1000); break; case 4: digitalWrite(13, 1); digitalWrite(14, 0); delay(1000); digitalWrite(13, 0); digitalWrite(14, 1); delay(1000); break; case 5: digitalWrite(13, 1); digitalWrite(14, 1); delay(1000); break; } } ``` *** ## p.69_LED呼吸燈程式 ``` const int freq = 5000; const int ledChannel = 0; const int resolution = 8; void setup() { ledcSetup(ledChannel, freq, resolution); ledcAttachPin(12, ledChannel); } void loop() { for(int i=0;i<=255;i++){ ledcWrite(ledChannel, i); delay(10); } for(int i=255;i>=0;i--){ ledcWrite(ledChannel, i); delay(10); } } ``` *** ## p.73_PWM舵機控制 ``` #include<Servo.h> Servo servo; void setup(){ servo.attach(15); } void loop(){ for(int i=0;i<350;i++){ servo.write(i); delay(5); } for(int i=350;i>0;i--){ servo.write(i); delay(5); } } ``` *** ## p.86_計數控制優化 ``` int count = 0; void setup() { pinMode(13, OUTPUT); pinMode(14, OUTPUT); pinMode(15, INPUT); }void con(int a, int b){ digitalWrite(13, a); digitalWrite(14, b); delay(1000); }void loop(){ if(!digitalRead(15))count++; count %= 6; switch(count){ case 1:{ con(1, 0); con(0, 0); break; }case 2:{ con(1, 1); con(1, 0); break; }case 3:{ con(0, 1); con(1, 1); break; }case 4:{ con(0, 0); con(0, 1); break; }case 5:{ con(1, 0); con(0, 1); break; } } } ``` *** ## p.89_啟動開關優化 ``` void wait(){ while(digitalRead(15))delay(50); }void bli(int c, int d){ for(int i=0;i<c*c*c;i++){ digitalWrite(13, i%2); digitalWrite(14, i+1%2); delay(d); }digitalWrite(13, 0); digitalWrite(14, 0); }void setup() { pinMode(13, OUTPUT); pinMode(14, OUTPUT); pinMode(15, INPUT); }void loop(){ wait(); bli(3, 1000); } ``` *** ## p.102_計次裝置 ``` int reset = 0, count = 0; void setup() { Serial.begin(115200); pinMode(15, INPUT); pinMode(34, INPUT); }void Q(int a, int b){ static int n = 0, counter = 0; if(b == 0){ n = 1; if(b == n){ counter++; n = 0; } }else if(a == 0){ n = 1; if(a == n){ counter = 0; n = 0; } }delay(200); }void loop(){ reset = digitalRead(15); count = digitalRead(34); Q(reset, count); } ``` *** ## p.112_DHT溫溼度感測實作 ``` #include <SimpleBLE.h> #include <SimpleDHT.h> int pinDHT11 = 23; SimpleDHT11 dht11(pinDHT11); void setup() { Serial.begin(115200); }void loop() { byte temperature = 0;byte Humidity = 0; dht11.read(&temperature, &Humidity, NULL); Serial.print("溫度:"); Serial.print((int)temperature); Serial.print(" *C 濕度:"); Serial.print((int)Humidity); Serial.println(" % "); delay(2000); } ``` *** ## p.116_LCD顯示實作 http://163.21.105.14/mod/resource/view.php?inpopup=true&id=1180 ``` #include <Wire.h> #include "LiquidCrystal_I2C.h" //LiquidCrystal_I2C lcd(0x27); // Set the LCD I2C address LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7); // 0x27 is the I2C bus address for an unmodified backpack void setup(){ Serial.begin(115200); // activate LCD module lcd.begin (16,2); // for 16 x 2 LCD module lcd.setBacklightPin(3,POSITIVE); lcd.setBacklight(HIGH); } void loop(){ lcd.home (); // go home lcd.print("Hello world"); lcd.setCursor ( 0, 1 ); // go to the next line lcd.print("Shanelin"); lcd.setCursor ( 1, 0 ); delay ( 1000 ); } *** ``` ## p.148_Line 通知 ``` #include <WiFi.h> #include <WiFiClientSecure.h> //請依照網路環境修改 const char* SSID = "那可玹玹"; const char* PASSWORD = "shanelin0621"; const String Linetoken = "1lIMtJLJeoU6cimui2MMs9ewXDXo0ZFHOs7qwtc4DQv"; int pinDHT11 = 15; WiFiClientSecure client;//網路連線物件 const char* host = "notify-api.line.me";//LINE Notify API網址 void setup() { Serial.begin(115200); //連線到WiFi WiFi.begin(SSID, PASSWORD); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(500); } Serial.println("WiFi connected"); } void loop() { String message = "上課看手機小過一支"; client.setInsecure(); if (client.connect(host, 443)) { int LEN = message.length(); //利用http傳送 String url = "/api/notify"; client.println("POST " + url + " HTTP/1.1"); client.print("Host: "); client.println(host); client.print("Authorization: Bearer "); client.println(Linetoken); client.println("Content-Type: application/x-www-form-urlencoded"); client.print("Content-Length: "); client.println( String((LEN + 8)) ); client.println(); client.print("message="); client.println(message); client.println(); client.stop(); //斷線,否則只能傳5次 } //每5秒發送一次,覺得太頻繁可以把時間拉長... delay(100); } ``` *** ## p.159_取址運算子 ``` #include <bits/stdc++.h> #include <stdio.h> #define int long long using namespace std; signed main(void){ int *ptr_test;//*代表可以放置指標 int value = 1; int *qwq = &value;//不能直接打&1,必須先用一個int存 ptr_test = &value;//傳出 cout << "address:" << ptr_test << "\n"; cout << "address:" << *ptr_test << "\n"; cout << "address:" << *qwq << "\n"; } ``` *** ## p.160_傳址呼叫 ``` #include <bits/stdc++.h> #include <stdio.h> #define int long long using namespace std; int plus1(int* s){ *s+=1; }int plus2(int* s){ (*s)++; }//兩種一樣,只是第二種需要加上括號 signed main(void){ int *ptr_test;//*代表可以放置指標 int value = 1; int *qwq = &value;//不能直接打&1,必須先用一個int存 ptr_test = &value;//傳出 cout << "address:" << ptr_test << "\n"; cout << "address:" << *ptr_test << "\n"; cout << "address:" << *qwq << "\n"; cout << "address:" << qwq << "\n"; plus1(qwq); cout << "address:" << *qwq << "\n"; cout << "address:" << qwq << "\n"; plus2(qwq); cout << "address:" << *qwq << "\n"; cout << "address:" << qwq << "\n"; } ``` *** ## p.163_陣列指標 ``` #include <bits/stdc++.h> #include <stdio.h> #define int long long using namespace std; int a[10]; signed main(void){ for(int i=0;i<=10;i++){ a[i] = i; }for(int i=0;i<=10;i++){ cout << a[i] << "\n"; cout << &a[i] << "\n"; } } ```