Sida 1 av 2

Arduinokod för motor på/av med knapp

Postat: 16 januari 2018, 14:28:42
av fosfor
Hej!

Målet är att kunna köra en motor åt ena hållet så länge knappen är intryckt.
Och åt andra hållet sålänge en annan knapp är intryckt. Om båda råkar tryckas in samtidigt, ska inget hända.
När ingen trycks, så ska motorn stå still. :humm:

Har H-brygga (L293D) och hela fillevitten inkopplat i en fungerande konfig med Arduino Uno.
MEN i nuläget är knapp1 bara på och av, medans knapp2 bara byter riktning på motorn. Dvs inte riktigt rätt.
Dessutom snurrar motorn nu konstant tills man trycker igen, och nedhållen knapp har ingen funktion. :humm:

Någon som har en bra rekommendation på kod att använda? :)

Re: Arduinokod för motor på/av med knapp

Postat: 16 januari 2018, 14:35:26
av Icecap
Nu måste jag bara kolla lite:
Du menar att det skulle vara svårt att göra det program? Alltså som i "göra själv"?

Re: Arduinokod för motor på/av med knapp

Postat: 16 januari 2018, 15:02:59
av fosfor
Va?

Peka mig bara i rätt riktning så hoppas jag att jag kan klura ut det.

Re: Arduinokod för motor på/av med knapp

Postat: 16 januari 2018, 15:08:46
av Gizmo
Tror det blir enklare att tipsa om du postar koden. Det finns många olika sätt att göra det på, och många tutorials att läsa på nätet.
Har för mig att man kan använda funktionen "code" (se ovan i rutan när man skriver inlägg) för att få koden syntaxmarkerad dessutom, det kan vara lite praktiskt för läsbarheten.
Ju mer man berättar om sitt projekt, eller bygge, desto tydligare svar får man. Eller kanske rent utav andra sätt att lösa problemen på.

Re: Arduinokod för motor på/av med knapp

Postat: 16 januari 2018, 15:09:22
av Icecap
Du har alltså två ingångar med var sin knapp på. Här kallar jag dom "In1" och "In2".

Du har även fyra utgångar som ska stå i specifika mönster för rätt funktion. Här kallar jag dom "Out1", "Out2", "Out3" och "Out4".

Kod: Markera allt

if(In0 & !In1)
  {
  // Set Out1-4 to pattern for rotation to direction X
  }
else if{!In0 & In1}
  {
  // Set Out1-4 to pattern for rotation to direction Y
  }
else
  {
  // Set Out1-4 to pattern for stop
  }
Loopa detta kontinuerligt och du är i mål.

Funktionen:
Om In1 är påverkat OCH In2 INTE är det körs ena hållet.
Om in1 INTE är påverkat OCH In2 ÄR det körs andra hållet.
Annars stoppas det.

Re: Arduinokod för motor på/av med knapp

Postat: 17 januari 2018, 23:04:53
av HUGGBÄVERN
Vi är alla olika men jag kollar nätet först. En del blir nervösa av att nödgas få inspiration och ideer från annat håll men det är ju en god start.
Här var något jag hittade:
http://howtomechatronics.com/tutorials/ ... -h-bridge/
https://www.allaboutcircuits.com/projec ... n-arduino/
http://www.instructables.com/id/Control ... Dual-Moto/

Re: Arduinokod för motor på/av med knapp

Postat: 18 januari 2018, 09:32:45
av fosfor
Här är motorns kod som den är nu.
Då med en knapp för on/off, och en knapp för reverserad riktning.
Knapparna behöver inte hållas in, utan kör ON vid ett klick.

Det jag vill ha är att knappen måste hållas in, samt att en knapp är för ena hållet, den andra knappen åt andra hållet.
En reverserad riktning behövs inte i mitt fall.

KODEN:

// ---- MOTOR CONST INTARNA ----
const int controlPin1 = 7;
const int controlPin2 = 6;
const int enablePin = 9;
const int directionSwitchPin = 4;
const int onOffSwitchStateSwitchPin = 5;
const int potPin = A0;

// ---- MOTOR INTARNA
int onOffSwitchState = 0;
int previousOnOffSwitchState = 0;
int directionSwitchState = 0;
int previousDirectionSwitchState = 0;

// ---- MOTOR CONST INTARNA VARIABLES ----
int motorEnabled = 0;
int motorSpeed = 0;
int motorDirection = 1;

// ---- MOTORNS VOID SETUP ----
pinMode(directionSwitchPin, INPUT);
pinMode(onOffSwitchStateSwitchPin, INPUT);
pinMode(controlPin1, OUTPUT);
pinMode(controlPin2, OUTPUT);
pinMode(enablePin, OUTPUT);
digitalWrite(enablePin, LOW);

// ---- MOTORNS VOID LOOP ----


onOffSwitchState =
digitalRead(onOffSwitchStateSwitchPin);
delay(1);
directionSwitchState =
digitalRead(directionSwitchPin);
motorSpeed = analogRead(potPin)/4;

if(onOffSwitchState != previousOnOffSwitchState){
if(onOffSwitchState == HIGH){
motorEnabled = !motorEnabled;
}
}
if (directionSwitchState !=
previousDirectionSwitchState) {
if (directionSwitchState == HIGH) {
motorDirection = !motorDirection;
}
}
if (motorDirection == 1) {
digitalWrite(controlPin1, HIGH);
digitalWrite(controlPin2, LOW);
}

else {
digitalWrite(controlPin1, LOW);
digitalWrite(controlPin2, HIGH);
}
if (motorEnabled == 1) {
analogWrite(enablePin, motorSpeed);
}
else {
analogWrite(enablePin, 0);
}
previousDirectionSwitchState =
directionSwitchState;
previousOnOffSwitchState = onOffSwitchState;
}

Re: Arduinokod för motor på/av med knapp

Postat: 18 januari 2018, 09:36:11
av fosfor
Lite pix på nuvaranda konfigurationen

Re: Arduinokod för motor på/av med knapp

Postat: 18 januari 2018, 16:07:44
av fosfor
Hej igen!

Nu använder jag denna del kod för att slå av och på motorn:
Kanske något ni ser direkt vad jag gjort fel? :humm:
Den tredje rutan kod (intest3Pin) är den enda som fungerar, flyttar jag upp den överst så blir det intest2Pin som hamnar nederst och då är det bara den som fungerar.
Alla intestPin ingångar är konfiguerade exakt likadant.
Jag vill ju att den ska kunna läsa två av dessa rutor. Så att jag kan styra motorn åt ena eller åt andra hållet.
När jag trycker de knappar som inte fungerar, så hör man ett litet surr från motorn. Som att den får "något" men startar inte.

{
val = digitalRead(intest1Pin); // Läser input värde
if (val == HIGH) { // Checkar om input är hög (knapp släppt)
digitalWrite(controlPin1, HIGH);
digitalWrite(controlPin2, LOW);
digitalWrite(enablePin, HIGH); // Slar av motor
} else {
digitalWrite(controlPin1, LOW);
digitalWrite(controlPin2, LOW); // Slar pa motor
}


val = digitalRead(intest2Pin); // Läser input värde
if (val == HIGH) { // Checkar om input är hög (knapp släppt)
digitalWrite(controlPin1, LOW);
digitalWrite(controlPin2, HIGH);
digitalWrite(enablePin, HIGH); // Slar av motor
} else {
digitalWrite(controlPin1, LOW);
digitalWrite(controlPin2, LOW); // Slar pa motor
}


// ENDAST DENNA FUNGERAR

val = digitalRead(intest3Pin); // Läser input värde
if (val == HIGH) { // Checkar om input är hög (knapp släppt)
digitalWrite(controlPin1, LOW);
digitalWrite(controlPin2, HIGH);
digitalWrite(enablePin, HIGH); // Slar av motor
} else {
digitalWrite(controlPin1, LOW);
digitalWrite(controlPin2, LOW); // Slar pa motor
}

Re: Arduinokod för motor på/av med knapp

Postat: 18 januari 2018, 17:27:04
av kodar-holger
Tips1: All kod körs och den körs uppifrån och ner. Kör den manuellt i huvudet så tror jag du själv kommer på vad som är fel. :D

Tips2: Kolla IceCaps kod tidigare i tråden. Fundera på vad den gör och varför den gör som den gör.
[VISA]
När du utvärderar knapp två överrider du det som gjorts efter avläsning av knapp 1 o.s.v.

Re: Arduinokod för motor på/av med knapp

Postat: 18 januari 2018, 17:29:39
av fosfor
OK ska kika!

Btw, hittade felet, tog bort lite kod så blev allt som det ska.

Detta löste problemet

{

val = digitalRead(intest1Pin); // Läser input värde
if (val == HIGH) { // Checkar om input är hög (knapp släppt)
digitalWrite(controlPin1, HIGH);
digitalWrite(controlPin2, LOW);
} else {

val = digitalRead(intest2Pin); // Läser input värde
if (val == HIGH) { // Checkar om input är hög (knapp släppt)
digitalWrite(controlPin1, LOW);
digitalWrite(controlPin2, HIGH);
} else {
digitalWrite(controlPin1, LOW);
digitalWrite(controlPin2, LOW); // Slar pa motor
}}

}

Re: Arduinokod för motor på/av med knapp

Postat: 18 januari 2018, 18:24:03
av Icecap
Men fel är det ändå...
Om ena knappen är påverkat ställer du motorn till att köra riktning X.
Om inte stoppas den.
Och SEN kollar du andra knappen och kör riktning Y om den är påverkat.

Re: Arduinokod för motor på/av med knapp

Postat: 18 januari 2018, 18:24:14
av Icecap
Men fel är det ändå...
Om ena knappen är påverkat ställer du motorn till att köra riktning X.
Om inte stoppas den.
Och SEN kollar du andra knappen och kör riktning Y om den är påverkat.

Re: Arduinokod för motor på/av med knapp

Postat: 19 januari 2018, 09:05:28
av fosfor
Ok... Men what to do then?

Nu är ju iaf funktionen precis som jag vill ha den.
Åt ena hållet om ena knappen hålls in och vice versa.

Re: Arduinokod för motor på/av med knapp

Postat: 19 januari 2018, 10:00:43
av HUGGBÄVERN
Du skulle kunna rita ett diagram, en villkorstabell så ser du hur det ska vara.