Go Down

Topic: Potmeter analoge waarden controleren (Read 428 times) previous topic - next topic

Eurosprinter

May 26, 2014, 03:14 pm Last Edit: May 26, 2014, 03:19 pm by Eurosprinter Reason: 1
Hallo,

Ik wil 4 potmeters testen, zodat alle waarden (0-1023) gecontroleerd worden.  Ik had al opzetje gemaakt, maar
deze is niet waterdicht. Als je voor het testen de potmeter opendraait, wordt tijdens het testen de potmeter gelijk
goedgekeurd.
Ik wil dat echt dat de potmeter van 0 tot 1023 open gedraaid moet worden. Dan pas mag het programma naar de volgende stap.
Waarschijnlijk moet ik iets doen met For Loop, ik heb hier al mee lopen frotten maar het lukt niet.

Een deel van de huidige opzet:
Code: [Select]
case 40: //Potmeter1 RV1
    valPot1 = 0; //beginwaarde van valPot1
    Potmeter1 = analogRead(Pin_ai_Potmeter1); //De analoge ingang wordt uitgelezen door Potmeter1
    ++valPot1 = Potmeter1; //De waarde wordt bij valPot1 opgeteld en houdt de waarde vast bij 1023
    if (valPot1 == 1023) { //Als valPot1, de waarde 1023 bereikt heeft dan:
      Serial.println("Potmeter RV1 = OK");
      Stap = 41; //programma kan naar Stap 41
    }
    else {
      if (valPot1 != 1023 && BinWaarde3 > 1) {
        Serial.println("Potmeter RV1 = niet OK");
        Stap = 41;
      }
    }
    break;

case 41: //Potmeter2 RV2
    valPot2 = 0;
    Potmeter2 = analogRead(Pin_ai_Potmeter2);
    ++valPot2= Potmeter2;
    if (valPot2 == 1023) {
      Serial.println("Potmeter RV2  = OK");
      Stap = 42;
    }
    else {
      if (valPot2 != 1023 && BinWaarde3 > 2) {
        Serial.println("Potmeter RV2  = niet OK");
        Stap = 42;
      }
    }
    break;


Hopelijk is het voor sommige duidelijk wat ik wil doen, hopelijk kunnen jullie mij helpen.

tomsegers

hallo,

op wat initialiseer je ++valpot1 en ++valpot2??

groet, tom

Jantje

1)Ik snap niet zo goed wat je wilt testen.
2) wegens afwijkingen in de electronica (potmeter, ADC poort, ....) is er geen garantie dat je ooit 0 of 1023 leest van analogRead.
3)Ik weet echt niet wat je wil bereiken met
Code: [Select]
++valPot1 = Potmeter1;
Voor zover ik het begrijp is dit gelijk aan
Code: [Select]
valPot1 = valPot1+1;
valPot1 = Potmeter1;


dit stukje code
Code: [Select]
    valPot1 = 0; //beginwaarde van valPot1
    Potmeter1 = analogRead(Pin_ai_Potmeter1); //De analoge ingang wordt uitgelezen door Potmeter1
    ++valPot1 = Potmeter1; //De waarde wordt bij valPot1 opgeteld en houdt de waarde vast bij 1023
    if (valPot1 == 1023) { //Als valPot1, de waarde 1023 bereikt heeft dan:

is dan gelijk aan
Code: [Select]
    Potmeter1 = analogRead(Pin_ai_Potmeter1);
    valPot1 = Potmeter1;
    if (valPot1 == 1023) {

waarbij de behoefte van valPot1 wegvalt en je even goed kan schrijven
Code: [Select]
    Potmeter1 = analogRead(Pin_ai_Potmeter1);
    if (Potmeter1 == 1023) {


Verder heb je maar een stukje code gepost (waarom???????) waardoor ik geen idee heb waar BinWaarde3 voor staat (kon je geen betere naam verzinnen?) en ik ook niet verder kan helpen.

Met vriendelijke groet
Jantje

Do not PM me a question unless you are prepared to pay for consultancy.
Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -

robtillaart

#3
May 26, 2014, 05:44 pm Last Edit: May 26, 2014, 05:48 pm by robtillaart Reason: 1
Maak loop die test of de potwaarde tussen i en i+10 ligt

Code: (experimental at best) [Select]
for (int i=0; i<1014;)
{
 int x = analogRead(A0);
 if ((i <= x) && x < (1+10))  i = i+10;
}

bedenk wel dat dit extreme blocking code kan zijn / is.

Je kan de stapgrootte ook kleiner of groter maken.
huiswerk: schrijf een generieke functie met variabele stapgrootte. :)
Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

MAS3

Hoi en welkom.


Ik vermoed dat je hier een soort van calibratie wil doen, om te compenseren voor externe omstandigheden (zoals temperatuur), of om te zien of de potmeter nog wel goed is.
Je meetbereik is van 0 tot 1023.
Maar als er iets fout gaat (een mechanische fout betekent vaak een onderbreking in de weerstandsbaan), dan zal je waarde óf 0 óf 1023 worden.
Uiteraard zijn er wel andere resultaten mogelijk bij fouten, maar het is maar de vraag of je dat op een dergelijke wijze gaat "vangen".

Quote from: Jantje

wegens afwijkingen in de electronica (potmeter, ADC poort, ....) is er geen garantie dat je ooit 0 of 1023 leest van analogRead.


Je kunt nu een beetje van de meetwaardes weggooien, om een calibratie te doen.
Dan zet je voor en na je potmeter een extra weerstand (van een lage waarde).
Dus tussen 5 volt en potmeter, en tussen GND en potmeter een weerstand.
Dat kost je wel een stukje bereik, maar je kunt zo dus wel goed vaststellen wat de slag van je potmeter doet en kun je dus omgaan met waar Jantje je hierboven op wijst.
Een breuk in de weerstandsbaan zal dan nog steeds 0 of 1023 opleveren, en zal tijdens het verdraaien van de potmeter een plotselinge omslag laten zien (geldt ook als er geen extra weerstanden worden gebruikt).

Overigens is het van groot belang dat je er voor zorgt dat de voedingsspanning stabiel is.
Anders krijg je alsnog afwijkingen in je metingen.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

Go Up