Korrekt öl skala (2 / 2 steg)
Steg 2: Kodning allt
int dataInPin = 5;
int goPin = 12.
int tarePin = 8;
flyktiga int flagga = 0;
int quickDelay = 100;
int smallDelay = 500.
int bigDelay = 1000;
int checkVal;
int tareVal;
int glassVal;
int beerVal;
lång fullKeg;
float kegWeight;
float percentLeft;
void setup()
{
fullKeg = 2070; fulla ölfat = 2070 (vikt) uns ca.
kegWeight = fullKeg;
percentLeft = 100;
pinMode (tarePin, ingång);
pinMode (goPin, produktionen);
digitalWrite (goPin, låg);
Serial.BEGIN(9600);
analogReference(EXTERNAL);
attachInterrupt (0, start, förändring);
}
void loop()
{
om (digitalRead(tarePin) == hög)
om (flagga == 7)
{
digitalWrite (goPin, låg);
tareVal = 0;
tareVal = Tare();
Flagga = 1;
digitalWrite (goPin, hög);
Delay(bigDelay);
}
medan (flagga == 1)
{
digitalWrite (goPin, låg);
Delay(quickDelay);
digitalWrite (goPin, hög);
Delay(quickDelay);
digitalWrite (goPin, låg);
Delay(quickDelay);
digitalWrite (goPin, hög);
Delay(quickDelay);
checkVal = 0;
checkVal = Tare();
om (checkVal > (tareVal 5))
{
Delay(smallDelay);
glassVal = 0;
digitalWrite (goPin, låg);
glassVal = Glass(tareVal);
Flagga = 2;
digitalWrite (goPin, hög);
Delay(smallDelay);
digitalWrite (goPin, låg);
Delay(smallDelay);
digitalWrite (goPin, hög);
Delay(smallDelay);
}
}
medan (flagga == 2)
{
digitalWrite (goPin, låg);
Delay(quickDelay);
digitalWrite (goPin, hög);
Delay(quickDelay);
digitalWrite (goPin, låg);
Delay(quickDelay);
digitalWrite (goPin, hög);
Delay(quickDelay);
digitalWrite (goPin, låg);
Delay(quickDelay);
digitalWrite (goPin, hög);
Delay(quickDelay);
checkVal = 0;
checkVal = Tare();
om (checkVal > (glassVal tareVal 5))
{
Delay(smallDelay);
beerVal = 0;
digitalWrite (goPin, låg);
beerVal = öl (glassVal, tareVal);
Flagga = 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, hög);
Delay(smallDelay);
digitalWrite (goPin, låg);
Delay(smallDelay);
digitalWrite (goPin, hög);
Delay(smallDelay);
digitalWrite (goPin, låg);
Delay(smallDelay);
digitalWrite (goPin, hög);
Delay(smallDelay);
digitalWrite (goPin, låg);
}
}
}
void StartUp()
{
Flagga = 7.
}
int Tare()
{
långa totalt = 0;
för (int jag = 0; jag < 100; i)
{
Totalt = totalt analogRead(dataInPin);
Delay(10);
}
Total = (totala / 100);
avkastning totalt;
}
int glas (int NewTare)
{
lång GlassWeight = 0;
för (int jag = 0; jag < 100; i)
{
GlassWeight = GlassWeight analogRead(dataInPin);
Delay(10);
}
GlassWeight = ((GlassWeight / 100)-NewTare);
återvända GlassWeight;
}
int öl (int NewGlass, int NewTare2)
{
lång BeerWeight = 0;
för (int jag = 0; jag < 100; i)
{
BeerWeight = BeerWeight analogRead(dataInPin);
Delay(10);
}
BeerWeight = ((BeerWeight / 100)-(NewGlass NewTare2));
återvända BeerWeight;
}
Kopiera och klistra in Adrduino IDE. Koden förutsätter att du använder en 1/2 fat, 2070 ounces. Om det är en 1/4 tunna, ändra värdet för "fullKeg" till 1035.
* Edit * (11/10/13) koden använder nu en av avbrotten (se tråd anslutningar) återställa och börja läsa över vid ett fel. Jag märkte att ibland skalan skulle hoppa över ett steg och läst någonting. Detta hjälper till med detta. Dessutom bytte jag LED koden för att blinka snabbt antalet gånger lika till steg du var på. En blink berätta inte om jag bara hade tarerats skalan eller läsa glas vikt. Åh, och jag har nu en Windows-App!