So i tried to make a little quiz, it can use a lot of improvement but i would like to have a finished project before i better it. I want the user to choose the answer by pressing a button.
My code currently looks like this. char serialData; int i = 1; int redLed = 12; int greenLed=13; int buttonA=11; int buttonB=10; int buttonC=9; int lastState = LOW; int currentState; void setup() { Serial.begin(9600); pinMode(redLed, OUTPUT); pinMode(greenLed, OUTPUT); pinMode(buttonA,INPUT); pinMode(buttonB,INPUT); pinMode(buttonC,INPUT); // read the state of the switch/button: currentState = digitalRead(buttonA); if(lastState == HIGH && currentState == LOW) Serial.println("A"); // save the the last state lastState = currentState; delay(100); } void loop() { vraag1(); delay(1000); vraag2(); delay(1000); vraag3(); delay(1000); vraag4(); delay(1000); vraag5(); delay(1000); vraag6(); } void vraag1() { //1 Serial.println(" 3+3=? "); delay(400); Serial.println(" A) 6"); delay(200); Serial.println(" B) 5 "); delay(200); Serial.println(" C) 4 "); delay(200); while (Serial.available() ==0){} //2-2 /* This is the part I added to resolve the issue - but it does not work. */ currentState = digitalRead(buttonA); if(lastState == HIGH && currentState == LOW) Serial.println("A"); lastState = currentState; if (Serial.available()) { //3 serialData = Serial.read(); if (serialData == '6' || serialData == 'a' || serialData == 'A') { //4 Serial.println(" Correct "); i++; digitalWrite(greenLed, HIGH); } //4 else { //5 Serial.println(" Incorrect "); digitalWrite(redLed, HIGH); } //5 } delay(1000); digitalWrite(redLed, LOW); digitalWrite(greenLed, LOW); }
This is the code I added to try it but it doesn't work at all. Does anyone have another suggestion? currentState = digitalRead(buttonA); if(lastState == HIGH && currentState == LOW) Serial.println("A"); lastState = currentState;
เขียนโปรแกรม Arduino สร้างนักประดิษฐ์ สำหรับผู้เริ่มต้น Zero to Hero สามารถเรียนได้ทุกคน ไม่จำเป็นต้องมีความรู้ด้านการเขียนโปรแกรมมาก่อน เนื้อหาการเรียนเขียนโปรแกรม Arduino สร้างนักประดิษฐ์ สำหรับผู้เริ่มต้น Zero to Hero เป็นการเรียนแบบฝึกทำ Workshops ให้สามารถต่อวงจรและเขียนโปรแกรม Arduino ได้อย่างถูกต้อง
แบ่งเป็น 6 บทเรียน บทที่ 1: เริ่มต้นเรียนรู้การเขียนโปรแกรม Arduino ด้วย TinkerCAD บทที่ 2: เรียนเขียนโปรแกรม Arduino ระดับพื้นฐาน Basic Arduino Programming บทที่ 3: เรียนเขียนโปรแกรม Arduino ระดับกลาง Intermediate Arduino Programming บทที่ 4: เรียนเขียนโปรแกรม Arduino ระดับสูง Advanced Arduino Programming บทที่ 5: สร้าง Arduino Projects จำลองการทำงานและเขียนโปรแกรมด้วย TinkerCAD บทที่ 6: เรียนเขียนโปรแกรมทดลองบนบอร์ด Arduino จริง
สิ่งที่คุณจะได้เรียนรู้ - ผู้เรียนจะเข้าใจโครงสร้างพื้นฐานของการเขียนโปรแกรม Arduino ด้วย TinkerCAD และบนบอร์ดจริง - ผู้เรียนจะได้รับความเข้าใจอย่างถี่ถ้วนเกี่ยวกับเนื้อหาของการเขียนโปรแกรม Arduino อย่างเข้มข้น - ผู้เรียนสามารถเขียนโปรแกรม Arduino ตั้งแต่ระดับพื้นฐานไปจนถึงสามารถต่อยอดประยุกต์ใช้งานจริงได้ - ผู้เรียนสามารถนำความรู้ที่ได้ไปประยุกต์ใช้ทำ Project ต่าง ๆ ในการเรียนและการทำงานจริงได้
มีความต้องการของหลักสูตรหรือข้อกำหนดเบื้องต้นหรือไม่ - ผู้เรียนไม่จำเป็นต้องมีความรู้ด้านการเขียนโปรแกรมมาก่อน คุณจะได้เรียนรู้ทุกสิ่งที่คุณอยากเรียน
หลักสูตรนี้เหมาะกับ - ผู้เริ่มต้นเรียนรู้การเขียนโปรแกรม นักพัฒนาโปรแกรม โปรแกรมเมอร์ นักประดิษฐ์ ทั้งด้าน Hardware และ Software
Attach an interrupt routine to the pin your button is linked to, and get it to set the 'score' variable. Make sure you introduce some sort of timeout to avoid button-bounce (I.e. set LastTimeIncremented when you increase the score, and only increment score if LastTimeIncremented is more than 1 second ago)
This way the score will always be set regardless of what else the program may be doing.
Information on this can be found in the Arduino //www.arduino.cc/en/Reference/attachInterrupt
The example on that page would do exactly what you want, just replace 'blink' with 'incrementScore' and you're pretty much done
ภาษาซีของ Arduino จะจัดรูปแบบโครงสร้างของการเขียนโปรแกรมออกเป็นส่วนย่อยๆหลายๆส่วน โดยเรียกแต่ละส่วนว่า ฟังก์ชั่น และ เมื่อนำฟังก์ชั่น มารวมเข้าด้วยกัน ก็จะเรียกว่าโปรแกรม โดยโครงสร้างการเขียนโปรแกรมของ Arduino นั้น ทุกๆโปรแกรมจะต้องประกอบไปด้วยฟังก์ชั่นจำนวนเท่าใดก็ได้ แต่อย่างน้อยที่สุดต้องมีฟังก์ชั่น จำนวน 2 ฟังก์ชั่น คือ setup() และ loop()
include<servo.h\> //เรียกไลบรารี่ ชื่อ servo.h เข้ามาใช้ในโปรแกรม
int Servo1=9; //กำหนดให้ Servo1 แทน Pin Digital-9 Servo myservo; //สร้าง object ชื่อ myservo เพื่อควบคุม Servo
void setup() { myservo.attach(Serrvo1); //กำหนดให้ใช้ขา Digital-9 สร้างสัญญาณควบคุม Servo }
void loop() { myservo.write(180); //กำหนดค่าตำแหน่งให้กับ Servo = 180 องศา }
จะได้เห็นได้โครงสร้างพื้นฐานของภาษาซีที่ใช้กับ Arduino นั้นจะประกอบไปด้วย 3 ส่วนใหญ่ๆด้วยกัน คือ
1. Header ในส่วนนี้จะมีหรือไม่มีก็ได้ ถ้ามีต้องกำหนดไว้ในส่วนเริ่มต้นของโปรแกรม ซึ่งส่วนของ Header ได้แก่ ส่วนที่เป็น Compiler Directive ต่างๆรวมไปถึงส่วนของการประกาศตัวแปร และค่าคงที่ต่างๆที่จะใช้ในโปรแกรม
2.setup() ในส่วนนี้เป็นฟังก์ชั่นบังคับที่ต้องกำหนดให้มีในทุกๆโปรแกรม ถึงแม้ว่าในบางโปรแกรมจะไม่ต้องการใช้งานก็ยังจำเป็นต้องประกาศไว้ด้วยเสมอ เพียงแต่ไม่ต้องเขียนคำสั่งใดๆไว้ในระหว่างวงเล็บปีกกา {} ที่ใช้เป็นตัวกำหนดของเขตของฟังก์ชั่น โดยฟังก์ชั่นนี้จะใช้สำหรับบรรจุคำสั่งในส่วนที่ต้องกาให้โปรแกรมทำงานเพียงรอบเดียวตอนเริ่มต้นทำงานของโปรแกรมครั้งแรกเท่านั้น ซึ่งได้แก่คำสั่งเกี่ยวกับการ Setup ค่าการทำงานต่างๆ เช่น การกำหนดหน้าที่การใช้งานของ PinMode และการกำหนดค่า Baudrate สำหรับใช้งานพอร์ตสื่อสารอนุกรม เป็นต้น
3.loop() เป็นส่วนฟังก์ชั่นบังคับที่ต้องกำหนดให้มีในทุกๆโปรแกรมเช่นเดียวกันกับฟังก์ชั่น setup() โดยฟังก์ชั่น loop() นี้จะใช้บรรจุคำสั่งที่ต้องการให้โปรแกรมทำงานเป็นวงรอลซ้ำๆกันไปไม่รู้จบ ซึ่งถ้าเปรียบเทียบกับรูปแบบของ ANSI-C ส่วนนี้ก็คือ ฟังก์ชั่น main() นั่นเอง
include <header.h\>
เมื่อพบคำสั่ง
include ตัวแปลภาษาของ Arduino จะไปค้นหาไฟล์ที่ระบุไว้ในเครื่องหมาย <> หลังคำสั่ง
include จากตำแหน่ง Directory ที่เก็บไฟล์ Library ของโปรแกรม Arduino ไว้
ซึ่งแน่นอนว่าส่วนของ Header จะนับรวมไปถึง คำสั่งส่วนที่ใช้ประกาศสร้าง ตัวแปร(Variable Declaration)และค่าคงที่(Constant Declaration) รวมทั้ง ฟังก์ชั่นต่างๆ (Function Declaration) ด้วย ซึ่งจากตัวอย่างได้แก่ส่วนที่เป็นคำสั่ง
int Servo1=9; Servo myservo
สำหรับส่วนที่สำคัญที่สุดและขาดไม่ได้ คือ ฟังก์ชั่น setup() และ ฟังก์ชั่น loop() ซึ่งฟังก์ชั่น ทั้ง 2 ส่วนนี้มีรูปแบบโครงสร้างที่เหมือนกัน แต่ถูกกำหนดด้วยชื่อฟังก์ช่ั่นเป็นการเฉพาะ คือ setup() และ loop() โดย setup() จะเขียนไว้ก่อน loop() ซึ่งทัง 2 ฟังก์ชั่นนี้ มีขอบเขต เริ่มต้นและสิ้นสุด อยู่ภายใต้เครื่องหมาย{}
void setup() { คำสั่งต่างๆ ที่ต้องการเขียนไว้ภายใต้ฟังก์ชั่น setup() }
หน้าที่ของฟังก์ชั่น setup() ใน Arduino คือ ใช้ทำหน้าที่เป็นส่วนของโปรแกรมย่อยสำหรับใช้บรรจุคำสั่งต่างๆที่ใช้สำหรับกำหนดกาทำงานของระบบ หรือ กำหนดคุณสมบัติการทำงานให้กับอุปกรณ์ต่างๆซึ่งคำสั่งทั้งหมดที่บรรจุไว้ภายใต้ฟังก์ชั่นของ Setup() นี้ จะถูกเรียกขึ้นมาทำงานเพียงรอบเดียวคือตอนเริ่มต้นการทำงานของโปรแกรม โดยคำสั่งที่นิยมบรรจุไว้ในฟังก์ชั่นส่วนนี้ ได้แก้ คำสั่งสำหรับกำหนดโหมดการทำงานของ Digital Pin หรือ คำสั่งสำหรับ กำหนดคุณสมบัติของพอร์ตสื่อสารอนุกรม เป็นต้น
void loop() { คำสั่งต่างๆที่ต้องการให้ทำงานภายใต้ฟังก์ชั่น loop() }
หน้าที่ของฟังก์ชั่น loop() ใน Arduino คือใช้ทำหน้าที่เป็นส่วนของโปรแกรมหลัก สำหรับใช้บรรจุคำสั่งควบคุมการทำงานต่างๆของโปรแกรม ที่ต้องการใช้โปรแกรมทำงาน โดยคำสั่งที่บรรจุไว้ในฟังก์ชั่นนี้จะถูกเรียกขึ้นมาทำงานซ้ำๆกันตามลำดับและเงื่อนไขที่กำหนดไว้3