Stap 2: Codering het allemaal
int dataInPin = 5;
int goPin = 12;
int tarePin = 8;
vluchtige int vlag = 0;
int quickDelay = 100;
int smallDelay = 500;
int bigDelay = 1000;
int checkVal;
int tareVal;
int glassVal;
int beerVal;
lange fullKeg;
float kegWeight;
float percentLeft;
VOID Setup
{
fullKeg = 2070; volledige vat = 2070 (gewicht) ounces ca.
kegWeight = fullKeg;
percentLeft = 100;
pinMode (tarePin, INPUT);
pinMode (goPin, OUTPUT);
digitalWrite (goPin, laag);
Serial.begin(9600);
analogReference(EXTERNAL);
attachInterrupt (0, StartUp, verandering);
}
void loop
{
Als (digitalRead(tarePin) == HIGH)
Als (vlag == 7)
{
digitalWrite (goPin, laag);
tareVal = 0;
tareVal = Tare();
Vlag = 1;
digitalWrite (goPin, hoge);
delay(bigDelay);
}
terwijl (vlag == 1)
{
digitalWrite (goPin, laag);
delay(quickDelay);
digitalWrite (goPin, hoge);
delay(quickDelay);
digitalWrite (goPin, laag);
delay(quickDelay);
digitalWrite (goPin, hoge);
delay(quickDelay);
checkVal = 0;
checkVal = Tare();
Als (checkVal > (tareVal 5))
{
delay(smallDelay);
glassVal = 0;
digitalWrite (goPin, laag);
glassVal = Glass(tareVal);
Vlag = 2;
digitalWrite (goPin, hoge);
delay(smallDelay);
digitalWrite (goPin, laag);
delay(smallDelay);
digitalWrite (goPin, hoge);
delay(smallDelay);
}
}
terwijl (vlag == 2)
{
digitalWrite (goPin, laag);
delay(quickDelay);
digitalWrite (goPin, hoge);
delay(quickDelay);
digitalWrite (goPin, laag);
delay(quickDelay);
digitalWrite (goPin, hoge);
delay(quickDelay);
digitalWrite (goPin, laag);
delay(quickDelay);
digitalWrite (goPin, hoge);
delay(quickDelay);
checkVal = 0;
checkVal = Tare();
Als (checkVal > (glassVal tareVal 5))
{
delay(smallDelay);
beerVal = 0;
digitalWrite (goPin, laag);
beerVal = bier (glassVal, tareVal);
Vlag = 0;
kegWeight = kegWeight - (beerVal / 10.65);
percentLeft = ((kegWeight / fullKeg) * 100);
Serial.Print(beerVal / 10.65);
Serial.Print("\r");
Serial.Print(kegWeight);
Serial.Print("\r");
Serial.Print(percentLeft);
Serial.Print("\r");
digitalWrite (goPin, hoge);
delay(smallDelay);
digitalWrite (goPin, laag);
delay(smallDelay);
digitalWrite (goPin, hoge);
delay(smallDelay);
digitalWrite (goPin, laag);
delay(smallDelay);
digitalWrite (goPin, hoge);
delay(smallDelay);
digitalWrite (goPin, laag);
}
}
}
VOID StartUp()
{
Vlag = 7;
}
int Tare()
{
lang totaal = 0;
for (int i = 0; ik < 100; i)
{
Totaal = totaal analogRead(dataInPin);
delay(10);
}
Totaal = (totale / 100);
retourneren totaal;
}
int (int NewTare) glas
{
lange GlassWeight = 0;
for (int i = 0; ik < 100; i)
{
GlassWeight = GlassWeight analogRead(dataInPin);
delay(10);
}
GlassWeight = ((GlassWeight / 100)-NewTare);
Return GlassWeight;
}
int bier (int NewGlass, int NewTare2)
{
lange BeerWeight = 0;
for (int i = 0; ik < 100; i)
{
BeerWeight = BeerWeight analogRead(dataInPin);
delay(10);
}
BeerWeight = ((BeerWeight / 100)-(NewGlass NewTare2));
Return BeerWeight;
}
Kopieer en plak in de Adrduino-IDE. De code wordt ervan uitgegaan dat u een 1/2 vat, 2070 ounces. Als er een 1/4-vat, wijzigt u de waarde van "fullKeg" te 1035.
*Edit* (11/10/13) gebruikt de code nu een van de interrupts (Zie draad verbindingen) te resetten en beginnen te lezen in het geval van een fout. Ik merkte dat soms de schaal zou een stap overslaan en niets lezen. Dit helpt mee. Ik veranderde ook de LED-code om te knipperen snel het aantal tijden gelijk is aan de stap die u waren op. Een knipoogje didn't tell me als ik had net tared van de schaal of lezen van het gewicht van het glas. Oh, en ik heb nu een Windows App!