Hier ist mein Programm, ich möchte:
Der Mikrocontroller Arduino UNO R3 sendet 3,3 V an den Sensor Beschleunigungsmesser MMA7361
Der Sensor schaltet sich ein und sendet ein Signal an den Mikrocontroller.
Wenn ich den Sensor bewege und die Spannung mehr als 2 V beträgt, sendet der Mikrocontroller 1,5 V an den Transistor. Sonst 0V senden.
int outputPin1 = 3; // Pin D3
int outputPin2 = 5; // Pin D5
int analogPin = 0; // Input Pin A0
void setup()
{
pinMode (outputPin1, OUTPUT);
pinMode (outputPin2, OUTPUT);
Serial.begin(9600);
}
void loop()
{
int volts = 170; // send signals of 3.3v
analogWrite(outputPin1, volts); // to Accelerometer
int reading = analogRead(analogPin); // receive signal
delay(1000); // delay 5sec.
if (volts >= 100) // Input voltage is more than 2.0V
{
int volts = 77; // send signals of 1.5V
analogWrite(outputPin2, volts); // to Transistor
}
else
{
int volts = 0;
analogWrite(outputPin2, volts); // to Transistor
}
}
Wenn ich mit dem Digital Multi Meter messe, zeigt es weiterhin 1,5 V an, auch wenn sich die Position des Sensors nicht ändert.
Ich vermute, es gibt ein Problem in der if, else-Zeile.
Sie verwenden die reading
Variable nicht in der if-Anweisung. Ihre if-Anweisung prüft volts
, und dies wird nie geändert, es wird immer bei 170 sein (es ändert sich für ein paar Taktzyklen auf 77 und dann zurück auf 170.)
Außerdem sollten Sie Ihre Variablen nicht in der Schleife deklarieren. Und Ihre Verzögerung ist auf eine Sekunde eingestellt, nicht auf 5. Sie sollten danach eine Verzögerung hinzufügen, analogWrite(outputPin1, volts);
damit der Beschleunigungsmesser Zeit zum Einschalten hat.
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
}
}
Hier ist, was der Code jetzt tut (vorausgesetzt, Ihre Spannungsmathematik ist korrekt):
outputPin1
Kräfte bis ~ 3,3 VanalogPin
reading >= 100
Leistungsausgang Pin2 auf ~ 1,5 V, sonst 0 VUm effizienter zu sein, brauchen Sie die Variable volts
und nicht reading
. outputPin1
muss nicht in der Schleife sein. Ich habe auch die Verzögerung vor Sie gestellt analogRead(analogPin)
, damit Ihre if-Anweisung sofort nach dem Lesen ausgeführt wird und beim Einschalten Ihrem Beschleunigungsmesser Zeit zum Einschalten gibt. Ich habe auch das entfernt, Serial.begin(9600);
da Sie es nicht verwendet haben. Ihr gesamter Code könnte so aussehen:
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
}
}
Als zukünftige Referenz sollten Sie die Seriennummer verwenden, Serial.println("helpfull info");
um Ihnen beim Debuggen Ihres Codes zu helfen. Schauen Sie sich dieses Beispiel an. Jedes Mal, wenn es eine Messung durchführt, überträgt es die Messung zurück an den Computer, damit Sie sehen können, was vor sich geht.
Bearbeiten
Laden Sie dies hoch und verwenden Sie ein serielles Terminal, um zu sehen, was passiert, wenn Sie den Beschleunigungsmesser bewegen.
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);
}
Benutzer16741
Garret Fogerlie
analogRead(analogPin) >= 100
zuanalogRead(analogPin) >= 50
oder vielleicht niedriger zu wechseln und zu sehen, was passiert. Werfen Sie einen Blick auf meine Bearbeitung, um weitere Hilfe zu erhalten.