Programma keuze
26 berichten
• Pagina 3 van 3 • 1, 2, 3
Re: Programma keuze
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.
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
- Arduinouno
- Berichten: 27
- Geregistreerd: 05 Mrt 2018, 07:30
Re: Programma keuze
cpp code
dit is mijn volledige programma
//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
Re: Programma keuze
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.
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.
- Arduinouno
- Berichten: 27
- Geregistreerd: 05 Mrt 2018, 07:30
Re: Programma keuze
Bedankt voor je reactie, maar ik begrijp niet goed wat je bedoeld met de status van de knopen op te vragen
Re: Programma keuze
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!
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!
- Arduinouno
- Berichten: 27
- Geregistreerd: 05 Mrt 2018, 07:30
Re: Programma keuze
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
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
26 berichten
• Pagina 3 van 3 • 1, 2, 3
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 39 gasten