duimwielschakelaars

Hardware die niet past in bovenstaande onderwerpen
Berichten: 61
Geregistreerd: 28 Nov 2013, 13:55

Re: duimwielschakelaars

Berichtdoor Redundant » 28 Mei 2014, 21:00

Helaas, ik ben de weg kwijt na het proberen om e.e.a. te verwerken.
Datgene wat ik al had bereikt met mijn programma staat er nog steeds uitgeschakeld ergens tussen. :oops:
Inmiddels is het een rommeltje geworden. :oops:

duimwielPKS blijft een 0 op de LCD, maar toch is er wel een waarde aangezien ik ook de 1e letters zie van stand 1 = Graden.
duimwielDWS laat een 1 zien terwijl er 536 op de duimwielschakelaars staat.

Helemaal onderaan staat een verborgen routine die het totaalgetal 1655 laat zien, helaas.

//
// http://www.brainstorm-vzw.be/stappenmotor/
// WDankzij o.a. Webside met uitleg Stappenmotor.

// Arduino MEGA_2560
// Programma voor verdeeltafel-aansturing met 4_draden stappenmotor // en LCD_scherm ?
// Verdeeltafel kan met 40/60/72/90 verhouding zijn.

// Bediening
int Aan = 0; // Led Blauw betekend Schakeling = Aan TEST_LED = Poort 13
int Uit = 0; // Alles Uit. Kan ook rechtstreeks van Schakelaar

// LCD Scherm
#include <LiquidCrystal.h>
LiquidCrystal lcd(48, 49, 47, 46, 45, 44); // select the pins used on the LCD panelLiquidCrystal
int backLight = 10; // LCD Panel Backlight LED connected to digital pin 10
int LightLevel = 255; // Licht vol aan

// ProgrammaKeuze_schakelaar voor Nr.1= GRaden opgave Nr.2 = Verdeling opgeven Verhouding 3,4,5 = 40/60/72/90 of 6 t/m 0 = reserve

int PKSNul =0; // Nul = Geen ProgrammaKeuze gemaakt
int PKSGR = 0; // 1 Graden opgeven
int PKSVd = 0; // 2 Verdeling opgeven
int PKS40 = 0; // 3 Verdeelapparaat 1:40
int PKS60 = 0; // 4 Verdeelapparaat 1:60
int PKS72 = 0; // 5 Verdeelapparaat 1:72
int PKS90 = 0; // 6 Verdeelapparaat 1:90
int PKS_Reserve7 = 0; // 7 Reserve
int PKS_Reserve8 = 0; // 8 Reserve
int PKS_Reserve9 = 0; // 9 Reserve
int resultaat = 0;
//
// enumeraties
//
enum {
duimwielPKS, // programma keuze
duimwielDWS // Aantal bewerkingen (graden of Tanden, etc.)
};

//
// Programma Keuze schakelaar
//
// int PKS = 0; // Waarde ProgrammaKeuzeSchakelaar 0 t/m 9
#define PKS1 A8 // Blauw // LSB
#define PKS2 A9 // Paars
#define PKS4 A10 // Grijs
#define PKS8 A11 // Wit // MSB

uint8_t PKS_array[] = { PKS1, PKS2, PKS4, PKS8 };

uint8_t PKS = 0; // Waarde ProgrammaKeuzeSchakelaar
//
// Bewerkingkeuze schakelaar. Dit zijn 3 parallel geschakelde duimwiel schakelaars waarbij
// DWS_KEUZEx aangeeft welk van de 3 wielen actief is.
//
// int DWSW = 0; // Totaalwaarde set van 3-Duimwielschakelaars
// Aantal Bewerkingen opgeven / vastleggen met 3-Duimwielschakelaars 000 t/m 999

#define DWS1 A12 // Paars
#define DWS2 A13 // Blauw
#define DWS4 A14 // Groen
#define DWS8 A15 // Geel


uint8_t DWS_array[] = {DWS1, DWS2, DWS4, DWS8 };

#define DWS_KEUZE1 11 // Eenheden
#define DWS_KEUZE2 10 // tientallen
#define DWS_KEUZE3 9 // hondertallen

uint8_t Keuze_array[] = {DWS_KEUZE1, DWS_KEUZE2, DWS_KEUZE3 };

int ledPinAU = 12; // 12PWM Led Blauw Aan/Uit
int TestLed = 13; // 13PWM Led TestLed ROOD

// Stappenmotor
int ledPinRM = 2; // 2PWM Led Rood Stappenmotor draait (Revolution_Motor)
int ledPinSR = 3; // 3PWM Led Groen Stappenmotor staat (Ready) klaar voor opdracht

int dirpin = 22; // 22digitaal Draairichting Stappenmotor
int steppin = 24; // 24digitaal Aantal stappen
int Speedpin = 26; // 26digitaal Snelheid stappenmotor
int HoHT = 0; // Aantal stappen per Tand (Hart op Hart afstand)

void setup() {
{
// lcd instelling
// lcd.begin(16, 2);
// lcd.clear();
}

pinMode(13, OUTPUT); // TestLed

pinMode(ledPinSR, OUTPUT); // 3PWM Groene Led in Drukknop. Stappenmotor klaar voor nieuw signaal
pinMode(ledPinRM, OUTPUT); // 2PWM Rode Led, stappenmotor draait en andere drukknop is geblokkeerd tijdens bewerking.

// Programmakeuze enkel Duimwiel
// Common = rechtstreeks van 5V
//
for (uint8_t i = 0; i < 4; i++) {
pinMode(PKS_array[i], INPUT);
}
//
// Aantallen Opgave 3-Duimwielen
// 3 X Common
//
for (uint8_t i = 0; i < 4; i++) {
pinMode(Keuze_array[i], OUTPUT);
}
for (uint8_t i = 0; i < 4; i++) {
pinMode(DWS_array[i], INPUT);
}
//





/*
pinMode(A8, INPUT); // PKS1 Oranje // Routine is gemaakt als programma Duimwiel_1-schijf //
pinMode(A9, INPUT); // PKS2 Paars // van de uitkomst worden cijfers en tientallen en honderdtallen
pinMode(A10, INPUT); // PKS4 Grijs // bij elkaar opgeteld.
pinMode(A11, INPUT); // PKS8 Wit //

// Aantallen Opgave 3-Duimwielen
// 3 X Common
pinMode(38, OUTPUT); // 10PWM Rood = C van 1/3e DuimwielSchakelaar
pinMode(40, OUTPUT); // 11PWM Oranje = C van 2/3e DuimwielSchakelaar
pinMode(42, OUTPUT); // 12PWM Geel = C van 3/3e DuimwielSchakelaar

pinMode(DWS1, INPUT); // A12 Paars // Routine is gemaakt als programma Duimwiel_1-axis //
pinMode(DWS2, INPUT); // A13 Blauw // van de uitkomst worden cijfers en tientallen en honderdtallen
pinMode(DWS4, INPUT); // A14 Groen // bij elkaar opgeteld.
pinMode(DWS8, INPUT); // A15 Geel //
*/
// We zeggen dat de poorten voor de stappen en de pulsen outputs zijn.
pinMode(dirpin, OUTPUT); // 22PWM
pinMode(steppin, OUTPUT); // 24PWM
pinMode(Speedpin, OUTPUT); // 26PWM

Serial.begin(9600);
}

void loop(){
/*
{
if (digitalRead(A8) == HIGH) {PKS += 1;} // { digitalWrite(8, HIGH); }
if (digitalRead(A9) == HIGH) {PKS += 2;} // { digitalWrite(9, HIGH); }
if (digitalRead(A10) == HIGH) {PKS += 4;} // { digitalWrite(10, HIGH); }
if (digitalRead(A11) == HIGH) {PKS += 8;} // { digitalWrite(11, HIGH); }
}*/

// lcd instelling

PKS = leesDuimwiel(duimwielPKS);


verwerkPKS(PKS);

// Routine van de 3-Duimwielschakelaars is goed werkend / klaar

// DWSW = leesDuimwiel(duimwielDWS);


delay(500);

}
/**
* @name leesDuimwiel
* @param duimwielType type duimwiel dat gekozen wordt PKS of DWS
* @return resultaat dE gelezen waarde uit de duimwiel schakelaar(S)
* Leest de duimwiel schakelaars afhankelijk van het gekozen type. Daar alle pinnen indirect geadresseerd
* worden via tabellen hoeven we ons hier niet druk te maken over de feitelijke pinnen. Hiermee bereik je een stuk
* abstractie tussen functionaliteit en de feitelijke pinnen.
*/
uint8_t leesDuimwiel(uint8_t duimwielType){

uint8_t resultaat = 0; // het resultaat van de duimwiel actie
uint8_t * duimwiel; // wijst straks naar de juiste array (PKS_array of DWS_array)
//
// bepaal welke array we gaan gebruiken voor de juiste IO pinnen
//
if (duimwielType == duimwielPKS) {
duimwiel = PKS_array;
} else {
duimwiel = DWS_array;
}
//
// lees de duimwiel schakelaar(s)
//
for (uint8_t i = 0; i < 3; i++) {
//
// als het de PKS duimwiel is dan hoeven we maar een duimwiel te tellen
//
if (duimwielType == duimwielPKS) {
//
// het is maar een wiel dus ook een keer tellen
//
i = 3;
} else {
//
// het is een DWS duimwiel dus ff alle pinnen op laag. Dan hoeven we alleen de goede hoog
// te zetten voor het lezen straks
//
digitalWrite(Keuze_array[0], LOW);
digitalWrite(Keuze_array[1], LOW);
digitalWrite(Keuze_array[2], LOW);
digitalWrite(Keuze_array[i], HIGH);
//
// eventueel resultaat dat we al hebben met 10 vermenigvuldigen
//
resultaat = resultaat * 10;
}
//
// en nu loopen we via de verschillende duimwiel schakelaars
//

uint8_t temp = 0; // temp bevat de waarde van de duimwiel schakelaar die gelezen wordt
uint8_t multiplier = 1; // de eerste waarde x 1
//
// nu ff alle pinnen lezen en temp bepalen
//
for (uint8_t j = 0; j < 4; j++) {
//
// digitalRead geeft de waarde 0 of 1 terug dus kan je klakkeloos vermenigvuldigen en optellen
// van de multiplyer
temp = temp + (digitalRead(duimwiel[j]) * multiplier);
//
// volgende vermenigvuldiger is 2x zo groot
//
multiplier = multiplier * 2;
}
//
// resultaat verhogen met temp
//
resultaat = resultaat + temp;
}
lcd.begin(16, 2);
lcd.print("duimwielPKS ");
lcd.print(duimwielPKS);
lcd.setCursor(0,1);
lcd.print("duimwielDWS ");
lcd.print(duimwielDWS);
// geef het resultaat terug aan de aanroeper
//
return resultaat;
}

// Routine Case = (PKS) ProgrammaKeuzeSchakelaar
/**
* @name verwerkPKS(uint8_t pks)
* @param pks programma keuze
* Verwerken van de gekozen programmakeuze
*/
void verwerkPKS(uint8_t pks) {
switch (PKS) {
case 0:
lcd.print("Maak Keuze. "); // PKS = 0
LightLevel = 255;
break;
case 1:
lcd.print("Graden "); // PKS = 1
LightLevel = 255;
break;
case 2:
lcd.print("Verdeling. "); // PKS = 2
LightLevel = 255;
break;
case 3:
lcd.print("WW 40 Verdeling."); // PKS = 3
LightLevel = 255;
break;
case 4:
lcd.print("WW 60 Verdeling."); // PKS = 4
LightLevel = 255;
break;
case 5:
lcd.print("WW 72 Verdeling."); // PKS = 5
LightLevel = 255;
break;
case 6:
lcd.print("WW 90 Verdeling."); // PKS = 6
LightLevel = 255;
break;
case 7:
lcd.print("Reserve 7 "); // PKS = 7
LightLevel = 255;
break;
case 8:
lcd.print("Reserve 8 "); // PKS = 8
LightLevel = 255;
break;
case 9:
lcd.print("Reserve 9 "); // PKS = 9
LightLevel = 255;
break;


}
}

/*
// Waarde van 3_Duimwielschakelaars

{
digitalWrite(38, HIGH); // 1e Duimwiel lezen 0 t/m 9
digitalWrite(40, LOW); // Duimwiel 10 t/m 99
digitalWrite(42, LOW); // Duimwiel 100 t/m 999

if (digitalRead(A12) == HIGH) { DWSW += 1;}
if (digitalRead(A13) == HIGH) { DWSW += 2;}
if (digitalRead(A14) == HIGH) { DWSW += 4;}
if (digitalRead(A15) == HIGH) { DWSW += 8;}

digitalWrite(38, LOW); // 1e Duimwiel 0 t/m 9
digitalWrite(40, HIGH); // 2e Duimwiel lezen 10 t/m 99
digitalWrite(42, LOW); // 3e Duimwiel 100 t/m 999

if (digitalRead(A12) == HIGH) { DWSW += 10;}
if (digitalRead(A13) == HIGH) { DWSW += 20;}
if (digitalRead(A14) == HIGH) { DWSW += 40;}
if (digitalRead(A15) == HIGH) { DWSW += 80;}

digitalWrite(38, LOW); // Duimwiel 0 t/m 9
digitalWrite(40, LOW); // Duimwiel 10 t/m 99
digitalWrite(42, HIGH); // 3e Duimwiel lezen 100 t/m 999

if (digitalRead(A12) == HIGH) { DWSW += 100;}
if (digitalRead(A13) == HIGH) { DWSW += 200;}
if (digitalRead(A14) == HIGH) { DWSW += 400;}
if (digitalRead(A15) == HIGH) { DWSW += 800;}
}

lcd.setCursor(0,1);
lcd.print(DWSW); // Waarde van 3_Duimwielschakelaars




delay(500);
}
*/

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: duimwielschakelaars

Berichtdoor nicoverduin » 28 Mei 2014, 23:01

Dan moet je overgaan op stap 2: DEBUGGEN :)
Gewoon met serial stap voor stap je het proces volgen en met serial variabelen uitprinten. moet wij ook :)
En verder zal het gewaardeerd worden als je je source tussen de [ code ] en [ /code ] (zonder de spaties) zet dan leest het gemakkelijker voor een ander. Dit nodigt niet uit voor hulp van een ander.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 61
Geregistreerd: 28 Nov 2013, 13:55

Re: duimwielschakelaars

Berichtdoor Redundant » 31 Mei 2014, 08:07

Hallo Nico, ik heb alles nagekeken en zover mogelijk in orde gemaakt.
Hopelijk staan de gegevens nu goed.
Anders graag een voorbeeld hoe e.e.a. moet staan.

Het programma werkt nu bijna goed.
De enkele duimwielschakelaar geeft keurig de juiste getallen weer.

Maar de Drievoudige DWS geeft nog steeds het totaalgetal van 1665, terwijl ik exact dezelfde opstelling gebruik etc.

Ik begrijp uiteindelijk niet hoe ik moet omgaan met de door jouw voorgestelde uint8_t PKS_array etc.


// http://www.brainstorm-vzw.be/stappenmotor/
// Webside met uitleg Stappenmotor.

// Arduino MEGA_2560
// Programma voor verdeeltafel-aansturing met 4_draden stappenmotor // en LCD_scherm ?
// Verdeeltafel kan met 4/60/72/90 verhouding zijn.

// Bediening
int Aan = 0; // Led Blauw betekend Schakeling = Aan TESTLED = Poort 13
int Uit = 0; // Alles Uit Kan ook rechtstreeks van Schakelaar

// LCD Scherm
// #include<Wire.h>
// #include(Mat.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(48, 49, 47, 46, 45, 44); // select the pins used on the LCD panelLiquidCrystal
//int backLight = 10; // LCD Panel Backlight LED connected to digital pin 10
//int LightLevel = 255; // Initialise light full on

// ProgrammaKeuze_schakelaar voor Nr.1= GRaden opgave Nr.2 = Verdeling opgeven Verhouding 3,4,5 = 40/60/72/90 of 6 t/m 0 = reserve

int PKSNul = 0; // Nul Geen ProgrammaKeuze gemaakt
int PKSGR = 0; // 1 Graden opgeven
int PKSVd = 0; // 2 Verdeling opgeven
int PKS40 = 0; // 3 Verdeelapparaat 1:40
int PKS60 = 0; // 4 Verdeelapparaat 1:60
int PKS72 = 0; // 5 Verdeelapparaat 1:72
int PKS90 = 0; // 6 Verdeelapparaat 1:90
int PKS_Res7 = 0; // 7 Reserve
int PKS_Res8 = 0; // 8 Reserve
int PKS_Res9 = 0; // 9 Reserve

// Programma Keuze maken
int PKS = 0; // Waarde ProgrammaKeuzeSchakelaar
int PKS1 = A8; // Blauw ProgrammaKeuzeSchakelaar Single_Duimwiel
int PKS2 = A9; // Paars ProgrammaKeuzeSchakelaar Single_Duimwiel
int PKS4 = A10; // Grijs ProgrammaKeuzeSchakelaar Single_Duimwiel
int PKS8 = A11; // Wit ProgrammaKeuzeSchakelaar Single_Duimwiel

// aantal Bewerkingen opgeven / vastleggen met 3-Duimwielschakelaars 000 t/m 999
int DWW = 0; // Totaalwaarde set van 3-Duimwielschakelaars
int DWS1 = A12; // Paars Bepalen aantal bewerkingen met 3_voudige Duimwiel
int DWS2 = A13; // Blauw Bepalen aantal bewerkingen met 3_voudige Duimwiel
int DWS4 = A14; // Groen Bepalen aantal bewerkingen met 3_voudige Duimwiel
int DWS8 = A15; // Geel Bepalen aantal bewerkingen met 3_voudige Duimwiel

int ledPinAU = 12; // 12PWM Led Blauw Aan/Uit
int TestLed = 13; // 13PWM Led TestLed ROOD

// Stappenmotor
int ledPinRM = 2; // 2PWM Led Rood Stappenmotor draait (Revolution_Motor)
int ledPinSR = 3; // 3PWM Led Groen Stappenmotor staat (Ready) klaar voor opdracht

int dirpin = 0; // 22digitaal Draairichting Stappenmotor
int steppin = 0; // 24digitaal Aantal stappen
int Speedpin = 0; // 26digitaal Snelheid stappenmotor
int HoHT = 0; // Aantal stappen per Tand (Hart op Hart afstand)

void setup() {

pinMode(13, OUTPUT); // TestLed

pinMode(ledPinSR, OUTPUT); // 3PWM Groene Led, Stappenmotor klaar voor nieuw signaal
pinMode(ledPinRM, OUTPUT); // 2PWM Rode Led, stappenmotor draait

// Programmakeuze enkel Duimwiel
// Common = rechtstreeks van 5V
pinMode(A8, INPUT); // PKS1 Blauw
pinMode(A9, INPUT); // PKS2 Paars
pinMode(A10, INPUT); // PKS4 Grijs
pinMode(A11, INPUT); // PKS8 Wit

// Aantallen Opgave 3-Duimwielen
// 3 X Common
pinMode(38, OUTPUT); //Rood=C van 1e/3 DuimwielSchakelaar
pinMode(40, OUTPUT); //Geel=C van 2e/3 DuimwielSchakelaar
pinMode(42, OUTPUT); //Oranje=C van 3e/3 DuimwielSchakelaar

pinMode(A12, INPUT); //A12 Paars
pinMode(A13, INPUT); //A13 Blauw
pinMode(A14, INPUT); //A14 Groen
pinMode(A15, INPUT); //A15 Geel

pinMode(22, OUTPUT); // 22PWM // dirpin = draairichting
pinMode(24, OUTPUT); // 24PWM // Aantal stappen
pinMode(26, OUTPUT); // 26PWM // Snelheid

Serial.begin(9600);
}

void loop() {
// LCD
{
lcd.begin(16, 2); // start the LCD library
}

// Routine Keuze Programma maken is klaar ?
PKS = 0;
{
if (digitalRead(A8) == HIGH) {PKS += 1;}{digitalWrite(8, HIGH);}
if (digitalRead(A9) == HIGH) {PKS += 2;}{digitalWrite(9, HIGH);}
if (digitalRead(A10) == HIGH) {PKS += 4;}{digitalWrite(10, HIGH);}
if (digitalRead(A11) == HIGH) {PKS += 8;}{digitalWrite(11, HIGH);} }

Serial.print(PKS);
Serial.print(" = "); // sends switch value to serial monitor box
Serial.println(" PKS"); // sends switch value to serial monitor box


switch (PKS) { // Routine Case = OK switch(PKS)
delay(30);
case 0:
Serial.println("Maak Keuze "); // PKS = stand Nul
lcd.print("Maak Keuze ");
break;
case 1:
Serial.println("Graden opgeven "); // PKS = 1
lcd.print("Graden opgeven ");
break;
case 2:
Serial.println("Verdeling maken "); // PKS = 2
lcd.print("Verdeling maken ");
break;
case 3:
Serial.println("WW 40 Verdeling "); // PKS = 3
lcd.print("WW 40 Verdeling ");
break;
case 4:
Serial.println("WW60 Verdeling "); // PKS = 4
lcd.print("WW 60 Verdeling");
break;
case 5:
Serial.println("WW72 Verdeling "); // PKS = 5
lcd.print("WW 72 Verdeling");
break;
case 6:
Serial.println("WW90 Verdeling "); // PKS = 6
lcd.print("WW 90 Verdeling");
break;
case 7:
Serial.println("Reserve 7 "); // PKS = 7
lcd.print("Reserve 7 ");
break;
case 8:
Serial.println("Reserve 8 "); // PKS = 8
lcd.print("Reserve 7 ");
break;
case 9:
Serial.println("Reserve 9 "); // PKS = 9
lcd.print("Reserve 9 ");
break;
}

// Routine van de 3-Duimwielschakelaars is goed werkend / klaar

DWW = 0;
{
// eerste wiel
digitalWrite(38, HIGH); // 1e Duimwiel lezen 0 t/m 9
digitalWrite(40, LOW);
digitalWrite(42, LOW);

if (digitalRead(A12) == HIGH) {DWW += 1;}// {digitalWrite(12, HIGH);}
if (digitalRead(A13) == HIGH) {DWW += 2;} //{digitalWrite(13, HIGH);}
if (digitalRead(A14) == HIGH) {DWW += 4;} //{digitalWrite(14, HIGH);}
if (digitalRead(A15) == HIGH) {DWW += 8;} //{digitalWrite(15, HIGH);}
// tweede wiel
digitalWrite(38, LOW);
digitalWrite(40, HIGH); // 2e Duimwiel lezen 10 t/m 99
digitalWrite(42, LOW);

if (digitalRead(A12) == HIGH) {DWW += 10;}//{digitalWrite(12, HIGH);}
if (digitalRead(A13) == HIGH) {DWW += 20;}//{digitalWrite(13, HIGH);}
if (digitalRead(A14) == HIGH) {DWW += 40;}//{digitalWrite(14, HIGH);}
if (digitalRead(A15) == HIGH) {DWW += 80;}//{digitalWrite(15, HIGH);}
// derde wiel
digitalWrite(38, LOW);
digitalWrite(40, LOW);
digitalWrite(42, HIGH); // 3e Duimwiel lezen 100 t/m 999

if (digitalRead(A12) == HIGH) {DWW += 100;}//{digitalWrite(12, HIGH);}
if (digitalRead(A13) == HIGH) {DWW += 200;}//{digitalWrite(13, HIGH);}
if (digitalRead(A14) == HIGH) {DWW += 400;}//{digitalWrite(14, HIGH);}
if (digitalRead(A15) == HIGH) {DWW += 800;}//{digitalWrite(15, HIGH);}

}

lcd.setCursor(0,1);
lcd.print(DWW);
Serial.print(DWW); // Tijdelijk laten zien wat de waarde is.
Serial.print(" = "); // Tijdelijk laten zien wat de waarde is.
Serial.println(" DWW "); // Tijdelijk laten zien wat de waarde is.


delay(400);

}

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: duimwielschakelaars

Berichtdoor nicoverduin » 31 Mei 2014, 10:43

Volgens mij ben ik gewoon tegen een betonnen muur aan het schrijven.
Dan moet je overgaan op stap 2: DEBUGGEN :)
Gewoon met serial stap voor stap je het proces volgen en met serial variabelen uitprinten. moet wij ook :)
En verder zal het gewaardeerd worden als je je source tussen de [ code ] en [ /code ] (zonder de spaties) zet dan leest het gemakkelijker voor een ander. Dit nodigt niet uit voor hulp van een ande
r. :mrgreen:

M.a.w. wat heb je al gedugged?
Waarom weiger je nu gewoon die code tags te gebruiken?
Waarom ben je weer doorgegaan met je eigen programma?
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 61
Geregistreerd: 28 Nov 2013, 13:55

Re: duimwielschakelaars

Berichtdoor Redundant » 31 Mei 2014, 11:39

Goedemorgen Nico, de betonnen muur heb ik wel last van ja. ;) 67 jaar en Tia's in de loop der tijd helaas.
Maar ik begrijp niet hoe de unit8_PKS_array werkt, dus ben ik er mee gestopt.
Aangezien het enkele duimwiel wel werkt, wilde ik toch verder gaan op die manier.

Wat betreft de source tussen de
Code: Alles selecteren
 en
zetten weet ik ook niet wat je bedoelt, helaas.
if (digitalRead(A12) == HIGH) {DWW += 1;}// {digitalWrite(12, HIGH);} hier staan wel haakjes en accolade geplaatst.

Debuggen-- programma draaiend gemaakt, alle spaties weggehaald volgens mij.

gr Martin

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: duimwielschakelaars

Berichtdoor nicoverduin » 31 Mei 2014, 20:46

Als je nu voortaan eerst begint met op de knop volledige reactiepagina te klikken zie je een knop met Code in de lijst met knoppen. Als je op die knop drukt dan zie je code en /code tussen vierkante haken staan. als je daar tussen beide woorden je source zet dan blijft alles in de indeling staan zoals in de Arduino editor en maakt het een stuk leesbaarder.
Code: Alles selecteren
uint8_t PKS_array[]

is een andere benadering om de wielen te lezen. In feite is elk wiel hetzelfde en door ze in een tabel te gooien kun je met een enkele code de handelingen uitvoeren per wiel. Je hoeft alleen maar de index te veranderen voor het volgende wiel.
In jouw geval voor wat betreft de waardes:
Heb jij wel eens gemeten of de schakelaars het wel goed doen? Dus meten of de pinnen wel echt hoog (of laag)zijn?
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 61
Geregistreerd: 28 Nov 2013, 13:55

Re: duimwielschakelaars

Berichtdoor Redundant » 01 Jun 2014, 11:05

Dag Nico, de code gebruikt, wist ik niet uiteraard. Nu is het goed neem ik aan?
Inderdaad, de GND zat los. :oops: :oops: :oops: DWSW werkt nu ook weer uitstekend.

De uint8_t PKS_array[] ga ik nogmaals uitproberen, kom ik op terug.

Bedankt voor het meedenken. Martin.





Code: Alles selecteren
// http://www.brainstorm-vzw.be/stappenmotor/
// Webside met uitleg Stappenmotor.

// Arduino MEGA_2560
// Programma voor verdeeltafel-aansturing met 4_draden stappenmotor // en LCD_scherm ?
// Verdeeltafel kan met 4/60/72/90 verhouding zijn.

// Bediening
int Aan = 0; // Led Blauw betekend Schakeling = Aan TESTLED = Poort 13
int Uit = 0; // Alles Uit Kan ook rechtstreeks van Schakelaar

// LCD Scherm
// #include<Wire.h>
//  #include(Mat.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(48, 49, 47, 46, 45, 44); // select the pins used on the LCD panelLiquidCrystal
//int backLight = 10; // LCD Panel Backlight LED connected to digital pin 10
//int LightLevel = 255; // Initialise light full on

// ProgrammaKeuze_schakelaar voor Nr.1= GRaden opgave Nr.2 = Verdeling opgeven Verhouding 3,4,5 = 40/60/72/90 of 6 t/m 0 = reserve

int PKSNul = 0; // Nul Geen ProgrammaKeuze gemaakt
int PKSGR = 0; // 1 Graden opgeven
int PKSVd = 0; // 2 Verdeling opgeven
int PKS40 = 0; // 3 Verdeelapparaat 1:40
int PKS60 = 0; // 4 Verdeelapparaat 1:60
int PKS72 = 0; // 5 Verdeelapparaat 1:72
int PKS90 = 0; // 6 Verdeelapparaat 1:90
int PKS_Res7 = 0; // 7 Reserve
int PKS_Res8 = 0; // 8 Reserve
int PKS_Res9 = 0; // 9 Reserve

// Programma Keuze maken
int PKS = 0; // Waarde ProgrammaKeuzeSchakelaar
int PKS1 = A8; // Blauw ProgrammaKeuzeSchakelaar Single_Duimwiel
int PKS2 = A9; // Paars ProgrammaKeuzeSchakelaar Single_Duimwiel
int PKS4 = A10; // Grijs ProgrammaKeuzeSchakelaar Single_Duimwiel
int PKS8 = A11; // Wit ProgrammaKeuzeSchakelaar Single_Duimwiel

// aantal Bewerkingen opgeven / vastleggen met 3-Duimwielschakelaars 000 t/m 999
int DWW = 0; // Totaalwaarde set van 3-Duimwielschakelaars
int DWS1 = A12; // Paars  Bepalen aantal bewerkingen met 3_voudige Duimwiel
int DWS2 = A13; // Blauw  Bepalen aantal bewerkingen met 3_voudige Duimwiel
int DWS4 = A14; // Groen  Bepalen aantal bewerkingen met 3_voudige Duimwiel
int DWS8 = A15; // Geel  Bepalen aantal bewerkingen met 3_voudige Duimwiel

int ledPinAU = 12; // 12PWM Led Blauw Aan/Uit
int TestLed = 13; // 13PWM Led TestLed ROOD

// Stappenmotor
int ledPinRM = 2; // 2PWM Led Rood Stappenmotor draait (Revolution_Motor)
int ledPinSR = 3; // 3PWM Led Groen Stappenmotor staat (Ready) klaar voor opdracht

int dirpin = 0; // 22digitaal Draairichting Stappenmotor
int steppin = 0; // 24digitaal Aantal stappen
int Speedpin = 0; // 26digitaal Snelheid stappenmotor
int HoHT = 0; // Aantal stappen per Tand (Hart op Hart afstand)

void setup() {

   pinMode(13, OUTPUT); // TestLed

   pinMode(ledPinSR, OUTPUT); // 3PWM Groene Led, Stappenmotor klaar voor nieuw signaal
   pinMode(ledPinRM, OUTPUT); // 2PWM Rode Led, stappenmotor draait

// Programmakeuze enkel Duimwiel
// Common = rechtstreeks van 5V
   pinMode(A8,  INPUT); // PKS1 Blauw 
   pinMode(A9,  INPUT); // PKS2 Paars 
   pinMode(A10, INPUT); // PKS4 Grijs 
   pinMode(A11, INPUT); // PKS8 Wit 

// Aantallen Opgave 3-Duimwielen
// 3 X Common
   pinMode(38, OUTPUT); //Rood=C van 1e/3 DuimwielSchakelaar
   pinMode(40, OUTPUT); //Geel=C van 2e/3 DuimwielSchakelaar
   pinMode(42, OUTPUT); //Oranje=C van 3e/3 DuimwielSchakelaar

   pinMode(A12, INPUT); //A12 Paars
   pinMode(A13, INPUT); //A13 Blauw
   pinMode(A14, INPUT); //A14 Groen
   pinMode(A15, INPUT); //A15 Geel

   pinMode(22, OUTPUT); // 22PWM  // dirpin = draairichting
   pinMode(24, OUTPUT); // 24PWM  // Aantal stappen
   pinMode(26, OUTPUT); // 26PWM  //  Snelheid
   
   Serial.begin(9600);
}

void loop() {
//  LCD
  {
      lcd.begin(16, 2);              // start the LCD library
  }

// Routine Keuze Programma maken is klaar ?
 PKS = 0;
   {     
      if (digitalRead(A8)  == HIGH) {PKS += 1;}{digitalWrite(8, HIGH);}     
      if (digitalRead(A9)  == HIGH) {PKS += 2;}{digitalWrite(9, HIGH);}     
      if (digitalRead(A10) == HIGH) {PKS += 4;}{digitalWrite(10, HIGH);}           
      if (digitalRead(A11) == HIGH) {PKS += 8;}{digitalWrite(11, HIGH);}   }
   
   Serial.print(PKS);
   Serial.print(" = "); // sends switch value to serial monitor box
   Serial.println(" PKS"); // sends switch value to serial monitor box 


   switch (PKS) { // Routine Case = OK switch(PKS)
delay(30);
   case 0:
      Serial.println("Maak Keuze "); // PKS = stand Nul
      lcd.print("Maak Keuze ");
      break;
   case 1:
      Serial.println("Graden opgeven "); // PKS = 1
      lcd.print("Graden opgeven ");
      break;
   case 2:
      Serial.println("Verdeling maken "); // PKS = 2
      lcd.print("Verdeling maken ");
      break;
   case 3:
      Serial.println("WW 40 Verdeling "); // PKS = 3
      lcd.print("WW 40 Verdeling ");
      break;
   case 4:
      Serial.println("WW60 Verdeling "); // PKS = 4
      lcd.print("WW 60 Verdeling");
      break;
   case 5:
      Serial.println("WW72 Verdeling "); // PKS = 5
      lcd.print("WW 72 Verdeling");
      break;
   case 6:
      Serial.println("WW90 Verdeling "); // PKS = 6
      lcd.print("WW 90 Verdeling");
      break;
   case 7:
      Serial.println("Reserve 7 "); // PKS = 7
     lcd.print("Reserve 7 ");
      break;
   case 8:
      Serial.println("Reserve 8 "); // PKS = 8
      lcd.print("Reserve 7 ");
      break;
   case 9:
      Serial.println("Reserve 9 "); // PKS = 9
      lcd.print("Reserve 9 ");
      break;
   }

// Routine van de 3-Duimwielschakelaars is goed werkend / klaar

   DWW = 0;
   {
// eerste wiel
    digitalWrite(38, HIGH); // 1e Duimwiel lezen 0 t/m 9
    digitalWrite(40, LOW); 
    digitalWrite(42, LOW);

      if (digitalRead(A12) == HIGH) {DWW += 1;}// {digitalWrite(12, HIGH);}
      if (digitalRead(A13) == HIGH) {DWW += 2;} //{digitalWrite(13, HIGH);}
      if (digitalRead(A14) == HIGH) {DWW += 4;} //{digitalWrite(14, HIGH);}
      if (digitalRead(A15) == HIGH) {DWW += 8;} //{digitalWrite(15, HIGH);}
// tweede wiel
    digitalWrite(38, LOW);
    digitalWrite(40, HIGH); // 2e Duimwiel lezen 10 t/m 99
    digitalWrite(42, LOW);

      if (digitalRead(A12) == HIGH) {DWW += 10;}//{digitalWrite(12, HIGH);}
      if (digitalRead(A13) == HIGH) {DWW += 20;}//{digitalWrite(13, HIGH);}
      if (digitalRead(A14) == HIGH) {DWW += 40;}//{digitalWrite(14, HIGH);}
      if (digitalRead(A15) == HIGH) {DWW += 80;}//{digitalWrite(15, HIGH);}
// derde wiel
    digitalWrite(38, LOW);
    digitalWrite(40, LOW);
    digitalWrite(42, HIGH); // 3e Duimwiel lezen 100 t/m 999

      if (digitalRead(A12) == HIGH) {DWW += 100;}//{digitalWrite(12, HIGH);}
      if (digitalRead(A13) == HIGH) {DWW += 200;}//{digitalWrite(13, HIGH);}
      if (digitalRead(A14) == HIGH) {DWW += 400;}//{digitalWrite(14, HIGH);}
      if (digitalRead(A15) == HIGH) {DWW += 800;}//{digitalWrite(15, HIGH);}

   }
 
    lcd.setCursor(0,1);
    lcd.print(DWW);
   Serial.print(DWW); // Tijdelijk laten zien wat de waarde is.
   Serial.print(" = "); // Tijdelijk laten zien wat de waarde is.
   Serial.println(" DWW "); // Tijdelijk laten zien wat de waarde is.
 

   delay(400);

}

Berichten: 61
Geregistreerd: 28 Nov 2013, 13:55

Re: duimwielschakelaars

Berichtdoor Redundant » 17 Aug 2014, 19:54

Hallo Nico, bedankt voor de reactie. Nu ben ik weer een heel eind verder gekomen.
Nu weer een vraagje, hoe kan de laatste tekst op het scherm blijven staan?

En is het mogelijk om met een drukknop weer terug te keren naar een bepaalde void of desnoods naar het begin van het programma?
gr, Martin



[code2=]

// LCD Scherm
#include <LiquidCrystal.h>
LiquidCrystal lcd(48, 49, 47, 46, 45, 44); // select the pins used on the LCD panelLiquidCrystal
int backLight = 200; // LCD Panel Backlight LED connected to digital pin 10
int LightLevel = 255; // Initialise light full on



int aan=0;
int Uit=0;
int Ge=0;
int Geaan=0;
int Geuit=0;
int Ro=0;
int Roaan=0;
int Rouit=0;

void setup(){ // setup begin //======================================
Serial.begin(9600);

pinMode(10, OUTPUT);
pinMode(11, OUTPUT); // Led 2
pinMode(12, OUTPUT);
pinMode(13, OUTPUT); // Standaard Led


LedAan(13); // Standaard Led aan
// delay(1000);
LedUit(13); // Standaard Led uit
// delay(1000);
PKSge_aan(10); // Led 2 Gele Led aan
// delay(1000);
PKSge_uit(10); // Led 2 Gele Led uit
// delay(1000);
PKSRo_aan(11); // Led 2 Gele Led aan
// delay(1000);
PKSRo_uit(11); // Led 2 Gele Led uit
// delay(1000);

Show(); // Printen om te testen
delay(1000);

} // setup eind //===================================================


void loop() { // void loop() begin //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
{
//LCD
lcd.begin(16,2); // Start Lcd Library
}
} // void loop() eind //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// ==========================================
void LedAan(int lampje) { // Standaard Led
lcd.setCursor(0,1);
digitalWrite(lampje, HIGH);
lcd.print("Led aan");
lcd.print(" ");
// Serial.println("Led aan ");
delay(1000);
aan=1;
}

void LedUit(int lampje) { // Standaard Led
lcd.setCursor(0,1);
lcd.print("Led Uit");
lcd.print(" ");
digitalWrite(lampje, LOW);
delay(1000);
Uit=2;
}

// ==========================================
void PKSge_aan(int Geel) { // Led 2 aan
lcd.setCursor(0,1);
lcd.print("Geel aan");
lcd.print(" ");
digitalWrite(Geel, HIGH);
delay(1000);
Geaan=3;
}

void PKSge_uit(int Geel) { // Led 2 uit
lcd.setCursor(0,1);
lcd.print("Geel uit");
lcd.print(" ");
digitalWrite(Geel, LOW);
delay(1000);
Geuit=4;
}


// ===========================================

void PKSRo_aan(int Rood) { // Led 2 aan
lcd.setCursor(0,1);
lcd.print("Rood aan");
lcd.print(" ");
digitalWrite(Rood, HIGH);
delay(1000);
Roaan=5;
}

void PKSRo_uit(int Rood) { // Led 2 uit
lcd.setCursor(0,1);
lcd.print("Rood uit");
lcd.print(" ");
digitalWrite(Rood, LOW);
delay(1000);
Rouit=6;
}

// ===========================================

void Show() // Begin Printen om te testen
{
Serial.print ("Show ");
Serial.println (" ");

Serial.print (aan);
Serial.println (" = TestLed aan, ");
Serial.print (Uit);
Serial.println (" = TestLed uit, ");
Serial.print (Geaan);
Serial.println (" = Geel aan ");
Serial.print (Geuit);
Serial.println (" = Geel uit ");
Serial.print (Roaan);
Serial.println (" = Rood aan ");
Serial.print (Rouit);
Serial.println (" = Rood uit ");
Serial.println ("Einde Programma ");
lcd.setCursor(0,1);
lcd.print("Einde Programma ");
} // Einde Printen om te testen
[/code2]

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: duimwielschakelaars

Berichtdoor nicoverduin » 17 Aug 2014, 21:03

Martin je moet bij die code tags code2=cpp zetten dan krijg je deze listing.
cpp code
// LCD Scherm
#include <LiquidCrystal.h>
LiquidCrystal lcd(48, 49, 47, 46, 45, 44); // select the pins used on the LCD panelLiquidCrystal
int backLight = 200; // LCD Panel Backlight LED connected to digital pin 10
int LightLevel = 255; // Initialise light full on



int aan=0;
int Uit=0;
int Ge=0;
int Geaan=0;
int Geuit=0;
int Ro=0;
int Roaan=0;
int Rouit=0;

void setup(){ // setup begin //======================================
Serial.begin(9600);

pinMode(10, OUTPUT);
pinMode(11, OUTPUT); // Led 2
pinMode(12, OUTPUT);
pinMode(13, OUTPUT); // Standaard Led


LedAan(13); // Standaard Led aan
// delay(1000);
LedUit(13); // Standaard Led uit
// delay(1000);
PKSge_aan(10); // Led 2 Gele Led aan
// delay(1000);
PKSge_uit(10); // Led 2 Gele Led uit
// delay(1000);
PKSRo_aan(11); // Led 2 Gele Led aan
// delay(1000);
PKSRo_uit(11); // Led 2 Gele Led uit
// delay(1000);

Show(); // Printen om te testen
delay(1000);

} // setup eind //===================================================


void loop() { // void loop() begin //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
{
//LCD
lcd.begin(16,2); // Start Lcd Library
}
} // void loop() eind //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// ==========================================
void LedAan(int lampje) { // Standaard Led
lcd.setCursor(0,1);
digitalWrite(lampje, HIGH);
lcd.print("Led aan");
lcd.print(" ");
// Serial.println("Led aan ");
delay(1000);
aan=1;
}

void LedUit(int lampje) { // Standaard Led
lcd.setCursor(0,1);
lcd.print("Led Uit");
lcd.print(" ");
digitalWrite(lampje, LOW);
delay(1000);
Uit=2;
}

// ==========================================
void PKSge_aan(int Geel) { // Led 2 aan
lcd.setCursor(0,1);
lcd.print("Geel aan");
lcd.print(" ");
digitalWrite(Geel, HIGH);
delay(1000);
Geaan=3;
}

void PKSge_uit(int Geel) { // Led 2 uit
lcd.setCursor(0,1);
lcd.print("Geel uit");
lcd.print(" ");
digitalWrite(Geel, LOW);
delay(1000);
Geuit=4;
}


// ===========================================

void PKSRo_aan(int Rood) { // Led 2 aan
lcd.setCursor(0,1);
lcd.print("Rood aan");
lcd.print(" ");
digitalWrite(Rood, HIGH);
delay(1000);
Roaan=5;
}

void PKSRo_uit(int Rood) { // Led 2 uit
lcd.setCursor(0,1);
lcd.print("Rood uit");
lcd.print(" ");
digitalWrite(Rood, LOW);
delay(1000);
Rouit=6;
}

// ===========================================

void Show() // Begin Printen om te testen
{
Serial.print ("Show ");
Serial.println (" ");

Serial.print (aan);
Serial.println (" = TestLed aan, ");
Serial.print (Uit);
Serial.println (" = TestLed uit, ");
Serial.print (Geaan);
Serial.println (" = Geel aan ");
Serial.print (Geuit);
Serial.println (" = Geel uit ");
Serial.print (Roaan);
Serial.println (" = Rood aan ");
Serial.print (Rouit);
Serial.println (" = Rood uit ");
Serial.println ("Einde Programma ");
lcd.setCursor(0,1);
lcd.print("Einde Programma ");
} // Einde Printen om te testen
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: duimwielschakelaars

Berichtdoor nicoverduin » 17 Aug 2014, 21:07

Nu wat eerste reacties:
lcd.begin hoort in de setup thuis. die routine wordt 1 x voor het hele programma gedraaid. De functie loop () (en dus niet void. Dit begint een slecht aangeleerde gewoonte te worden die je nog eens opbreekt blijft eindeloos draaien totdat de UNO wordt uitgezet of reset wordt ingedrukt.
Dus als je iets wilt herhalen zet je dat in loop().
Als iets nodig is bij het opstarten van het programma en eenmalig uitgevoerd moet worden dan zet je dat in setup().

en dan mag je nu naar de structuur van je programma kijken.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

VorigeVolgende

Terug naar Overige hardware

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 6 gasten