วันศุกร์ที่ 12 มิถุนายน พ.ศ. 2558

วันที่ 19 ของการฝึกงานที่ FIBO

1.ทำการบ้านครับพี่ปูให้หาวิธีการเขียนฟังก์ชั้นมีอยู่ 4 แบบมีอะไรบ้างและตัวอย่าง
 ตอบ 1. ฟังก์ชั้น Setup() เป็นฟังก์ชั้นประกาศตัวแปรที่จะนำมาใช้ในโปรแกรม
             ตัวอย่าง void setup ()
                                          {
                                               pinMode (13,OUTPUT); //เรียกใช้ pin 13 output
                                               digitalWrite (13,LOW); //pin 13 =  low
                                           }
         2.ฟังก์ชั้น loop() เป็นฟังก์ชั้นที่ทำงานเช่นให้ LED กระพริบมันจะทำงานวนลูปอยู่อย่างนั้นตลอดครับ
            ตัวอย่าง void loop()
                                      {
                                           digitalWrite(13,HIGH); //LED ติด
                                            delay(1000);
                                           digitalWrite(13,LOW); // LED ดับ
                                            delay(1000);
                                      }
        3.ฟังก์ชั้น interrupt () เป็นฟังกืชั้นเกียวกับการขัดจังหวะการทำงานของโปรแกรม ถ้ามีการ interrupt  ไม่ว่าโปรแกรมจะทำอะไรอยู่ก็ตามก็ต้องหยุดการทำงานมาทำ interrupt  ก่อนแล้วค่อยกลับไปทำงานขอโปรแกรมต่อครับ
             ตัวอย่าง / Interrupt INT0 (Port PD2)
                              ISR (INT0_vect)
                              {
                                       if (i)
                                      sbi(PORTA,0); // Set bit
                                       else
                                       cbi(PORTA,0); // Clear bit
                                        i = !i; // Toggle bit
                                     delay_ms(200); // Delay debound
                                }
   4.ฟังก์ชั้น serialpoptc() เป็นฟังก์ชั้นสื่อสารอนุกรมเช่น arduino to arduino
          ตัวอย่าง 

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

void setup()  
{
  // Open serial communications and wait for port to open:
  Serial.begin(57600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }


  Serial.println("Goodnight moon!");

  // set the data rate for the SoftwareSerial port
  mySerial.begin(4800);
  mySerial.println("Hello, world?");
}

void loop() // run over and over
{
  if (mySerial.available())
    Serial.write(mySerial.read());
  if (Serial.available())
    mySerial.write(Serial.read());
}

ตอนบ่ายผมได้ทำโปรแกรมกดสวิทช์แล้วให้มอเตอร์หมุนครับโดยการสั่งทาง serialpoptc ครับแต่โปรแกรมมันยังไม่สมบูรณ์ครับคือมันยังกดแล้วไม่หมุนบางครั้งก้หมุนผมจึงคิดว่าต้องใช้ interrupt
เข้ามาครับแต่วันนี้ได้แค่นี้ก็ดีใจแล้วครับ



ส่วนของโปรแกรมนะครับ
อาดูโน่ตัวติดกับ CNC shield ครับ

#define EN 8 //enable
#define X_DIR 5  //direction
#define X_STP 2  //step
int incomingByte = 0;
int BYTE = 0;
void step (boolean dir, byte dirPin, byte stepperPin, int steps) 
    digitalWrite (dirPin, dir); 
   
    for (int i = 0; i <steps; i++)
   { 
   digitalWrite (stepperPin, HIGH); 
   delayMicroseconds (800); 
   digitalWrite (stepperPin, LOW); 
   delayMicroseconds (800); 
   } 
void setup () 
{
   Serial.begin(9600);
  pinMode (X_DIR, OUTPUT); 
   pinMode (X_STP, OUTPUT); 
   pinMode (EN, OUTPUT); 
   digitalWrite (EN, LOW); 
   
 void loop() {
 if (Serial.available() > 0)     { 
         incomingByte= Serial.read();
           Serial.print ("> ");
           Serial.println (incomingByte,BYTE);
          if (incomingByte == 'A') {
              step1();
}
          if (incomingByte == 'B') {
              step2();


}
}
}
void step1 (void)
{
   step (HIGH, X_DIR, X_STP, 800); // call function 
   // delay(100);
}  
void step2 (void){
   step (LOW, X_DIR, X_STP, 800); // call function 
    //delay(100);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
อาดูโน่ตัวรับค่าสวิทช์ ครับ

void setup() {
 pinMode(2,INPUT_PULLUP); 
 attachInterrupt(0, Wap, LOW); 
 Serial.begin(9600);
}

void loop() { 
  Serial.println("B"); 
  delay(200);
}  
void Wap() 
{
  Serial.println("A");
 
 while(digitalRead(2)==LOW);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////                                        
   
           

ไม่มีความคิดเห็น:

แสดงความคิดเห็น