Försöker lära mig att programera lite, det går framåt men nu har jag kört fast ordentligt:(
Lite kort om vad jag vill göra:
Jag ska ha en steppmotor monterad på en axel, på axel sitter ett fäste som drar en avståndsmätare fram och tillbaks.
Detta värde från sensor vill jag ha på en lcd.
Nu till problemet:
Kör jag koden utan sensorkoden i, så rör sig motor som den ska, lägger jag in sensorkoden så fungerar det att läsa värdet till lcd men motor går nästan inte alls, den rör sig bara lite när jag trycker på knapparna som styr den.
Vad jag förstår så är det mycket för kortet att uppdatera därför blir det så??
Har läst om något som heter "MSTimer2" som tydligen ska göra att det ska fungera ändå, men pga att jag är nybörjare har jag inte en aning om hur jag ska få in denna i koden eller lösa problemet på annat sätt.
Är det någon här som har någon ide om hur jag kan lösa detta problem?
Tack på förhand
/David
Kod: Markera allt
#include <NewPing.h>
#include <LiquidCrystal.h>
LiquidCrystal LCD(8, 9, 4, 5, 6, 7);
#define step_pin 3 // Define pin 3 as the steps pin
#define dir_pin 2 // Define pin 2 as the direction pin
#define MS1 A1 // Define pin 5 as "MS1"
#define MS2 A2 // Define pin 4 as "MS2"
#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5
#define trigPin 11
#define echoPin 12
int button;
int direction; // Variable to determine the sense of the motor
int steps = 500; // Number of steps that you want to execute (for full steps, 200 = 1 turn)
void setup() {
LCD.begin(16,2); //Starta Lcd Med 16 columner och 2 Rader
LCD.setCursor(0,0); //Sätt Rad Uppe Till Vänster, column 0, Rad 0
LCD.print(" Pall 120"); //Skriv På Första Raden
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(MS1, OUTPUT); // Configures "MS1" as output
pinMode(MS2, OUTPUT); // Configures "MS2" as output
pinMode(dir_pin, OUTPUT); // Configures "dir_pin" as output
pinMode(step_pin, OUTPUT); // Configures "step_pin" as output
digitalWrite(MS1, LOW); // Configures the steps division (see above)
digitalWrite(MS2, LOW); // Configures the steps division (see above)
}
void loop() {
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance =(((duration/2)/29.4)*2) ;
LCD.setCursor(0,1); //Sätt Till Andra Raden
LCD.print(" "); //Skriv Inget För Att Rensa Raden
LCD.setCursor(0,1); //Sätt Till Andra Raden
LCD.print(distance); //Skriv Kod Från Sensor
LCD.print(" cm"); //Skriv Enhet
delay(250); //Pausa För Att Ordna Siffror
int buttonVal = read_buttons();
if(buttonVal == btnLEFT)
{
digitalWrite(dir_pin, HIGH);
digitalWrite(step_pin, HIGH);
delay(1);
digitalWrite(step_pin, LOW);
delay(2);
steps--;
}
if(buttonVal == btnRIGHT)
{
digitalWrite(dir_pin, LOW);
digitalWrite(step_pin, LOW);
delay(3);
digitalWrite(step_pin, HIGH);
steps--;
}
}
int read_buttons() {
int adc_key_in = analogRead(0);
if (adc_key_in > 1000) return btnNONE;
if (adc_key_in < 50) return btnRIGHT;
if (adc_key_in < 195) return btnUP;
if (adc_key_in < 380) return btnDOWN;
if (adc_key_in < 555) return btnLEFT;
if (adc_key_in < 790) return btnSELECT;
}