結局元のバージョンに戻した。
それで確かにスケッチのアップロードは成功。
が、なぜか動きがダメ。
一体なぜなのか、と、いろいろ調べる。
あれっ、LEDの両端子が短絡している。
こっちのLEDもあっちのLEDも、
そして最後にはセンサーまで全部短絡していると判明。
どこかでハンダ付けを失敗しているのでは....???
1つ1つラインを外して見てみるが変わらず。
まさかと思い、基板上の関係無いはずの部分にテスターを当てる。
ここも短絡している!
なんだそりゃー?!
ハンダとも何の素子とも関係無いところがなぜ?
見た目は普通のユニバーサルPCBだが、
不良品なのか?
ちゃんとハンダ付け面にはドーナツがいくつもある。
わからん。
とりあえず全部短絡しているらしいが見た目はわからない。
中国製には時々こんなのがあるのか?
買い直さなければ。
それだけ買いに行くにも店は近くにない。
ここからPuduまではKLを抜けて行かないといけないので
ちょっと大変。
と言う事で、仕方なく以前に買った小さなユニバーサル基盤を使うことにした。
しかし半分程度の大きさなので面積が足りない。
なので2つ繋げて使う事にした。
写真左の黄色いLEDはダミーの負荷。
本来はここにエア用のソレノイドバルブ(200V仕様)が付く。
スケッチも少し改良。
1.リセットスイッチを押した時に3つのLEDが点灯して押した事がわかるようにした。
2.液面センサーのチャタリングを検知するようにした。
最初に液面がセンサーのレベルまで来たら0.5秒毎にあと2回検出。
3回ともONか、1回目と3回目がONとなっていたら液がそこにあるとした。
テストでは何となく思い通りに動いている感じがする。
(本当か?)
スケッチは以下。
(誰か間違っていると思ったら教えて下さい。)
//Timer setting
int TimeW = 1; //Waiting time in minutes (1 = 1min)本番は10分にする予定。
int TimeP = 120; //Max. pumping time to detect error (1 = 1sec)
//---------no need to change-------------
//INPUT PIN number
int LVS = 2; //Level sensor pin number
int RSS = 3; //Reset switch number
//OUTPUT PIN number
int RUN = 4; //RUN indication LED
int ERR1 = 5; //ERROR indication LED1
int ERR2 = 6; //ERROR indication LED2
int Valve = 7; //Relay for air valve
//For interrupt (input)
volatile int Reset = LOW; //RSS switch initial status
//For liquid level checking
int Level = LOW; //Valve initial status
//Anti-chattering function
volatile int bounceR = 100;
volatile int ctR;
volatile int ptR = 0;
void setup() {
//Debug only
//Serial.begin(9600);
//OUTPUT PIN
pinMode(RUN, OUTPUT); //RUN indication LED
pinMode(ERR1, OUTPUT); //ERROR indication LED1
pinMode(ERR2, OUTPUT); //ERROR indication LED2
pinMode(Valve, OUTPUT); //Relay for air valve
//INPUT PIN
pinMode(LVS, INPUT_PULLUP);
pinMode(RSS, INPUT_PULLUP);
//INTERRUPT
attachInterrupt(digitalPinToInterrupt(RSS), RESET, RISING);
//Level sensor Normal-ON type
}
void loop() {
//Debug only
//Serial.println("Start");
//Serial.print("Reset=");
//Serial.println(Reset);
//Counting wating time to pump ON------------------
Reset = LOW; //Cancel reset flag to start
while(Reset == LOW) { //If Reset become 1, return to beginning
//Debug only
//Serial.println("Waiting start");
digitalWrite(Valve, LOW); //Valve close
digitalWrite(RUN, LOW); //RUN LED reset
digitalWrite(ERR1, LOW); //ERR1 LED reset
digitalWrite(ERR2, LOW); //ERR2 LED reset
int varW = 0;
while(varW < TimeW && Reset == LOW){ //time timer in min. If Reset pushed, stop waiting
int varW0 = 0;
while(varW0 <= 60 && Reset == LOW){ //1min timer. If Reset pushed, stop waiting
delay(1000);
varW0++;
}
varW++;
//Debug only
//Serial.print(varW);
//Serial.println("min");
}
//Start pumping------------------
//Debug only
//Serial.println("Pumping start");
//Serial.print("Level sensor =" );
//Serial.println(Level);
Level = 0; //Level initialize
int varP = 0; //Time initialize
int Lev0 = 0; //Level status1
int Lev1 = 0; //Level status2
int Lev2 = 0; //Level status3
int LStat = 0; //Total status
while(varP < TimeP && Level == 0 && Reset == LOW) { //Pumping when Low-level, Reset is LOW
Lev0 = digitalRead(LVS); //check liquid level HIGH or LOW
if(Lev0 == HIGH){
LStat = 1;
delay(500);
Lev1 = digitalRead(LVS);
if(Lev1 == HIGH){
LStat++;
}
delay(500);
Lev2 = digitalRead(LVS);
if(Lev2 == HIGH){
LStat++;
}
if(LStat == 3 || Lev2 == HIGH){
Level = 1;
}
}else{
digitalWrite(Valve, HIGH); //Air valve OPEN
digitalWrite(RUN, HIGH); //RUN LED light
LStat = 0; //LStat reset
delay(1000);
}
varP++;
//Debug only
//Serial.println(varP);
//Serial.print("Level Sensor check = ");
//Serial.println(Level);
}
//Stop pumping-----------------------
//Debug only
//Serial.println("Stop pumping");
//Serial.print("Level Sensor = ");
//Serial.println(Level);
digitalWrite(Valve, LOW); //Pumping stop, reached on max time
digitalWrite(RUN, LOW); //RUN LED dark
if(Level == 0 && Reset == LOW){
while(Reset == LOW){ //Error TimeUp, waiting for Manual RESET
digitalWrite(ERR1, HIGH); //LED1 ON-OFF
digitalWrite(ERR2, LOW); //LED2 ON-OFF
delay(500); //Waiting for RESET SWITCH
digitalWrite(ERR1, LOW);
digitalWrite(ERR2, HIGH);
delay(500);
//Debug only
//Serial.println("TimeUP");
}
digitalWrite(ERR1, LOW); //ERR LED1 Cancel
digitalWrite(ERR2, LOW); //ERR LED2 Cancel
//Debug only
//Serial.println("RESET");
}
} //If reset SW is ON, return to beginning
}
void RESET() {
ctR = millis(); //Anti-chattering
if((ctR - ptR) > bounceR && ptR != 0){
Reset = HIGH; //When push RSS
digitalWrite(ERR1, HIGH);
digitalWrite(ERR2, HIGH);
digitalWrite(RUN, HIGH);
delay(1000);
digitalWrite(ERR1, LOW);
digitalWrite(ERR2, LOW);
digitalWrite(RUN, LOW);
}
ptR = ctR;
}
最新の画像もっと見る
最近の「ABCのAはArduinoのA」カテゴリーもっと見る
最近の記事
カテゴリー
- 日本でニャー2024(336)
- 猫の治療(34)
- 猫の引越(17)
- 癌になる(25)
- 日本でニャー2023(333)
- 日本でニャー2022(98)
- マレーシアでニャー2022(244)
- マレーシアでニャー2021(355)
- マレーシアでニャー2020(277)
- マレーシアでニャー2019(280)
- マレーシアでニャー2018(238)
- マレーシアでニャー2017(241)
- マレーシアでニャー(321)
- 長いようで短い5年目マレーシア(5)
- どうにか4年目マレーシア(157)
- 3年目に突入マレーシア(358)
- 2年目のマレーシア(428)
- まさか、マレーシア!(409)
- 英語やるぞ!(140)
- いい歳して大学へ(13)
- 台湾-非観光的(78)
- 備忘録バリとインドネシア(24)
- Vespa? Yes, but LML !(218)
- カンガルーじゃないKangoo(108)
- Photo Photo(117)
- 日本脱出(140)
- 美食満腹(104)
- 映画って !(292)
- いろいろ雑記帖(394)
- これってスゴイ!(92)
- Puppy で Go!(20)
- ABCのAはArduinoのA(68)
バックナンバー
人気記事