Programma keuze

Projecten die niet passen in bovenstaande onderwerpen
Gebruikers-avatar
Berichten: 241
Geregistreerd: 22 Jan 2013, 16:40

Re: Programma keuze

Berichtdoor zuid » 17 Apr 2018, 18:16

Hoe weet het programma dat de motor nog bezig is?
Hoe weet het programma welke richting de motor draait?
Hoe dacht je te hebben voorkomen dat de richting niet verandert bij draaiende motor?
Uit het stukje code is dat zonder nadere toelichting (voor mij) niet vast te stellen.

Advertisement

Berichten: 27
Geregistreerd: 05 Mrt 2018, 07:30

Re: Programma keuze

Berichtdoor Arduinouno » 17 Apr 2018, 19:24

cpp code
//simulatie draaitafel

const int ledPin1 = 13; //led lege draaitafel (groen)
const int ledPin2 = 12; //led afgeduwd laadbord (groen)
const int ledPin3 = 11; //led noodstop (rood)
int A = 0; //optische sensor vooraan
int B = 1; //optische sensor achteraan
int C = 2; //capacitieve sensor laadpositie
int Alevel;
int Blevel;
int Clevel;
const int threshold = 500; //settings optische sensoren
const int buttonPin1 = 7; //inductieve sensor laadpositie
const int buttonPin2 = 6; //inductieve sensor afvoerpositie CW
const int buttonPin3 = 5; //keuzeschakelaar CW
const int buttonPin4 = 4; //keuzeschakelaar CCW
const int buttonPin5 = 8; //inductieve sensor afvoerpositie CCW
const int buttonPin6 = 9; //noodstop
int ButtonState1 = 0; //settings capacitieve sensor laadpositie
int ButtonState2 = 0; //settings inductieve sensor afvoerpositie CW
int ButtonState3 = 0; //settings drukknop CW
int ButtonState4 = 0; //settings drukknop CCW
int ButtonState5 = 0; //settings inductieve sensor afvoerpositie CCW
int ButtonState6 = 0; //settings noodstop
const int in_1 = 2; //motor
const int in_2 = 3; //motor
const int pwm = 10; //snelheidsregeling motor

void setup()
{
Serial.begin(9600);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(A,INPUT);
pinMode(B,INPUT);
pinMode(C,INPUT);
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(buttonPin3, INPUT);
pinMode(buttonPin4, INPUT);
pinMode(buttonPin5, INPUT);
pinMode(buttonPin6, INPUT);
pinMode(in_1, OUTPUT);
pinMode(in_2, OUTPUT);
pinMode(pwm, OUTPUT);
}

void lege_draaitafel_aanvoerpositie()
{
//controle lege draaitafel + aanvoerpositie
Alevel= analogRead(A);
Blevel= analogRead(B);
ButtonState1= digitalRead(buttonPin1);
if (Alevel > threshold && Blevel > threshold && ButtonState1 == HIGH){
digitalWrite(ledPin1, HIGH);
}
else {
digitalWrite(ledPin1, LOW);
}
}

void draaibeweging_afvoer()
{
ButtonState1= digitalRead(buttonPin1);
ButtonState3= digitalRead(buttonPin3);
ButtonState4= digitalRead(buttonPin4);
Clevel= analogRead(C);
if (Clevel < threshold && ButtonState1 == HIGH && ButtonState3 == HIGH && ButtonState4 == LOW) { //draaibeweging CW
digitalWrite(in_1, LOW);
digitalWrite(in_2, HIGH);
analogWrite(pwm, 59);
}
else if (Clevel < threshold && ButtonState1 == HIGH && ButtonState4 == HIGH && ButtonState3 == LOW) { //draaibeweging CCW
digitalWrite(in_1, HIGH);
digitalWrite(in_2, LOW);
analogWrite(pwm, 59);
}
}

void draaibeweging_afvoer_stoppen()
{
ButtonState2= digitalRead(buttonPin2);
ButtonState3= digitalRead(buttonPin3);
ButtonState5= digitalRead(buttonPin5);
ButtonState4= digitalRead(buttonPin4);
Clevel= analogRead(C);
if ((Clevel < threshold && ButtonState2 == HIGH && ButtonState3 == LOW)||(Clevel < threshold && ButtonState4 == LOW && ButtonState5 == HIGH)) {
digitalWrite(in_1, HIGH);
digitalWrite(in_2, HIGH);
}
}

void controle_laadbord_afgeduwd()
{
//controle laadbord afgeduwd bij afvoer
Alevel= analogRead(A);
Blevel= analogRead(B);
Clevel= analogRead(C);
ButtonState2= digitalRead(buttonPin2);
ButtonState5= digitalRead(buttonPin5);
if (Alevel > threshold && Blevel > threshold && Clevel > threshold && (ButtonState2 == HIGH || ButtonState5 == HIGH)) {
digitalWrite(ledPin2, HIGH);
}
else {
digitalWrite(ledPin2, LOW);
}
}

void draaibeweging_aanvoer()
{
Alevel= analogRead(A);
Blevel= analogRead(B);
Clevel= analogRead(C);
ButtonState2 = digitalRead(buttonPin2);
ButtonState5 = digitalRead(buttonPin5);
if (Alevel > threshold && Blevel > threshold && Clevel > threshold && ButtonState2 == HIGH){ //draaibeweging afcoer CW naar aanvoer
digitalWrite(in_1, HIGH);
digitalWrite(in_2, LOW);
analogWrite(pwm, 59);
}
else if (Alevel > threshold && Blevel > threshold && Clevel > threshold && ButtonState5 == HIGH){ //draaibeweging afvoer CCW naar aanvoer
digitalWrite(in_1, LOW);
digitalWrite(in_2, HIGH);
analogWrite(pwm,59);
}
}

void draaibeweging_aanvoer_stoppen()
{
Alevel= analogRead(A);
Blevel= analogRead(B);
Clevel= analogRead(C);
ButtonState1 = digitalRead(buttonPin1);
if (Alevel > threshold && Blevel > threshold && Clevel > threshold && ButtonState1 == HIGH){
digitalWrite(in_1, HIGH);
digitalWrite(in_2, HIGH);
}
}

void noodstop()
{
//noodstop voor motorbeweging
ButtonState6 = digitalRead(buttonPin6);
if (ButtonState6 == HIGH){
digitalWrite(in_1, HIGH);
digitalWrite(in_2, HIGH);
digitalWrite(ledPin3, HIGH);
}
else {
digitalWrite(ledPin3, LOW);
}
}

void loop()
{
lege_draaitafel_aanvoerpositie();
draaibeweging_afvoer();
draaibeweging_afvoer_stoppen();
controle_laadbord_afgeduwd();
draaibeweging_aanvoer();
draaibeweging_aanvoer_stoppen();
noodstop();
}

dit is mijn volledige programma

Gebruikers-avatar
Berichten: 241
Geregistreerd: 22 Jan 2013, 16:40

Re: Programma keuze

Berichtdoor zuid » 18 Apr 2018, 06:57

Je moet de oplossing zoeken in een het uit elkaar halen van de functies voor het bewegen en het bepalen van de status van een knop.
Maak een functie die de status van de knoppen 3 en 4 omzet naar bijvoorbeeld "status knop is ga linksom" of "status knop is ga rechtsom". Dit kan bijvoorbeeld in int aangegeven worden met de waarde 0 = geen status (of noodstop), 1 = links en 2 = rechts.
De motor moet stoppen zodra het gewenste punt is bereikt, dit is dus niet afhankelijk van de actuele situatie van een knop. Dit kan geregeld worden met een van de sensoren. Ik neem aan dat dat nu ook al zo werkt en je niet een knop ingedrukt moet houden. Misschien heb je er nog wel een extra status veld voor nodig. Bijvoorbeeld Motorstatus = 0 (staat stil), Motorstatus = 1( onderweg naar links), Motorstatus = 2 (onderweg naar rechts).
Zodra de motor gestopt is kan weer worden afgevraagd is de gewenste status bereikt of moet de motor weer worden gestart om naar het nieuwe gewenste punt te gaan. Hopelijk heb je hiermee wat nieuwe ideeën en kan je weer verder.

Berichten: 27
Geregistreerd: 05 Mrt 2018, 07:30

Re: Programma keuze

Berichtdoor Arduinouno » 18 Apr 2018, 14:39

Bedankt voor je reactie, maar ik begrijp niet goed wat je bedoeld met de status van de knopen op te vragen

Gebruikers-avatar
Berichten: 241
Geregistreerd: 22 Jan 2013, 16:40

Re: Programma keuze

Berichtdoor zuid » 18 Apr 2018, 17:05

void knopStatusBepalen(){
ButtonState3= digitalRead(buttonPin3);
ButtonState4= digitalRead(buttonPin4);
if( ButtonState3 == HIGH){ knopStatus = 1 } // dus linksom
if( ButtonState4 == HIGH){ knopStatus = 2 } // dus rechtsom
}
In de rest van het programma alleen variabele knopStatus gebruiken en dus niet meer:

ButtonState3= digitalRead(buttonPin3);
ButtonState4= digitalRead(buttonPin4);

Let op "knopStatus" alleen gebruiken als volgens het programma de motor stilstaat!

Berichten: 27
Geregistreerd: 05 Mrt 2018, 07:30

Re: Programma keuze

Berichtdoor Arduinouno » 07 Mei 2018, 21:25

hallo,

vanavond terug de tijd gevonden om verder te werken aan het programma.
Ik heb inmiddels ook nog wat opzoek werk gedaan. Maar de variabelen begrijp ik nog niet helemaal.

als ik die extra void invoeg voor de knop status te bepalen, dien ik in de andere voids de variabelen knopstatus op te vragen. Maar dat begrijp ik niet goed hoe ik dat moet schrijven

Vorige

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Google [Bot] en 9 gasten