ความรู้แน่น ฟรีสำหรับชุมชน ArduinoAll ที่นี่เท่านั้น

ฟรีและดีที่สุด คอร์สอบรม Arduino + NodeMCU
ทำเพื่อแบ่งปัน ห้ามนำไปจำหน่าย หรือเก็บเงินค่าเรียน
  !!!


  


AllNewStep รับประกันคุณภาพทุกชิ้น วันจันทร์-ศุกร์แจ้งชำระสินค้าก่อน 14.00 จัดส่งทันทีวันนี้ค่ะ

กรุงเทพ /ภาคกลาง ได้พรุ่งนี้


*** สินค้าทุกชิ้น ถ้าสามารถทำรายการสั่งซื้อได้ แสดงว่ามีครบทุกรายการค่ะ *** 

พิมพ์ค้นหาบทความ หัวข้อกระทู้ และสินค้าในเว็บ AllNewStep ได้ที่นี่
QUOTE 

interrupt and sht15

Joy

ขอคำปรึกษา 

อ่านค่าจาก 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);

}

QUOTE 
ความคิดเห็นที่ #1
เจ้าของร้าน

ขา interrupt ของ Arduino แต่ละรุ่นตำแหน่งไม่เหมือนกัน

การใช้งาน interrupt ต้องใช้กับขาที่รองรับเท่านั้น มีตัวอย่างการใช้งาน interrupt ในคอร์สเรียน Arduino Starter ที่หน้าเว็บครับ

แสดงความคิดเห็นที่ 1-1 จากทั้งหมด 1 ความคิดเห็น
ขาย ARDUINO
คุณภาพ อันดับ 1

ได้รับรางวัลร้านยอดเยี่ยม
ตั้งแต่ปี 2558
ขาย Arduino
วีดีโอสอน Arduino

สอน esp8266

สอน Arduino IoT
สอน Arduino แบบเร็ว

สอน NodeMCU

อุปกรณ์ Arduino

MEMBER ZONE

พูดคุย-สอบถาม