No está utilizando la variable reading
en la sentencia if. Su declaración if está marcando volts
, y esto nunca se cambia, siempre estará en 170 (cambiará a 77 durante algunos ciclos de reloj, luego volverá a 170.)
Tampoco debes declarar tus variables en el bucle. Y su retraso se establece en un segundo, no en 5. Debe agregar un retraso después de analogWrite(outputPin1, volts);
para que el acelerómetro tenga tiempo de encenderse.
int outputPin1 = 3; // Pin D3
int outputPin2 = 5; // Pin D5
int analogPin = 0; // Input Pin A0
int volts = 170;
int reading = 0;
void setup()
{
pinMode (outputPin1, OUTPUT);
pinMode (outputPin2, OUTPUT);
Serial.begin(9600);
}
void loop()
{
analogWrite(outputPin1, volts); // send signals of 3.3v to Accelerometer
delay(200); // delay .2 sec
reading = analogRead(analogPin); // receive signal
delay(1000); // delay 1sec.
if (reading >= 100) // Input voltage is more than 2.0V
{
volts = 77; // send signals of 1.5V
analogWrite(outputPin2, volts); // to Transistor
}
else
{
volts = 0;
analogWrite(outputPin2, volts); // to Transistor
}
}
Aquí está lo que el código está haciendo ahora (suponiendo que su matemática de voltaje es correcta):
-
outputPin1
poderes a ~ 3.3v
- la lectura obtiene el valor de
analogPin
- pausa de 1 segundo
- si
reading >= 100
power outputPin2 a ~ 1.5v else 0v
- repetir
Para ser más eficiente, no necesita la variable volts
y reading
. outputPin1
no necesita estar en el bucle. También coloco la demora antes de que analogRead(analogPin)
, por lo que su sentencia if se ejecuta inmediatamente después de la lectura, y al encenderla, le permite al acelerómetro acelerar su encendido. También quité el Serial.begin(9600);
ya que no lo estabas usando. Tu código completo podría verse así:
int outputPin1 = 3; // Pin D3
int outputPin2 = 5; // Pin D5
int analogPin = 0; // Input Pin A0
void setup()
{
pinMode (outputPin1, OUTPUT);
pinMode (outputPin2, OUTPUT);
analogWrite(outputPin1, 170); // send signals of 3.3v to Accelerometer
}
void loop()
{
delay(1000); // delay 1sec.
if (analogRead(analogPin) >= 100) // Input voltage is more than 2.0V
{
analogWrite(outputPin2, 77); // send signals of 1.5V to Transistor
}
else
{
analogWrite(outputPin2, 0); // 0v to Transistor
}
}
Para futuras referencias, debe usar el serial Serial.println("helpfull info");
para ayudarlo a depurar su código. Eche un vistazo a este ejemplo . Cada vez que se realiza una lectura, se transmite la lectura a la computadora para que pueda ver lo que está pasando.
Editar
Sube esto y usa un terminal en serie para ver qué sucede cuando mueves el acelerómetro.
int analogPin = 0;
int value = 0;
void setup()
{
Serial.begin(9600); // setup serial
}
void loop()
{
value = analogRead(analogPin); // read the input pin
Serial.println(value); // debug value
delay(1000);
}