Étape 2: Codage tout
int dataInPin = 5 ;
goPin int = 12 ;
int tarePin = 8 ;
volatile int Flag = 0 ;
int quickDelay = 100 ;
int smallDelay = 500 ;
int bigDelay = 1000 ;
int checkVal ;
int tareVal ;
int glassVal ;
int beerVal ;
long fullKeg ;
float kegWeight ;
float percentLeft ;
void setup()
{
fullKeg = 2070 ; fût complet = 2070 (poids) onces environ
kegWeight = fullKeg ;
percentLeft = 100 ;
pinMode (tarePin, entrée) ;
pinMode (goPin, sortie) ;
digitalWrite (goPin, faible) ;
Serial.Begin(9600) ;
analogReference(EXTERNAL) ;
attachInterrupt (0, démarrage, changement) ;
}
void loop()
{
Si (digitalRead(tarePin) == HIGH)
Si (drapeau == 7)
{
digitalWrite (goPin, faible) ;
tareVal = 0 ;
tareVal = Tare() ;
Drapeau = 1 ;
digitalWrite (goPin, HIGH) ;
Delay(bigDelay) ;
}
tandis que (drapeau == 1)
{
digitalWrite (goPin, faible) ;
Delay(quickDelay) ;
digitalWrite (goPin, HIGH) ;
Delay(quickDelay) ;
digitalWrite (goPin, faible) ;
Delay(quickDelay) ;
digitalWrite (goPin, HIGH) ;
Delay(quickDelay) ;
checkVal = 0 ;
checkVal = Tare() ;
Si (checkVal > (tareVal 5))
{
Delay(smallDelay) ;
glassVal = 0 ;
digitalWrite (goPin, faible) ;
glassVal = Glass(tareVal) ;
Drapeau = 2 ;
digitalWrite (goPin, HIGH) ;
Delay(smallDelay) ;
digitalWrite (goPin, faible) ;
Delay(smallDelay) ;
digitalWrite (goPin, HIGH) ;
Delay(smallDelay) ;
}
}
tandis que (drapeau == 2)
{
digitalWrite (goPin, faible) ;
Delay(quickDelay) ;
digitalWrite (goPin, HIGH) ;
Delay(quickDelay) ;
digitalWrite (goPin, faible) ;
Delay(quickDelay) ;
digitalWrite (goPin, HIGH) ;
Delay(quickDelay) ;
digitalWrite (goPin, faible) ;
Delay(quickDelay) ;
digitalWrite (goPin, HIGH) ;
Delay(quickDelay) ;
checkVal = 0 ;
checkVal = Tare() ;
Si (checkVal > (glassVal tareVal, 5))
{
Delay(smallDelay) ;
beerVal = 0 ;
digitalWrite (goPin, faible) ;
beerVal = bière (glassVal, tareVal) ;
Drapeau = 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, HIGH) ;
Delay(smallDelay) ;
digitalWrite (goPin, faible) ;
Delay(smallDelay) ;
digitalWrite (goPin, HIGH) ;
Delay(smallDelay) ;
digitalWrite (goPin, faible) ;
Delay(smallDelay) ;
digitalWrite (goPin, HIGH) ;
Delay(smallDelay) ;
digitalWrite (goPin, faible) ;
}
}
}
Sub StartUp()
{
Drapeau = 7 ;
}
int Tare()
{
longueur totale = 0 ;
pour (int i = 0; i < 100 ; j’ai)
{
Total = Total analogRead(dataInPin) ;
Delay(10) ;
}
Total = (Total / 100) ;
retour au Total ;
}
int verre (int NewTare)
{
long GlassWeight = 0 ;
pour (int i = 0; i < 100 ; j’ai)
{
GlassWeight = GlassWeight analogRead(dataInPin) ;
Delay(10) ;
}
GlassWeight = ((GlassWeight / 100)-NewTare) ;
Return GlassWeight ;
}
int bière (int NewGlass, int NewTare2)
{
long BeerWeight = 0 ;
pour (int i = 0; i < 100 ; j’ai)
{
BeerWeight = BeerWeight analogRead(dataInPin) ;
Delay(10) ;
}
BeerWeight = ((BeerWeight / 100)-(NewGlass NewTare2)) ;
Return BeerWeight ;
}
Copiez et collez dans l’IDE de Adrduino. Le code suppose que vous utilisez un 1/2 tonneau, 2070 onces. Si c’est un baril de 1/4, modifiez la valeur de « fullKeg » à 1035.
** Edit (10/11/13) le code maintenant utilise une des interruptions (voir les connexions des fils) à zéro et recommencer une lecture en cas d’erreur. J’ai remarqué que parfois l’échelle aurait sauter une étape et rien lu. Ceci aide avec ça. Aussi, j’ai changé le code de voyants pour clignoter rapidement le nombre de fois égal à l’étape que vous étiez. Un clignotement n’a pas me dire si je n’avais juste tarer la balance, ou lire le poids de verre. Oh, et j’ai maintenant une application de Windows !