Paso 2: Codificación de todo
int dataInPin = 5;
goPin INT = 12;
int tarePin = 8;
volátil int bandera = 0;
int quickDelay = 100;
int smallDelay = 500;
int bigDelay = 1000;
int checkVal;
int tareVal;
int glassVal;
int beerVal;
largo fullKeg;
Float kegWeight;
Float percentLeft;
void setup()
{
fullKeg = 2070; barril completo = 2070 (peso) onzas aprox.
kegWeight = fullKeg;
percentLeft = 100;
pinMode (tarePin, entrada);
pinMode (goPin, salida);
digitalWrite (goPin, LOW);
Serial.Begin(9600);
analogReference(EXTERNAL);
attachInterrupt (0, Inicio, cambio);
}
void loop()
{
Si (digitalRead(tarePin) == HIGH)
Si (bandera == 7)
{
digitalWrite (goPin, LOW);
tareVal = 0;
tareVal = Tare();
Bandera = 1;
digitalWrite (goPin, HIGH);
Delay(bigDelay);
}
mientras (bandera == 1)
{
digitalWrite (goPin, LOW);
Delay(quickDelay);
digitalWrite (goPin, HIGH);
Delay(quickDelay);
digitalWrite (goPin, LOW);
Delay(quickDelay);
digitalWrite (goPin, HIGH);
Delay(quickDelay);
checkVal = 0;
checkVal = Tare();
Si (checkVal > (tareVal 5))
{
Delay(smallDelay);
glassVal = 0;
digitalWrite (goPin, LOW);
glassVal = Glass(tareVal);
Bandera = 2;
digitalWrite (goPin, HIGH);
Delay(smallDelay);
digitalWrite (goPin, LOW);
Delay(smallDelay);
digitalWrite (goPin, HIGH);
Delay(smallDelay);
}
}
mientras (bandera == 2)
{
digitalWrite (goPin, LOW);
Delay(quickDelay);
digitalWrite (goPin, HIGH);
Delay(quickDelay);
digitalWrite (goPin, LOW);
Delay(quickDelay);
digitalWrite (goPin, HIGH);
Delay(quickDelay);
digitalWrite (goPin, LOW);
Delay(quickDelay);
digitalWrite (goPin, HIGH);
Delay(quickDelay);
checkVal = 0;
checkVal = Tare();
Si (checkVal > (glassVal tareVal 5))
{
Delay(smallDelay);
beerVal = 0;
digitalWrite (goPin, LOW);
beerVal = cerveza (glassVal, tareVal);
Bandera = 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, LOW);
Delay(smallDelay);
digitalWrite (goPin, HIGH);
Delay(smallDelay);
digitalWrite (goPin, LOW);
Delay(smallDelay);
digitalWrite (goPin, HIGH);
Delay(smallDelay);
digitalWrite (goPin, LOW);
}
}
}
StartUp() vacío
{
Bandera = 7;
}
int Tare()
{
largo Total = 0;
para (int i = 0; i < 100; i)
{
Total = Total analogRead(dataInPin);
Delay(10);
}
Total = (Total / 100);
retorno Total;
}
int (int NewTare) de vidrio
{
GlassWeight largo = 0;
para (int i = 0; i < 100; i)
{
GlassWeight = GlassWeight analogRead(dataInPin);
Delay(10);
}
GlassWeight = ((GlassWeight / 100)-NewTare);
volver GlassWeight;
}
int cerveza (int NewGlass, int NewTare2)
{
BeerWeight largo = 0;
para (int i = 0; i < 100; i)
{
BeerWeight = BeerWeight analogRead(dataInPin);
Delay(10);
}
BeerWeight = ((BeerWeight / 100)-(NewGlass NewTare2));
volver BeerWeight;
}
Copiar y pegar en el IDE de Adrduino. El código asume que se utiliza un 1/2 barril, 2070 onzas. Si es un barril de 1/4, cambie el valor de "fullKeg" a 1035.
*Edit* (10/11/13) el código ahora utiliza uno de las interrupciones (ver las conexiones de cables) para reiniciar y empezar a leer en caso de un error. Me di cuenta que a veces la escala se salte un paso y leer nada. Esto ayuda con eso. Además, he cambiado el código de LED que parpadean rápidamente el número de veces iguales al paso en. Un abrir y cerrar no me dicen si sólo había Tarar la báscula o leer el peso del vidrio. Oh, y ahora tengo una aplicación de Windows!