Den värdelösa oroade Coke kan (6 / 6 steg)
Steg 6: Programmering och slutsatser
Skiss:
#define resolution 8 #define uppdatera 2 * 1000000 / elnätet int minValue; void setup() { pinMode (8, ingående); float härda; minValue = temp / 100; } int härda; void loop() { lång tid (int pin, byte mask) { extern flyktiga osignerade långa timer0_overflow_count; void startTimer() { osignerade långa checkTimer() {
#define elnätet 50 / / 60: Nordamerika, japan. 50: de flesta andra ställen
Serial.BEGIN(9600); DEBUG
int jag = 0;
While(1) {
IF(i==100)
bryta;
Temp = temp + tid (8, B00000001).
Serial.println(temp); DEBUG
i ++;
}
Serial.println(minValue); DEBUG
Temp = tid (8, B00000001).
Serial.Print(temp); DEBUG
IF(temp > minValue) {
tonen (A0, 494);
digitalWrite(A1,HIGH);
Serial.println ("på"); DEBUG
} annat {
noTone(A0);
digitalWrite(A1,LOW);
Serial.println ("OFF"); DEBUG
}
}
osignerade långa räkningen = 0, total = 0;
While(checkTimer() < uppdatera) {
pinMode är ca 6 gånger långsammare än tilldela
DDRB direkt, men denna paus är viktigt
pinMode (pin, utgång);
PORTB = 0;
pinMode (pin, mata);
medan ((PINB & mask) == 0)
greve ++;
totala ++;
}
startTimer();
tillbaka (count << resolution) / totalt;
}
timer0_overflow_count = 0;
TCNT0 = 0;
}
tillbaka ((timer0_overflow_count << 8) + TCNT0) << 2.
}
Det görs i huvudsak av två delar: setup och slingan. I installationen, som står för ca 10 sekunder, Arduino göra matematiska genomsnittet mellan de värden som mottar under detta samtidigt och ställa in den som en "minimal värde" (under dessa första sekunder måste du lägga din hand så nära kan som du vill ha den punkt där, efter det, larmet börjar). I slingan, istället Arduino läser aktuella värdet och ser om det är större än "minimala värde": i detta fall talaren kommer att göra en ton som kommer att stoppa om endast värdet blir mindre än "minimala värde". Den "/ / DEBUG" linjer är ifall något kommer fel
Den instructable är klar. Njuta av det. Jag är ledsen att allt för min dåliga engelska: om du har några problem vänligen lämna en kommentar.