ฉันคุ้นเคยกับภาพร่าง Arduino ซึ่งมีชิ้นvoid setup()
ส่วนที่ทำงานเพียงครั้งเดียวและvoid loop()
ส่วนที่วนซ้ำไปเรื่อย ๆ จะเกิดอะไรขึ้นเมื่อคุณมีฟังก์ชั่นโมฆะด้านนอกของหลักvoid loop()
? ทั้งหมดนี้จะวนซ้ำไปเรื่อย ๆ หรือพวกมันวิ่งไปเรื่อย ๆ หรือไม่? หรือฟังก์ชั่นโมฆะบางฟังก์ชั่นจะทำงานเฉพาะเมื่อตรงตามเกณฑ์ที่กำหนด (เช่นในขณะที่ลูป)?
ตัวอย่างเช่นในรหัสด้านล่างเมื่อใดvoid receiveData(int byteCount)
และvoid sendData()
ฟังก์ชันจะทำงานอย่างไร
//I2C_test
//This code demonstrates communication via an I2C bus between a raspberry pi and an arduino.
//When the Raspberry pi (master) sends data to the Arduino (slave), the Arduino uses this
//data to control a motor. After the Arduino has recieved data from the master, it then collects
//data from the external environment via a sensor and sends this data back to the Raspberry pi.
#include <Wire.h>
int number = 0; //Declare variables
int val = 0;
void setup() {
//Anything between the curly brackets runs once when the arduino is turned on or reset
pinMode(0, INPUT);
//Set pin 0 as input and 3 as output
pinMode(3, OUTPUT);
Serial.begin(9600);
//Set the data rate for serial transmission at 9600bps
Wire.begin(0x04);
//Initiate the Wire library, join the Arduino as a slave, and specify its 7 bit slave address
Wire.onReceive(receiveData);
//Define callbacks for i2c communication
Wire.onRequest(sendData);
}
void loop() {
//The code between the curly brackets keeps repeating
delay(100);
}
void receiveData(int byteCount) {
while(Wire.available()) {
number = Wire.read();
//Set the variable "number" to the data sent by the master
analogWrite(3, number);
//Write this number to pin 3 (PWM). This controls the motor speed
}
val = analogRead(0);
//Read the voltage on pin 0 (connected to the sensor). Map input voltages between 0 and 5 volts into integer values between 0 and 1023
}
void sendData() {
Wire.write(val);
//Send the data read from the sensor to the master.
}