Goedemorgen Mensen
ik ben bezig met een projectje om mijn automatenpook met een lineare actuator aan te sturen vanaf de Arduino
wil de pook graag weg hebben en een elektronische pook aan het stuur maken
nu heb ik het al zover dat ik 4 posities heb die ik aan kan roepen met 4 drukknoppen
het enigste waar ik niet aan uit kom is de posities pas op te kunnen roepen zodra ik mijn rem ingedrukt heb
ik heb hier de code die ik nu werkend heb en hoop dat iemand mij kan helpen
ik kan het signaal van de auto wat gewoon een massa signaal is dus wel in een digitale ingang aansluiten
</>
// Add button library
#include <Button.h>
// Use the jumpers on the board to select which pins will be used
int EnablePin = 8; // use pin 8 to enable board
int PWMPinA1 = 3; // motor pin A for actuator
int PWMPinB1 = 11; // motor pin B for actuator
// Declare our buttons and specify the correponding pins
Button ManualUp(9); // use pin 9 to move elevator up manually
Button ManualDown(10); // use pin 10 to move elevator down manually
Button PresetPark(6); // use pin 6 to move elevator to park level
Button PresetDrive(7); // use pin 7 to move elevator to drive level
Button PresetReverse(4); // use pin 4 to move elevator to drive level
Button PresetNeutral(5); // use pin 5 to move elevator to drive level
// Specify our input pin for actuator position
int SensorPin = A3;
// Set other globally used variables
int delaytime = 5*1000; // 5 seconds times 1,000 to convert to milliseconds
int ParkLevel = 1000; // will store/read these values from EEPROM for production
int DriveLevel = 10; // will store/read these values from EEPROM for production
int ReverseLevel = 700; // will store/read these values from EEPROM for production
int NeutralLevel = 400; // will store/read these values from EEPROM for production
int CurrentPos = 0; // use to read the current position of actuator
int TargetPos = 0; // use to set the target position of actuator
int Accuracy = 10; // use to make sure we stop the actuator within the ballpark of target
bool AutoPilot = false; // if true, we are on autopilot
void setup() {
// put your setup code here, to run once:
// initialize our buttons
ManualUp.begin();
ManualDown.begin();
PresetPark.begin();
PresetDrive.begin();
PresetReverse.begin();
PresetNeutral.begin();
// initialize serial port
Serial.begin(9600);
// initialize MegaMoto board
pinMode(EnablePin, OUTPUT); //Enable the board
pinMode(PWMPinA1, OUTPUT);
pinMode(PWMPinB1, OUTPUT); //Set motor outputs
// set our sensor pin to read
pinMode(SensorPin, INPUT);
// make sure we don't move the actuator upon start
analogWrite(PWMPinA1, 0);
analogWrite(PWMPinB1, 0);
// enable the megamoto shield
Serial.println("Enabling MegaMoto shield");
// delay(delaytime);
digitalWrite(EnablePin, HIGH);
Serial.println("MegaMoto shield is now enabled");
}
void loop() {
CurrentPos = ReadPos();
if ((AutoPilot) && (ReachedTarget(CurrentPos))) {
ElevatorStop();
AutoPilot = false;
}
if (PresetPark.pressed()) {
AutoPilot = true;
TargetPos=ParkLevel;
GoToTarget();
}
if (PresetDrive.pressed()) {
AutoPilot = true;
TargetPos=DriveLevel;
GoToTarget();
}
if (PresetReverse.pressed()) {
AutoPilot = true;
TargetPos=ReverseLevel;
GoToTarget();
}
if (PresetNeutral.pressed()) {
AutoPilot = true;
TargetPos=NeutralLevel;
GoToTarget();
}
if (ManualUp.pressed()) {
AutoPilot = false;
ElevatorUp();
}
if (ManualDown.pressed()) {
AutoPilot = false;
ElevatorDown();
}
if (ManualUp.released() || ManualDown.released()) {
ElevatorStop();
}
}
void ElevatorUp() {
// Activate pin A and deactivate pin B
analogWrite(PWMPinA1, 255);
analogWrite(PWMPinB1, 0); // speed 0-255
// Print starting point
Serial.print("Moving elevator up from position: ");
Serial.println(ReadPos());
}
void ElevatorDown() {
// Activate pin B and deactivate pin A
analogWrite(PWMPinA1, 0);
analogWrite(PWMPinB1, 255); // speed 0-255
// Print starting point
Serial.print("Moving elevator down from position: ");
Serial.println(ReadPos());
}
void ElevatorStop() {
// Deactivate both pins
analogWrite(PWMPinA1, 0);
analogWrite(PWMPinB1, 0); // speed 0-255
// Print stopping point
Serial.print("Elevator stopped at position: ");
Serial.println(ReadPos());
}
int ReadPos() {
return analogRead(SensorPin);
}
void GoToTarget() {
if (ReachedTarget(CurrentPos)) {
Serial.println("Elevator already at target.");
}
else if (TargetPos < CurrentPos) {
ElevatorDown();
}
else if (TargetPos > CurrentPos) {
ElevatorUp();
}
}
bool ReachedTarget(int CheckPos) {
int LimitLow = CheckPos - Accuracy;
int LimitHigh = CheckPos + Accuracy;
if ((TargetPos < LimitHigh) && (TargetPos > LimitLow)) {
Serial.println("Elevator reached target.");
return true;
}
else {
return false;
}
}. </>