วันศุกร์ที่ 29 พฤษภาคม พ.ศ. 2558

วันที่10 ที่Fibo

-ในช่วงเช้าก็ได้ดูและศึกษา arduino color sensor จอLCD 16x2 และได้ดูคริปทางYoutube ตามลิ้งต่างๆต่อไปนี้
สาเหตที่ศึกษา color sensor เพราะจะได้นำไปใช้กับ sensor วัดค่า PH ที่ได้ช่วยพี่ไนท์ทำและจะได้แสดงออกจอ แต่เริ่มฝึกที่ LCD 16x2 ก่อน
ลิ้งเกี่ยวข้อง
https://www.youtube.com/watch?v=Ltp3skGLqFM คริปทางYoutube
http://www.arduinoall.com/article/%E0%B8%AA%E0%B8%AD%E0%B8%99-%E0%B8%A7%E0%B8%B4%E0%B8%98%E0%B8%B5-%E0%B9%83%E0%B8%8A%E0%B9%89%E0%B8%87%E0%B8%B2%E0%B8%99-arduino-attiny85-%E0%B9%81%E0%B8%AA%E0%B8%94%E0%B8%87%E0%B8%82%E0%B9%89%E0%B8%AD%E0%B8%84%E0%B8%A7%E0%B8%B2%E0%B8%A1%E0%B8%AD%E0%B8%AD%E0%B8%81%E0%B8%88%E0%B8%AD-lcd-%E0%B8%9E%E0%B8%A3%E0%B9%89%E0%B8%AD%E0%B8%A1%E0%B9%82%E0%B8%84%E0%B8%94%E0%B8%95%E0%B8%B1%E0%B8%A7%E0%B8%AD%E0%B8%A2%E0%B9%88%E0%B8%B2%E0%B8%87-%E0%B9%83%E0%B8%8A%E0%B9%89%E0%B9%84%E0%B8%94%E0%B9%89%E0%B9%83%E0%B8%99-3-%E0%B8%99%E0%B8%B2%E0%B8%97%E0%B8%B5

สอน วิธี ใช้งาน Arduino Attiny85 แสดงข้อความออกจอ LCD พร้อมโคดตัวอย่าง

http://forum.arduino.cc/index.php?PHPSESSID=pgcu4hhlom0dqri2bmaijmfi54&topic=150283.0 เป็นโค้ดทางเว็ป arduino เลย

https://www.youtube.com/watch?v=f_pnz4tj_eY 

Attiny85 LCD สอนวิธีใช้งาน Attiny85 LCD พร้อมโคด Arduino ตัวอย่าง



-แล้วก็มีDr.Jay หรือพี่เจ เข้ามาที่ห้องแลป พวกเราก็ได้แนะนำของต่างๆที่ห้องแลปให้ฟังพอคร่าวๆ และพี่เจก็ได้ให้นามบัตรไว้ให้ว่าถ้าสนใจทำงานด้านอิเล็กก็ ส่งmailไป ผมก็ดีใจพี่ได้มาอยู่fibo 






-ในช่วงบ่ายพี่นพได้พาพวกผมไปบ้านหม้อ ไปบอกร้านขายของฮาดแวร์ และ ของอิเล็กตั่งมากมาย เช่นร้านแสงตะวัน ร้านเอิร์ธ ในแต่ละร้านราคาของก็ไม่เท่ากันและพี่เขาได้แนะนำว่าของแต่ละร้านไม่เท่ากัน บ้างอย่างอาจอยู่ร้านนี้ แต่อีกอย่างอยู่อีกร้าน หลังจากไปบ้านหม้อ ก็ไปต่อกันที่จตุจักร โดยพี่นพได้ให้พวกผมไปเองโดยการเดินทางด้วยรถไฟใต้ดิน เป็นครั้งแรกที่ผมขึ้น ก่อนหน้านี้พี่ก็ได้แนะนำเส้นทางเดินรถสายต่างๆของรถเมร์ในกรุงเทพ เช่น 142 อนุสาวรีย์ชัยสมรภูมิ 75 ไปหัวลำโพง A1 ไปดอนเมืองหลังจากนั้นพวกผมก็ได้เดินทางกลับมาfiboเอง
โดยกลับมาก็ร้อนมาก 
-เยาวราชคืออีกที่ที่ผมได้แต่ได้ไปแบบผ่านเพราะเราจะได้ต่อรถไปบ้านหม้อ วันนี้เป็นวันที่ศึกษาเส้นทางและเป็นวันที่ไปเปิดหูเปิดตาเมืองกรุง





วันพฤหัสบดีที่ 28 พฤษภาคม พ.ศ. 2558

วันที่9 ที่fibo

-ช่วยเพื่อหาที่ติด ลิมิตสวิท และอ่าน datasheet ชุด drive motorของพี่สอง
-ไปหน้ามอไปที่ร้านขายของอิเล็กทรอนิกส์ ได้ไปเจอ Colo sensor ราคา250บาท พอดีเลยอยากทำเครื่องวัดค่าระดับสี 



-สำหรับวันนี้ได้เขียนโค้ด Encoder โดยใช้ Interrupt 




http://playground.arduino.cc/Main/RotaryEncoders
ตัวอย่างที่นำมาอ่าน
ปัญหาที่เกิดขึ้นคือ interrupt ใช้แล้วค่ามันลบไม่เหลือ 0 แล้วค่าไม่ติดลบ ตัวอย่าง 120 พอลบแล้วมันจะได้119 แต่แก้ได้คือให้ void loop() ให้ค่ารอบเป็น0 
ตัวอย่างโค้ดที่เอามาดัดแปลง
/* read a rotary encoder with interrupts
Encoder hooked up with common to GROUND,
encoder0PinA to pin 2, encoder0PinB to pin 4 (or pin 3 see below)
it doesn't matter which encoder pin you use for A or B
uses Arduino pullups on A & B channel outputs
turning on the pullups saves having to hook up resistors
to the A & B channel outputs
*/
#define encoder0PinA 2
#define encoder0PinB 4
volatile unsigned int encoder0Pos = 0;
void setup() {
pinMode(encoder0PinA, INPUT);
digitalWrite(encoder0PinA, HIGH); // turn on pullup resistor
pinMode(encoder0PinB, INPUT);
digitalWrite(encoder0PinB, HIGH); // turn on pullup resistor
attachInterrupt(0, doEncoder, CHANGE); // encoder pin on interrupt 0 - pin 2
Serial.begin (9600);
Serial.println("start"); // a personal quirk
}
void loop(){
// do some stuff here - the joy of interrupts is that they take care of themselves
}
void doEncoder() {
/* If pinA and pinB are both high or both low, it is spinning
* forward. If they're different, it's going backward.
*
* For more information on speeding up this process, see
* [Reference/PortManipulation], specifically the PIND register.
*/
if (digitalRead(encoder0PinA) == digitalRead(encoder0PinB)) {
encoder0Pos++;
} else {
encoder0Pos--;
}
Serial.println (encoder0Pos, DEC);
}
/* See this expanded function to get a better understanding of the
* meanings of the four possible (pinA, pinB) value pairs:
*/
void doEncoder_Expanded(){
if (digitalRead(encoder0PinA) == HIGH) { // found a low-to-high on channel A
if (digitalRead(encoder0PinB) == LOW) { // check channel B to see which way
// encoder is turning
encoder0Pos = encoder0Pos - 1; // CCW
}
else {
encoder0Pos = encoder0Pos + 1; // CW
}
}
else // found a high-to-low on channel A
{
if (digitalRead(encoder0PinB) == LOW) { // check channel B to see which way
// encoder is turning
encoder0Pos = encoder0Pos + 1; // CW
}
else {
encoder0Pos = encoder0Pos - 1; // CCW
}
}
Serial.println (encoder0Pos, DEC); // debug - remember to comment out
// before final program run
// you don't want serial slowing down your program if not needed
}
/* to read the other two transitions - just use another attachInterrupt()
in the setup and duplicate the doEncoder function into say,
doEncoderA and doEncoderB.
You also need to move the other encoder wire over to pin 3 (interrupt 1).
*/

ส่วนโค้ดที่แก้เสร็จแล้ว และได้ทำการเขียนเรียบร้อย
int A = 2;
int B = 3;
 int x = 0;

void setup() {
  
  pinMode(A,INPUT_PULLUP);

  pinMode(B,INPUT_PULLUP);

  attachInterrupt(0, ENA, HIGH);
  Serial.begin(9600);
  Serial.println("start");
}

void loop() {
x=0;
delay(100);
}

void ENA() {
  if (digitalRead(A) == HIGH) {   // found a low-to-high on channel A
    if (digitalRead(B) == HIGH) {  // check channel B to see which way
                                           // encoder is turning
      x = x + 1;         // CCW
    }
   if (digitalRead(B) == LOW) {  // check channel B to see which way
                                            // encoder is turning
      x = x - 1;         // CCW
      
  } 
  }
  Serial.println (x, DEC);    
delay(100);  
}

หัวฉีด3D printer และรูปตัวอย่าง
https://www.google.co.th/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=%E0%B8%82%E0%B8%B2%E0%B8%A2+%E0%B8%AB%E0%B8%B1%E0%B8%A7%E0%B8%89%E0%B8%B5%E0%B8%94+3d+printer&spell=1

ส่วนราคาต้องเว็ปด้านล่างต่อไปนี้ ส่วนราคาในเว็ป 1750บาท 
http://www.filastruder.com/products/all-metal-e3d-v6-hotend


คริปปากกา3D และวิธีการใช้


https://www.youtube.com/watch?v=W1-_XNoxZs0

สุดท้ายว่างโครงการ ไปเปิดหูเปิดตาที่กรุงเทพ

วันพุธที่ 27 พฤษภาคม พ.ศ. 2558

วันที่8 ที่fibo

วันนี้ได้ไปเปิดหูเปิดตาที่จูนทาวร์ หรือ IT Mall ไปวันนี้ได้เจอของที่ออกมาใหม่ก่อนจะไปถึงอุดรและมีของอีกหลายอย่าง ทั่งแล๊ปท๊อป หลายรุ่น และมีของที่อยากได้ตั้งหลายอย่าง เช่น แล๊ปท๊อป PCที่อยากแต่งเอง และได้ออกมาศึกษาเส้นทางและเป็นการเรียนรู้การใช้ชีวิตที่กรุงเทพไปด้วยและอาจารย์ก็ได้สอนหลายๆอย่างในการอยู่การใช้ชีวิตในกรุงเทพ และที่ชอบคืออาจารย์มีของที่เป็นแบบทุกอย่างเป็นเทคโนโลยี แม้แต่ในรถก็ต้องทันสมัย ซึ่งเป็นแนวคิดของผมอยู่แล้วที่ต้องการจะมีของทันสมัยติดตัวและตามโลกทันทุกเหตุการณ์
-เขียนโค้ดวัดอุณหภูมิใช้ LM35 สัญญาณที่ออกมาคือ แอนนาล๊อกแล้วนำมาหาร9.31
ปัญหาที่ติด คือ หาค่าจุดทศนิยมยังไม่ได้ แล้วต้องไปหาอ่านค่าตัวแปรอีกนิดเพื่อจะนำมาเขียนให้ได้ จุทศนิยม
ตัวอย่างโค้ด
int tempC;
int reading;
int tempPin = A4;
int A = 6;      
int B = 7;      
int C = 8;
int D = 9;
int E = 10;
int F = 11;
int G = 12;        //pin6 to pin12 is A-G
int CO1 = 5;
int CO2 = 4;
int CO3 = A2;       //pin4 5 และ A2 คือให้ตัวแปล CO1-CO3

const int segs[7] = { A, B, C, D, E, F, G };
const byte numbers[10] = { 0b0111111, 0b0000110, 0b1011011, 0b1001111, 0b1100110, 0b1101101,0b1111101, 0b0000111, 0b1111111, 0b1101111 };

int digit1 = 0;
int digit2 = 0;
int digit3 = 0;

void setup()
{
analogReference(INTERNAL);
Serial.begin(9600);
  pinMode(A, OUTPUT);
  pinMode(B, OUTPUT);
  pinMode(C, OUTPUT);
  pinMode(D, OUTPUT);
  pinMode(E, OUTPUT);
  pinMode(F, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(CO1, OUTPUT);
  pinMode(CO2, OUTPUT);
  pinMode(CO3, OUTPUT); //สั่ง A-G และ CO1-CO3 เป็น OUTPUT
}

void loop()
{
reading = analogRead(tempPin);
tempC = reading / 9.31;
Serial.println(tempC);             //แสดงmonitor ในโปรแกรม
delay(10);
    lightDigit3(numbers[digit3]);         //เรียกใช้ฟังก์ชัน lightDigit3 ที่อยู่ด้านล่าง
    delay(5);
    lightDigit2(numbers[digit2]);         //เรียกใช้ฟังก์ชัน lightDigit2 ที่อยู่ด้านล่าง
    delay(5);
    lightDigit1(numbers[digit1]);         //เรียกใช้ฟังก์ชัน lightDigit1 ที่อยู่ด้านล่าง
    delay(5);
 
    digit3 = tempC%10;  
    digit2 = (tempC%100)/10;
    digit1 = (tempC%1000)/1000;       //ได้ค่าLDRReading แล้วนำมาคำนวนเพื่อแสดงออก segment แต่ละตัว

}

 void lightDigit1(byte number) {          //แสดง segment ตัวที่3
  digitalWrite(CO1, HIGH);
  digitalWrite(CO2, HIGH);
  digitalWrite(CO3,LOW);
  Segments(number);
}

void lightDigit2(byte number) {            //แสดง segment ตัวที่2
  digitalWrite(CO1, HIGH);
  digitalWrite(CO2, LOW);
  digitalWrite(CO3, HIGH);
  Segments(number);
}

void lightDigit3(byte number) {            //แสดง segment ตัวที่1
  digitalWrite(CO1, LOW);
  digitalWrite(CO2, HIGH);
  digitalWrite(CO3,HIGH);
  Segments(number);
}

void Segments(byte number) {            
  for (int i = 0; i < 7; i++) {
    int bit = bitRead(number, i);
    digitalWrite(segs[i], bit);
  }
}

-ได้เขียนโค้ดsensor LDR ออกsegment
     ปัญหาที่เกิดขึ้น -คือค่าที่ได้ยังไม่ชัดเจนหรือแสดงออกได้ยังไม่คงที่เพราะแสงที่ออกจาก srgmentไปกระทบLDRด้วยทำให้ค่าไม่คงที่
โค้ดตัวอย่าง
int LDR_Pin = A4; //analog pin 0
int A = 6;      
int B = 7;      
int C = 8;
int D = 9;
int E = 10;
int F = 11;
int G = 12;        //pin6 to pin12 is A-G
int CO1 = 5;
int CO2 = 4;
int CO3 = A2;       //pin4 5 และ A2 คือให้ตัวแปล CO1-CO3

const int segs[7] = { A, B, C, D, E, F, G };
const byte numbers[10] = { 0b0111111, 0b0000110, 0b1011011, 0b1001111, 0b1100110, 0b1101101,0b1111101, 0b0000111, 0b1111111, 0b1101111 };

int digit1 = 0;
int digit2 = 0;
int digit3 = 0;



void setup() {
  Serial.begin(9600); //อ่านค่า LDR

  pinMode(A, OUTPUT);
  pinMode(B, OUTPUT);
  pinMode(C, OUTPUT);
  pinMode(D, OUTPUT);
  pinMode(E, OUTPUT);
  pinMode(F, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(CO1, OUTPUT);
  pinMode(CO2, OUTPUT);
  pinMode(CO3, OUTPUT); //สั่ง A-G และ CO1-CO3 เป็น OUTPUT
}

void loop() {
 
    int LDRReading = analogRead(LDR_Pin); //อ่านค่า LDR แล้วไปเก็บในLDRReading
   
    lightDigit3(numbers[digit3]);         //เรียกใช้ฟังก์ชัน lightDigit3 ที่อยู่ด้านล่าง
    delay(5);
    lightDigit2(numbers[digit2]);         //เรียกใช้ฟังก์ชัน lightDigit2 ที่อยู่ด้านล่าง
    delay(5);
    lightDigit1(numbers[digit1]);         //เรียกใช้ฟังก์ชัน lightDigit1 ที่อยู่ด้านล่าง
    delay(5);
  LDRReading=LDRReading/100;
    digit3 = LDRReading%10;  
    digit2 = (LDRReading%100)/10;
    digit1 = (LDRReading%1000)/100;       //ได้ค่าLDRReading แล้วนำมาคำนวนเพื่อแสดงออก segment แต่ละตัว


 
}

 void lightDigit1(byte number) {          //แสดง segment ตัวที่3
  digitalWrite(CO1, HIGH);
  digitalWrite(CO2, HIGH);
  digitalWrite(CO3,LOW);
  Segments(number);
}

void lightDigit2(byte number) {            //แสดง segment ตัวที่2
  digitalWrite(CO1, HIGH);
  digitalWrite(CO2, LOW);
  digitalWrite(CO3, HIGH);
  Segments(number);
}

void lightDigit3(byte number) {            //แสดง segment ตัวที่1
  digitalWrite(CO1, LOW);
  digitalWrite(CO2, HIGH);
  digitalWrite(CO3,HIGH);
  Segments(number);
}

void Segments(byte number) {            
  for (int i = 0; i < 7; i++) {
    int bit = bitRead(number, i);
    digitalWrite(segs[i], bit);
  }
}


http://www.eng.su.ac.th/ee/618240/variable.html
ชนิดของตัวแปรในภาษาซี พอดีผมไม่รู้ค่าตัวแปรเลยเปิดอ่าน
http://www.thaieasyelec.com/products/sensors/ph-d-o-orp/ph-sensor-kit-detail.html
pH Sensor ศึกษาและหาดูข้อมูล
รุ่น : pH Sensor Kit

pH Sensor Kit เป็นชุด Sensor ตรวจจับความเป็นกรดด่าง พร้อมโมดูล Controller ที่ทำหน้าที่ตรวจจับสัญญาณ Analog ที่วัดได้จาก Sensor แล้วประมวลผลส่งข้อมูลให้กับผู้ใช้งานทาง Serial Port (UART) ผู้ใช้เพียงส่งคำสั่งไปที่ โมดูล Controller เพื่อ Get Data ตามต้องการ

http://www.thaieasyelec.com/products/sensors/electrical-conductivity-kit-detail.html
Electrical Conductivity Kit 
Electrical Conductivity Kit คือ ชุด Sensor ในการตรวจวัดค่า Conductivity ในน้ำ ซึ่งจะทำให้เรารู้ส่วนประกอบของสสารที่วัดว่ามีปริมาณของแร่ธาตุต่าง ๆ จำนวนเท่าไหร่ โดย Sensor จะตรวจวัดค่าแล้วมีตัวประมวลผล ผู้ใช้งานสามารถเก็บค่าที่วัดได้ไปประมวลผล โดย Interface กับโมดูลผ่านทาง Serial Port (UART) เพียงส่งคำสั่งไปที่ โมดูล ก็จะได้ Data ตามต้องการ


วันอังคารที่ 26 พฤษภาคม พ.ศ. 2558

วันที่7 ทีfibo

-อาจารย์ประจำสาขาได้มานิเทศก์ และสอนเกี่ยวกับการใช้ชีวิต การอยู่ที่กรุงเทพการอยู่กับคนการเข้าหาคนและได้และอาจารย์ทั่ง4ท่านก็ได้เดินชมห้องแลป และที่ทำงาน
-วันนี้ก็ได้อธิบายโปรเจ็คที่ทำร่วมกับพี่ๆที่พวกเราเข้าไปช่วย
-ได้นำหาแนวคิดที่ได้ไปประยุกต์ใช้กับที่บ้านเราและการทำงานในอนาคต
-วันนี้ก็ได้เล่าถึงปัญหาและข้อดีที่ได้มาอยู่กรุงเทพกัน
-สิ่งที่คาดหวังจะได้กลับไปจากfibo คือได้เปิดโลกมุมมองสิ่งต่างๆใหม่ๆหลากหลาย แล้วนำกับไปถ่ายทอดสิ่งใหม่เพื่อพัฒนาตนเองให้ดียิ่งขึ้น



http://www.arduino.cc/en/Reference/AttachInterrupt
ตัวอย่างโค้ดการใช้ interrup ใน arduino ตัวอย่าง  attachInterrupt()
ปัญหาที่เกิดขึ้นก็จะได้แก่ การที่กด interrupt แล้วมันนับค่าไปสองค่า แล้วแก้ที่codeโดยและใช้ delayนานขึ้น attachInterrupt(0, blink, CHANGE ); ให้เป็นLOW คือให้ทำการ cockที่ขอบขาลง











int pin = 13;
volatile int state = LOW;

void setup()
{
  pinMode(pin, OUTPUT);
  attachInterrupt(0, blink, CHANGE);
}

void loop()
{
  digitalWrite(pin, state);
}

void blink()
{
  state = !state;
}

ตัวอย่างโค้ดที่ทำเอง ตัวที่1
int pin1 = 13;
int pin2 = 12;
int pin3 = 11;
int pin4 = 10;
int pin5 = 9;
int pin6 = 8;



void setup()
{
  pinMode(pin1, OUTPUT);
  pinMode(pin2, OUTPUT);
  pinMode(pin3, OUTPUT);
  pinMode(pin4, OUTPUT);
  pinMode(pin5, OUTPUT);
  pinMode(pin6, OUTPUT);
  attachInterrupt(0, blink, CHANGE );
}

void loop()
{
digitalWrite(pin4,HIGH);
  delay(500);
    digitalWrite(pin4,LOW);
  delay(500);
  digitalWrite(pin5,HIGH);
  delay(500);
    digitalWrite(pin5,LOW);
  delay(500);
  digitalWrite(pin6,HIGH);
  delay(500);
    digitalWrite(pin6,LOW);
  delay(500);
}

void blink()
{

  digitalWrite(pin2,HIGH);
  delay(10000);
  digitalWrite(pin2,LOW);
  delay(10000);  
  digitalWrite(pin3,HIGH);
  delay(5000);
  digitalWrite(pin3,LOW);
  delay(5000);
}

ตัวอย่างโค้ดที่ทำเอง ตัวที่2
int A = 6;
int B = 7;
int C = 8;
int D = 9;
int E = 10;
int F = 11;
int G = 12;
int CO1 = 5;
int CO2 = 4;
int CO3 = A2;

const int segs[7] = { A, B, C, D, E, F, G };
const byte numbers[10] = { 0b0111111, 0b0000110, 0b1011011, 0b1001111, 0b1100110, 0b1101101,0b1111101, 0b0000111, 0b1111111, 0b1101111 };

int digit1 = 0;
int digit2 = 0;
int digit3 = 0;
int counter= 0;

void setup() {
  pinMode(A, OUTPUT);
  pinMode(B, OUTPUT);
  pinMode(C, OUTPUT);
  pinMode(D, OUTPUT);
  pinMode(E, OUTPUT);
  pinMode(F, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(CO1, OUTPUT);
  pinMode(CO2, OUTPUT);
  pinMode(CO3, OUTPUT);
  
  pinMode(2,INPUT_PULLUP);
  pinMode(3,INPUT_PULLUP);
  pinMode(14,INPUT_PULLUP);
  pinMode(15,INPUT_PULLUP);
  attachInterrupt(1, wap, LOW);
    
  }
    
void loop() {
    lightDigit3(numbers[digit3]);
    delay(3);
    lightDigit2(numbers[digit2]);
    delay(3);
   lightDigit1(numbers[digit1]);
    delay(3);
    
    if(digitalRead(14)==LOW){
    counter+=10;
    digit3 = counter%10;    
    digit2 = (counter%100)/10;
    digit1 = (counter%1000)/100;
    }
    if(digitalRead(2)==LOW){
    counter--;
    digit3 = counter%10;    
    digit2 = (counter%100)/10;
    digit1 = (counter%1000)/100;
     if(digit3<0){
     digit3=0;
     counter=0;
     }
   }
      while(digitalRead(2)==LOW);
      
    if(digitalRead(15)==LOW){
    counter-=10;
    digit3 = counter%10;    
    digit2 = (counter%100)/10;
    digit1 = (counter%1000)/100;
    if(digit2<0){
     digit2=0;
     digit3=0;
     counter=0;
     }
     }
      while(digitalRead(15)==LOW);
  }

 

  
  void lightDigit1(byte number) {
  digitalWrite(CO1, HIGH);
  digitalWrite(CO2, HIGH);
  digitalWrite(CO3,LOW);
  Segments(number);
}

void lightDigit2(byte number) {
  digitalWrite(CO1, HIGH);
  digitalWrite(CO2, LOW);
  digitalWrite(CO3, HIGH);
  Segments(number);
}

void lightDigit3(byte number) {
  digitalWrite(CO1, LOW);
  digitalWrite(CO2, HIGH);
  digitalWrite(CO3,HIGH);
  Segments(number);
}

void Segments(byte number) {
  for (int i = 0; i < 7; i++) {
    int bit = bitRead(number, i);
    digitalWrite(segs[i], bit);
  }
}

void wap(){
 counter++;
    digit3 = counter%10;    
    digit2 = (counter%100)/10;
    digit1 = (counter%1000)/100;
 while(digitalRead(3)==LOW);
  }






รูปวงจร ของ LDR


http://bildr.org/2012/11/photoresistor-arduino/

โค้ดทำขึ้นเอง แสดงออก 7segment 3ตัว
int LDR_Pin = A0; //analog pin 0
int A = 6;        
int B = 7;        
int C = 8;
int D = 9;
int E = 10;
int F = 11;
int G = 12;        //pin6 to pin12 is A-G
int CO1 = 5;
int CO2 = 4;
int CO3 = A2;       //pin4 5 และ A2 คือให้ตัวแปล CO1-CO3

const int segs[7] = { A, B, C, D, E, F, G };
const byte numbers[10] = { 0b0111111, 0b0000110, 0b1011011, 0b1001111, 0b1100110, 0b1101101,0b1111101, 0b0000111, 0b1111111, 0b1101111 };

int digit1 = 0;
int digit2 = 0;
int digit3 = 0;



void setup() {
  Serial.begin(9600); //อ่านค่า LDR

  pinMode(A, OUTPUT);
  pinMode(B, OUTPUT);
  pinMode(C, OUTPUT);
  pinMode(D, OUTPUT);
  pinMode(E, OUTPUT);
  pinMode(F, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(CO1, OUTPUT);
  pinMode(CO2, OUTPUT);
  pinMode(CO3, OUTPUT); //สั่ง A-G และ CO1-CO3 เป็น OUTPUT
}

void loop() {
  
    int LDRReading = analogRead(LDR_Pin); //อ่านค่า LDR แล้วไปเก็บในLDRReading
    
    lightDigit3(numbers[digit3]);         //เรียกใช้ฟังก์ชัน lightDigit3 ที่อยู่ด้านล่าง
    delay(15);
    lightDigit2(numbers[digit2]);         //เรียกใช้ฟังก์ชัน lightDigit2 ที่อยู่ด้านล่าง
    delay(15);
    lightDigit1(numbers[digit1]);         //เรียกใช้ฟังก์ชัน lightDigit1 ที่อยู่ด้านล่าง
    delay(15);
  
    digit3 = LDRReading%10;    
    digit2 = (LDRReading%100)/10;
    digit1 = (LDRReading%1000)/100;       //ได้ค่าLDRReading แล้วนำมาคำนวนเพื่อแสดงออก segment แต่ละตัว

  Serial.println(LDRReading);             //แสดงmonitor ในโปรแกรม
  delay(80);
  
}

 void lightDigit1(byte number) {          //แสดง segment ตัวที่3
  digitalWrite(CO1, HIGH);
  digitalWrite(CO2, HIGH);
  digitalWrite(CO3,LOW);
  Segments(number);
}

void lightDigit2(byte number) {            //แสดง segment ตัวที่2
  digitalWrite(CO1, HIGH);
  digitalWrite(CO2, LOW);
  digitalWrite(CO3, HIGH);
  Segments(number);
}

void lightDigit3(byte number) {            //แสดง segment ตัวที่1
  digitalWrite(CO1, LOW);
  digitalWrite(CO2, HIGH);
  digitalWrite(CO3,HIGH);
  Segments(number);
}

void Segments(byte number) {              
  for (int i = 0; i < 7; i++) {
    int bit = bitRead(number, i);
    digitalWrite(segs[i], bit);
  }
}

http://playground.arduino.cc/Main/LM35HigherResolution
arduino +LM35 วัดอุณหภูมิ ทฤษฏี temp = (5.0 * analogRead(tempPin) * 100.0) / 1024;
เพื่อหาองศาเซลเซียส
ตัวอย่างโค้ด
float tempC;
int reading;
int tempPin = 0;

void setup()
{
analogReference(INTERNAL);
}

void loop()
{
reading = analogRead(tempPin);
tempC = reading / 9.31;
}
โค้ดตัวนี้เป็นโค้ดที่ก๊อปมา ยังไม่มีการทำขึ้นเอง

วันจันทร์ที่ 25 พฤษภาคม พ.ศ. 2558

วันที่6 ที่Fibo

-งานวันนี้คือการกด button 4ตัว ให้ segment ทำงาน 
-ศึกษาหาข้อมูลคิดและปรึกษาว่าจะทำโปรเจ็คเกี่ยวกับอะไร ผมจึงคิดหา ดูแขนกลโรงงานและหุ่นยนต์เตะฟุตบอล
-วันนี้เป็นวันที่ดีที่fibo และวันพรุ่งนี้อาจารย์จะมานิเทศ4ท่านด้วยกัน และต้องทำการเตรียมตัว พีเซ็นการทำงานที่fibo 
-เป็นวันที่ได้ทำโค้ดโปรแกรมขึ้นเองทำให้ได้ศึกษาโค้ดที่ทำเองทำให้งานวันนี้ไม่ค่อย  ราบเรื่อนเพราะงง กับ PIC ที่เคยเรียน

int A = 6;
int B = 7;
int C = 8;
int D = 9;
int E = 10;
int F = 11;
int G = 12;
int CO1 = 5;
int CO2 = 4;
int CO3 = A2;
const int segs[7] = { A, B, C, D, E, F, G };
const byte numbers[10] = { 0b0111111, 0b0000110, 0b1011011, 0b1001111, 0b1100110, 0b1101101,0b1111101, 0b0000111, 0b1111111, 0b1101111 };

int digit1 = 0;
int digit2 = 0;
int digit3 = 0;
int counter= 0;

void setup() {
  pinMode(A, OUTPUT);
  pinMode(B, OUTPUT);
  pinMode(C, OUTPUT);
  pinMode(D, OUTPUT);
  pinMode(E, OUTPUT);
  pinMode(F, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(CO1, OUTPUT);
  pinMode(CO2, OUTPUT);
  pinMode(CO3, OUTPUT);
  
  pinMode(2,INPUT_PULLUP);
  pinMode(3,INPUT_PULLUP);
  pinMode(14,INPUT_PULLUP);
    }
    
void loop() {
    lightDigit3(numbers[digit3]);
    delay(5);
    lightDigit2(numbers[digit2]);
    delay(5);
   lightDigit1(numbers[digit1]);
    delay(5);

  if (digitalRead(2) == LOW) {
    counter++;
    digit3 = counter%10;    
    digit2 = (counter%100)/10;
    digit1 = (counter%1000)/100;
  }
  while(digitalRead(2)==LOW);
  
  if(digitalRead(3)==LOW){
    counter--;
    digit3 = counter%10;    
    digit2 = (counter%100)/10;
    digit1 = (counter%1000)/100;
     if(digit3<0){
     digit3=0;
     counter=0;
     }
   }
    
      while(digitalRead(3)==LOW);

  }



  
  void lightDigit1(byte number) {
  digitalWrite(CO1, HIGH);
  digitalWrite(CO2, HIGH);
  digitalWrite(CO3,LOW);
  Segments(number);
}

void lightDigit2(byte number) {
  digitalWrite(CO1, HIGH);
  digitalWrite(CO2, LOW);
  digitalWrite(CO3, HIGH);
  Segments(number);
}

void lightDigit3(byte number) {
  digitalWrite(CO1, LOW);
  digitalWrite(CO2, HIGH);
  digitalWrite(CO3,HIGH);
  Segments(number);
}

void Segments(byte number) {
  for (int i = 0; i < 7; i++) {
    int bit = bitRead(number, i);
    digitalWrite(segs[i], bit);
  }
}


http://www.arduino.cc/en/Reference/pinMode
การใช้ INPUT , OUTPUT ใน pinMode และPULLUP ของ ARDUINO

http://ucexperiment.com/31
การใช้ฟังก์ชันท์ Millis() 
ฟังชันท์ Millis() จะรีเทิร์นเวลาออกมาในหน่วย Millisecond ทำให้เราอ้างอิงเวลาได้ เช่นสร้างลูปที่ทำงานทุกๆ 1วิฯ 5วิฯ 10วิฯ โดยที่ไม่ต้องเหนื่อยอะไรมากมาย
http://www.tinkerhobby.com/arduino-2-digit-7-segment-display-with-buttons/
// Dual seven-segment LED Display with buttons
// Common Anode digit 6 pin 12
//       CA1 G  F  A  B
//        |  |  |  |  |      -> pins and segments they control
//   ---------    ---------
//   |   A   |    |   A   |
//  F|       |B  F|       |B
//   |---G---|    |---G---|
//  E|       |C  E|       |C
//   |   D   |    |   D   |
//   ---------    ---------
//        |  |  |  |  |      -> pins and segments they control
//        D  DP E  C CA2         
// Segments that make each number when lit:
// 0 => -FEDCBA
// 1 => ----BC-
// 2 => G-ED-BA
// 3 => G--DCBA
// 4 => GF--CB-
// 5 => GF-DC-A
// 6 => GFEDC-A
// 7 => ----CBA
// 8 => GFEDCBA
// 9 => GF-DCBA
// Arduino digital pins used to light up
// corresponding segments on the LED display

https://www.youtube.com/watch?v=GCdl6KRbiWU
แขนกลโรงงาน 10แกนใช้งานจริง

วันศุกร์ที่ 22 พฤษภาคม พ.ศ. 2558

วันที่5 ที่Fibo

-วันนี้ทำการเขียนโปรแกรมพื้นฐาน PWM ควบคุมความเร็ว LED
-หาที่ติด limitswich แขนกลของพี่สอง กับ เรียว
-ทำการเขียนโปรแกรม แสดง 7segment 
-ผมขอบคุณพี่ๆ ที่fibo จากผมที่ไม่ได้โปรแกรมได้ สอนและช่วยผมให้ได้รู้ว่าการเขียนโปรแกรม หรือ สาขาอื่นๆก็ทำการประยุกต์ใช้งานกันได้ วงจรก็สำคัญเช่นกัน ผมเริ้มจะประยุกต์ให้กับวงจรของผมได้แล้ว (ได้มากกว่าเดิมยิ่งขึ้นๆไป)

https://www.youtube.com/watch?v=cUvcnI3f7ec คริปนี้แสดงการทำงานการ PWM analog,output digital

http://vladromanov.com/154/arduino-tutorial-2-analog-inputs-and-pulse-width-modulation-pwm-rgb-led/ ตัวอย่างการทำงาน มีคริปด้วย

https://www.google.co.th/search?q=pwm+arduino++led&biw=1280&bih=699&source=lnms&tbm=isch&sa=X&ei=N4xeVZaEGoTiuQTQpYPIAw&ved=0CAYQ_AUoAQ  เป็นรูปภาพ การใช้งาน arduino กับ LED



http://www.dave-auld.net/index.php?option=com_content&view=article&id=99:arduino-digital-out-pwm-led&catid=53:arduino-input-output-basics&Itemid=107


งานที่ทำตอนเช้าวันนี้ 



int analog = A3;    
int RValue = 0;
void setup() {
pinMode(13,OUTPUT);
pinMode(12,OUTPUT);
pinMode(11,OUTPUT);
pinMode(10,OUTPUT);
pinMode(9,OUTPUT);
pinMode(8,OUTPUT);
pinMode(7,OUTPUT);
pinMode(6,OUTPUT);
pinMode(3,INPUT);
pinMode(2,INPUT);
pinMode(14,INPUT);
pinMode(15,INPUT);
}

void loop() {

   RValue = analogRead(analog);

  if(digitalRead(2)==HIGH){
  button1();
  }
   if(digitalRead(3)==HIGH){
  button2();
  }
  if(digitalRead(14)==HIGH){
  button3();
  }
  if(digitalRead(15)==HIGH){
  button4();
  }
}


void button1(){
  digitalWrite(13,HIGH);
  delay(500);
  digitalWrite(13,LOW);
  delay(500);
  digitalWrite(12,HIGH);
  delay(500);
  digitalWrite(12,LOW);
  delay(500);
  digitalWrite(11,HIGH);
  delay(500);
  digitalWrite(11,LOW);
  delay(500);
  digitalWrite(10,HIGH);
  delay(500);
 digitalWrite(10,LOW);
  delay(500);
 digitalWrite(9,HIGH);
  delay(500);
 digitalWrite(9,LOW);
  delay(500);
digitalWrite(8,HIGH);
  delay(500);
 digitalWrite(8,LOW);
  delay(500);
digitalWrite(7,HIGH);
  delay(500);
 digitalWrite(7,LOW);
  delay(500);
digitalWrite(6,HIGH);
  delay(500);
 digitalWrite(6,LOW);
  delay(500);   
void button2(){
digitalWrite(6,HIGH);
  delay(500);
 digitalWrite(6,LOW);
  delay(500); 
  digitalWrite(7,HIGH);
  delay(500);
 digitalWrite(7,LOW);
 delay(500);
 digitalWrite(8,HIGH);
  delay(500);
 digitalWrite(8,LOW);
  delay(500);
  digitalWrite(9,HIGH);
  delay(500);
 digitalWrite(9,LOW);
  delay(500);
  digitalWrite(10,HIGH);
  delay(500);
  digitalWrite(10,LOW);
  delay(500);
  digitalWrite(11,HIGH);
  delay(500);
  digitalWrite(11,LOW);
  delay(500);
  digitalWrite(12,HIGH);
  delay(500);
  digitalWrite(12,LOW);
  delay(500);
  digitalWrite(13,HIGH);
  delay(500);
 digitalWrite(13,LOW);
  delay(500);    
}
void button3(){ 
  digitalWrite(13,HIGH);
  delay(RValue);
  digitalWrite(13,LOW);
  delay(RValue);
  digitalWrite(12,HIGH);
  delay(RValue);
  digitalWrite(12,LOW);
  delay(RValue);
  digitalWrite(11,HIGH);
  delay(RValue);
  digitalWrite(11,LOW);
  delay(RValue);
  digitalWrite(10,HIGH);
   delay(RValue);
 digitalWrite(10,LOW);
   delay(RValue);
 digitalWrite(9,HIGH);
   delay(RValue);
 digitalWrite(9,LOW);
  delay(RValue);
digitalWrite(8,HIGH);
  delay(RValue);
 digitalWrite(8,LOW);
  delay(RValue);
digitalWrite(7,HIGH);
   delay(RValue);
 digitalWrite(7,LOW);
   delay(RValue);
digitalWrite(6,HIGH);
   delay(RValue);
 digitalWrite(6,LOW);
   delay(RValue);  
}
void button4(){
  digitalWrite(6,HIGH);
  delay(RValue);
  digitalWrite(6,LOW);
   delay(RValue);
  digitalWrite(7,HIGH);
   delay(RValue);
  digitalWrite(7,LOW);
   delay(RValue);
  digitalWrite(8,HIGH);
   delay(RValue);
  digitalWrite(8,LOW);
   delay(RValue);
  digitalWrite(9,HIGH);
   delay(RValue);
 digitalWrite(9,LOW);
   delay(RValue);
  digitalWrite(10,HIGH);
   delay(RValue);
 digitalWrite(10,LOW);
   delay(RValue); 
  digitalWrite(11,HIGH);
   delay(RValue);
 digitalWrite(11,LOW);
   delay(RValue); 
  digitalWrite(12,HIGH);
   delay(RValue);
 digitalWrite(12,LOW);
   delay(RValue); 
  digitalWrite(13,HIGH);
   delay(RValue);
 digitalWrite(13,LOW);
   delay(RValue);
}
ด้านบนเป็นCode ที่เข้าใจง่าย แต่ยุ่งยาก เพราะต้องเขียนเยอะ


int analog = A3;    
int RValue = 0;
void setup()
{
 for(int i=6;i<=13;i++)
 {
  pinMode(i,OUTPUT);
}
for(int j=13;j<=6;j--)
 {
  pinMode(j,OUTPUT);
}
pinMode(2,INPUT);
pinMode(3,INPUT);
pinMode(14,INPUT);
pinMode(15,INPUT);

}

void loop() {
  RValue = analogRead(analog);
  if(digitalRead(2)==HIGH){
   for(int i=6;i<=13;i++){
   digitalWrite(i,HIGH);
   delay(100);
   digitalWrite(i,LOW);
   delay(100);
   }
  }
  
   if(digitalRead(3)==HIGH){
     for(int  j=13;j>=6;j--){
      digitalWrite(j,HIGH);
     delay(100);
     digitalWrite(j,LOW);
     delay(100);
   }
   }
   
 if(digitalRead(14)==HIGH){
 for(int i=6;i<=13;i++){
   digitalWrite(i,HIGH);
   delay(RValue);
   digitalWrite(i,LOW);
   delay(RValue);
 }
 }
 if(digitalRead(15)==HIGH){
 for(int j=13;j>=6;j++){
   digitalWrite(j,HIGH);
   delay(RValue);
   digitalWrite(j,LOW);
   delay(RValue);
 }
 }
}
Code ด้านบนเป็นแบบใช้ for

ทั้งสองcode การทำงานเหมือนกัน แต่คำสั่งที่ใช้ต่างกันและเข้าใจ ตามลำดับ

http://logicdesign5630183.blogspot.com/2014/09/32-7-segment-display-bcd.html

const byte SEVEN_SEG[7] = {2, 3, 4, 5, 6, 7, 8};
const byte SEVEN_SEG2[7] = { 9, 10, 11, 12, 13, 44, 45};
const byte ZeroToNine[10][7] = {{1, 1, 1, 1, 1, 1, 0}, {0, 1, 1, 0, 0, 0, 0},
  {1, 1, 0, 1, 1, 0, 1}, {1, 1, 1, 1, 0, 0, 1}, {0, 1, 1, 0, 0, 1, 1}, {1, 0, 1, 1, 0, 1, 1},
  {1, 0, 1, 1, 1, 1, 1}, {1, 1, 1, 0, 0, 0, 0}, {1, 1, 1, 1, 1, 1, 1}, {1, 1, 1, 1, 0, 1, 1}
};

void setup() {
  for (int i = 0; i < 7; i++) {
    pinMode(SEVEN_SEG[i], OUTPUT);
    pinMode(SEVEN_SEG2[i], OUTPUT);
    digitalWrite(SEVEN_SEG[i], HIGH );
    digitalWrite(SEVEN_SEG2[i], HIGH );
  }
}

int count = 0;

void loop() {

  if (count <= 99) {
    for (int i = 0; i < 10; i++) {
      for (int l = 0; l < 7; l++) {
        digitalWrite(SEVEN_SEG[l], ZeroToNine[i][l] );
      }

      for (int j = 0; j < 10; j++) {
        for (int k = 0; k < 7; k++) {
          ;
          digitalWrite(SEVEN_SEG2[k], ZeroToNine[j][k] );
        }
        count++;
        delay(1000);
      }
    }
  } else count = 0;

}