2018年3月18日星期日

DIY 可校准光敏电阻


// 從腳位A0讀取光敏電阻的值。
// 以腳位13控制LED。
void setup(){
  Serial.begin(9600);
  pinMode(A0, INPUT);
  pinMode(13, OUTPUT);

  digitalWrite(13, LOW);
}

int pr_min = 400;

void loop(){
  // 以analogRead()讀取光敏電阻的值,會回傳0~1023之間的值。


  int pr = analogRead(A0);

  // 並且把值輸出到序列埠,請用手遮蔽光敏電阻,看看變化。

  Serial.println(pr);

  // 若大於這個值,熄滅LED,若小於就點亮。
  // 請視需求修改pr_min。
  digitalWrite(13, pr > pr_min ? LOW : HIGH);

  delay(1000);
}

2018年3月3日星期六



Servo myservo;
int pos = 90;   // initial position
int sens1 = A1; // LRD 1 pin
int sens2 = A0; //LDR 2 pin
int tolerance = 2;

void setup()
{
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  pinMode(sens1, INPUT);
  pinMode(sens2, INPUT);
  myservo.write(pos);
  delay(2000); // a 2 seconds delay while we position the solar panel


void loop()
{
  int val1 = analogRead(sens1); // read the value of sensor 1
  int val2 = analogRead(sens2); // read the value of sensor 2

  if((abs(val1 - val2) <= tolerance) || (abs(val2 - val1) <= tolerance)) {
    //do nothing if the difference between values is within the tolerance limit
  } else {   
    if(val1 > val2)
    {
      pos = --pos;
    }
    if(val1 < val2)
    {
      pos = ++pos;
    }
  }

  if(pos > 170) { pos = 170; } // reset to 180 if it goes higher
  if(pos < 0) { pos = 0; } // reset to 0 if it goes lower
 
  myservo.write(pos); // write the position to servo
  delay(50);
}?