ขอคำปรึกษา
อ่านค่าจาก sht15 เป็นค่า temp กับ humid ธรรมดา ค่าก็ออกมาปกติ แต่อ่านค่าโดยใช้ interrupt ค่าที่ได้ออกมากลับไม่ถูกต้อง แบบนี้เป็นเพราะอะไรคะ
#include <SHT1x.h>
#include <DS3232RTC.h>
#include <TimeLib.h>
#include <Wire.h>
tmElements_t tm;
int y, m, d, h, mi, s;
#define dataPin A0
#define clockPin A1
SHT1x sht1x(dataPin, clockPin);
float temp_c;
float temp_f;
float humidity;
void setup()
{
Serial.begin(9600);
Wire.begin();
Serial.println("DS3231RTC Alarm Test");
TimeDateDisplay();
pinMode(2, INPUT_PULLUP); // Set interrupt pin
RTC.squareWave(SQWAVE_NONE); // Disable the default square wave of the SQW pin
// setAlarm Syntax (RTC.setAlarm(alarmType, seconds, minutes, hours, dayOrDate);)
RTC.setAlarm(ALM1_MATCH_SECONDS, 0, 0, 0, 0 );
RTC.setAlarm(ALM2_EVERY_MINUTE, 0, 0, 0, 0 );//MATCH_MINUTES
RTC.alarm(ALARM_1);
RTC.alarm(ALARM_2);
RTC.alarmInterrupt(ALARM_1, true); // Enable alarm 1 interrupt A1IE
RTC.alarmInterrupt(ALARM_2, true); // Enable alarm 1 interrupt A1IE
attachInterrupt (digitalPinToInterrupt(2), isr, FALLING);
interrupts ();
}
void isr()
{
Serial.print("-----Interrupt-----");
sht_15();
}
void loop()
{
set_isr();
//sht_15();
}
void set_isr()
{
if (RTC.alarm(ALARM_1))
{
RTC.read(tm);
RTC.setAlarm(ALM1_MATCH_SECONDS, (tm.Second + 7) % 60, 0, 0, 0); //(tm.Second + 5) % 6
TimeDateDisplay();
Serial.println("----SEC----");
}
if (RTC.alarm(ALARM_2))
{
RTC.read(tm);
RTC.setAlarm(ALM2_MATCH_MINUTES, 0, (tm.Minute + 2) % 60, 0, 0); //MATCH_MINUTES EVERY_MINUTE
TimeDateDisplay();
Serial.println("----------------------------------MIN----");
}
}
void TimeDateDisplay()
{
RTC.read(tm);
y = tm.Year + 1970;
m = tm.Month;
d = tm.Day;
h = tm.Hour;
mi = tm.Minute;
s = tm.Second;
Serial.print(y); Serial.print("/");
Serial.print(m); Serial.print("/");
Serial.print(d); Serial.print(" ");
Serial.print(h); Serial.print(":");
Serial.print(mi); Serial.print(":");
Serial.print(s);
}
void sht_15()
{
temp_c = sht1x.readTemperatureC();
temp_f = sht1x.readTemperatureF();
humidity = sht1x.readHumidity();
// Print the values to the serial port
Serial.print("Temperature: ");
Serial.print(temp_c, DEC);
Serial.print("C / ");
Serial.print(temp_f, DEC);
Serial.print("F. Humidity: ");
Serial.print(humidity);
Serial.println("%");
delay(2000);
}
ขา interrupt ของ Arduino แต่ละรุ่นตำแหน่งไม่เหมือนกัน
การใช้งาน interrupt ต้องใช้กับขาที่รองรับเท่านั้น มีตัวอย่างการใช้งาน interrupt ในคอร์สเรียน Arduino Starter ที่หน้าเว็บครับ