Monday, January 28, 2019

ไมโครคอนโทรลเลอร์และอินเทอร์เฟซเบื้องต้น

ตัวอย่างที่ 1. การแสดงผลข้อความผ่านจอ lcd โดยใช้โปรแกรม Arduino IDE #include <LiquidCrystal_I2C.h>
#include <Wire.h>
#define I2C_ADDR 0x27
#define blp 3
LiquidCrystal_I2C lcd(I2C_ADDR, 2, 1, 0, 4, 5, 6, 7);
byte ww[8] = {B00000,B00000,B11010,B01010,B01010,B01010,B01110,B00000}; //ข
byte aa[8] = {B00000,B00000,B11010,B01010,B01010,B01011,B01101,B00000}; //น
byte dd[8] = {B00000,B00000,B11001,B01001,B01001,B11101,B11011,B00000}; //ม
byte uu[8] = {B00000,B00000,B10001,B10001,B10101,B11011,B10001,B00000}; //พ
byte hh[8] = {B00000,B00000,B01110,B00010,B00010,B00010,B00010,B00000}; //า
byte ee[8] = {B00000,B00000,B01101,B10001,B01001,B10001,B11111,B00000}; //ย
void setup() {

  lcd.begin (16, 2);
  lcd.setBacklightPin(blp, POSITIVE);
  lcd.setBacklight(HIGH);

  lcd.createChar(1, ww); //เก็บค่าอักศร ข
  lcd.createChar(2, aa); //เก็บค่าอักศร น
  lcd.createChar(3, dd); //เก็บค่าอักศร ม
  lcd.createChar(4, uu); //เก็บค่าอักศร พ
  lcd.createChar(5, hh); //เก็บค่าอักศร า
  lcd.createChar(6, ee); //เก็บค่าอักศร ย
}

void loop() {
scrollTextDisplay();
}
void scrollTextDisplay(){
  for (int couter = 0; couter < 14; couter++){
    lcd.scrollDisplayLeft();
    lcd.setCursor(4, 1);
    lcd.write((uint8_t)1);//ข
    lcd.write((uint8_t)2);//น
    lcd.write((uint8_t)3);//ม
    lcd.write((uint8_t)4);//พ
    lcd.write((uint8_t)5);//า
    lcd.write((uint8_t)6);//ย
    
    lcd.setCursor(2, 0);
    lcd.print("Microcontroller");
    delay(500);
  }
}

ตัวอย่างที่ 2. วงจรหรี่/เร่งไฟโดยใช้potentiometer คู่กับบอร์ด Arduino

int sensorPin = A5; // select the input pin for the potentiometer int ledPin = 13; // select the pin for the LED int sensorValue = 0; // variable to store the value coming from the sensor  void setup() { pinMode(ledPin, OUTPUT); Serial.begin(9600); }  void loop() {  sensorValue = analogRead(sensorPin); digitalWrite(ledPin, HIGH); delay(sensorValue); digitalWrite(ledPin, LOW); delay(sensorValue); Serial.println(sensorValue, DEC); } ตัวอย่างที่ 3. สร้างเสียงเพลงโดยใช้ buzzer 

#include "pitches.h"
#define melodyPin 9
// Jingle Bells
int melody[] = {
NOTE_E5, NOTE_E5, NOTE_E5,
NOTE_E5, NOTE_E5, NOTE_E5,
NOTE_E5, NOTE_G5, NOTE_C5, NOTE_D5,
NOTE_E5,
NOTE_F5, NOTE_F5, NOTE_F5, NOTE_F5,
NOTE_F5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5,
NOTE_E5, NOTE_D5, NOTE_D5, NOTE_E5,
NOTE_D5, NOTE_G5
};
int tempo[] = {
8, 8, 4,
8, 8, 4,
8, 8, 8, 8,
2,
8, 8, 8, 8,
8, 8, 8, 16, 16,
8, 8, 8, 8,
4, 4
};
// We wish you a merry Christmas
int wish_melody[] = {
NOTE_B3,
NOTE_F4, NOTE_F4, NOTE_G4, NOTE_F4, NOTE_E4,
NOTE_D4, NOTE_D4, NOTE_D4,
NOTE_G4, NOTE_G4, NOTE_A4, NOTE_G4, NOTE_F4,
NOTE_E4, NOTE_E4, NOTE_E4,
NOTE_A4, NOTE_A4, NOTE_B4, NOTE_A4, NOTE_G4,
NOTE_F4, NOTE_D4, NOTE_B3, NOTE_B3,
NOTE_D4, NOTE_G4, NOTE_E4,
NOTE_F4
};
int wish_tempo[] = {
4,
4, 8, 8, 8, 8,
4, 4, 4,
4, 8, 8, 8, 8,
4, 4, 4,
4, 8, 8, 8, 8,
4, 4, 8, 8,
4, 4, 4,
2
};
// Santa Claus is coming to town
int santa_melody[] = {
NOTE_G4,
NOTE_E4, NOTE_F4, NOTE_G4, NOTE_G4, NOTE_G4,
NOTE_A4, NOTE_B4, NOTE_C5, NOTE_C5, NOTE_C5,
NOTE_E4, NOTE_F4, NOTE_G4, NOTE_G4, NOTE_G4,
NOTE_A4, NOTE_G4, NOTE_F4, NOTE_F4,
NOTE_E4, NOTE_G4, NOTE_C4, NOTE_E4,
NOTE_D4, NOTE_F4, NOTE_B3,
NOTE_C4
};
int santa_tempo[] = {
8,
8, 8, 4, 4, 4,
8, 8, 4, 4, 4,
8, 8, 4, 4, 4,
8, 8, 4, 2,
4, 4, 4, 4,
4, 2, 4,
1
};
int switchOne = 0;
int switchTwo = 0;
int switchThree = 0;
void setup(void) {
pinMode(9, OUTPUT); // Buzzer
pinMode(13, OUTPUT); // Led indicator when singing a note
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(4, INPUT);
}
void loop() {
switchOne = digitalRead(2);
switchTwo = digitalRead(3);
switchThree = digitalRead(4);
if (switchOne == HIGH) {
sing(1);
} else if (switchTwo == HIGH) {
sing(2);
} else if (switchThree == HIGH) {
sing(3);
}
}
int song = 0;
void sing(int s) {
// iterate over the notes of the melody:
song = s;
if (song == 3) {
Serial.println(" 'We wish you a Merry Christmas'");
int size = sizeof(wish_melody) / sizeof(int);
for (int thisNote = 0; thisNote < size; thisNote++) {
// to calculate the note duration, take one second
// divided by the note type.
//e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
int noteDuration = 1000 / wish_tempo[thisNote];
buzz(melodyPin, wish_melody[thisNote], noteDuration);
// to distinguish the notes, set a minimum time between them.
// the note's duration + 30% seems to work well:
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
// stop the tone playing:
buzz(melodyPin, 0, noteDuration);
}
} else if (song == 2) {
Serial.println(" 'Santa Claus is coming to town'");
int size = sizeof(santa_melody) / sizeof(int);
for (int thisNote = 0; thisNote < size; thisNote++) {
// to calculate the note duration, take one second
// divided by the note type.
//e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
int noteDuration = 900 / santa_tempo[thisNote];
buzz(melodyPin, santa_melody[thisNote], noteDuration);
// to distinguish the notes, set a minimum time between them.
// the note's duration + 30% seems to work well:
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
// stop the tone playing:
buzz(melodyPin, 0, noteDuration);
}
} else {
Serial.println(" 'Jingle Bells'");
int size = sizeof(melody) / sizeof(int);
for (int thisNote = 0; thisNote < size; thisNote++) {
// to calculate the note duration, take one second
// divided by the note type.
//e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
int noteDuration = 1000 / tempo[thisNote];
buzz(melodyPin, melody[thisNote], noteDuration);
// to distinguish the notes, set a minimum time between them.
// the note's duration + 30% seems to work well:
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
// stop the tone playing:
buzz(melodyPin, 0, noteDuration);
}
}
}
void buzz(int targetPin, long frequency, long length) {
digitalWrite(13, HIGH);
long delayValue = 1000000 / frequency / 2; // calculate the delay value between transitions
//// 1 second's worth of microseconds, divided by the frequency, then split in half since
//// there are two phases to each cycle
long numCycles = frequency * length / 1000; // calculate the number of cycles for proper timing
//// multiply frequency, which is really cycles per second, by the number of seconds to
//// get the total number of cycles to produce
for (long i = 0; i < numCycles; i++) { // for the calculated length of time...
digitalWrite(targetPin, HIGH); // write the buzzer pin high to push out the diaphram
delayMicroseconds(delayValue); // wait for the calculated delay value
digitalWrite(targetPin, LOW); // write the buzzer pin low to pull back the diaphram
delayMicroseconds(delayValue); // wait again or the calculated delay value
}
digitalWrite(13, LOW);
}

พื้นฐานการเขียนโปรแกรมเบื้องต้น



บทที่ 1 แนะนำการเขียนโปรแกรมด้วย c++












 

























บทที่2 โครงสร้างภาษา c++

2.1 SaleApple.cpp




2.3 การใช้งานค่าคงที่สัญลักษณ์



บทที่ 3 ชนิดข้อมูล

3.1 mathProcess.cpp




3.2 ตัวดำเนินการทางคณิตศาสตร์(Arithmetic Operator)



3.3 Combine.cpp


3.4 การใช้สิทธิการให้งานตัวดำเนินการก่อน

3.5 testSigned.cpp

3.6 testUnsigned.cpp

3.7 alpha.cpp

3.8 CharFunction.cpp


บทที่ 4 การรับส่งค่าและแสดงผล

4.1 การใช้งาน stdio อ่าน string และ ตัวเลข

4.3 การแสดงผลแบบกำหนดผลลัพธ์

4.4 การแสดงผลข้อมูลแบบปรับให้มีความยาวเพิ่มตามต้องการ

4.6 การแสดงผลข้อมูลแบบปรับให้มีความยาวเพิ่มตามต้องการ

4.9 การจัดรูปแบบการแสดงผลด้วย iomanip

บทที่ 6 การควบคุมการทำงานแบบทางเลือก

6.1 ตัวดำเนินการสัมพันธ์

6.2 การใช้งาน if 

6.4 การใช้คำสั่ง if ซ้อน if 

6.5 การใช้คำสั่ง if...else

6.7 ตัวดำเนินการสามส่วน(Ternary Operator)

6.8 ใช้ประโยคคำสั่ง switch

6.9 การใช้ switch แบบไม่มีคำสั่ง break 

บทที่ 7 การควบคุมการทำงานแบบวนซ้ำ
7.1 gotoloop.cpp

7.2 while.cpp

7.5 for.cpp

7.6 for2.cpp

7.7 for3.cpp

7.8 for4.cpp

7.9  for5.cpp

7.10 for.cpp

7.11 for.cpp

บทที่8 ฟังก์ชั่น

8.1 โปรแกรมคำนวณหาผลลัพธ์ของเลขจำนวนเต็ม 1 ถึง 10  ยกกำลังสอง

8.2 สร้างฟังก์ชันเพื่อคำนวณหาผลลัพธ์ของเลขจำนวนเต็ม 1 ถึง 10 ยกกำลังสอง

8.3 การใช้งานตัวแปร local

8.4 การใช้งานตัวแปร global

8.5 การสร้างฟังก์ชันที่ไม่มีการรับและส่งค่า

8.6  การสร้างฟังก์ที่รับค่าเพียงอย่างเดียว


8.10 การส่งค่าโดยใช้การอ้างอิง

บทที่ 9 โครงสร้างข้อมูล

9.1 การใช้งาน Structure

9.3 การใช้งานฟังก์ชันใน Structure


บทที่ 10 อาร์เรย์(array)และสตริง(string)

10.1 SequentialAccess.cpp

10.2 Searching.cpp

10.6 String.cpp


10.7 StringFunction.cpp


10.12 ClassStringParameter.cpp


บทที่ 11 พอยท์เตอร์ และการอ้างอิง

11.1 PointerType.cpp

11.2 FreeMemory.cpp

11.3 MemoryLeak.cpp

11.4 DynamicArray.cpp

11.5 Linkedlist.cpp

บทที่ 12 สตรีม(stream)และไฟล์(file)

12.1 การใช้ ofstream class เพื่อเขียนไฟล์

12.2 การใช้ ifstreamclass เพื่ออ่านไฟล์

12.3 การตรวจสอบสถานะไฟล์สตรีม

12.4 โปรแกรมการใช้งาน Flie mode

12.5 โปรแกรมเขียนข้อมูลใน binary file

12.6 โปรแกรมอ่านข้อมูลใน binary file

12.7 การใช้ Studio class

บทที่ 13 oop เบื้องต้น

13.1 โปรแกรมอ่านข้อมูลใน binary file

13.2 การประกาศ attributes เป็น public สามารถเข้าถึงและแก้ไขข้อมูลได้

13.3 การประกาศ attributes เป็น private ไม่สามารถเข้าถึงและแก้ไขข้อมูลได้ยกเว้น method ภายใน class

13.4 การใช้ constructor และ Deconstructor

13.5 การประกาศตัวแปรแบบ Protected เพื่อให้คลาสที่สืบทอดสามารถเข้าถึงตัวแปรใน Base class ได้