werken met uitkomsten in seriële monitor

Hallo,
Ik ben aan het werken/experimenteren met een pot meter en met de waardes die ik dan zie in/op de seriële monitor.
Verschillende waardes van de potmeter optellen en aftrekken lukt me aardig, ik krijg de uitkomst mooi te zien op de monitor, hieronder een stukje van de code.
verschil = meetwaarde[0] - meetwaarde[1];

  • Serial.print("Verschil is: ");*
    _ Serial.println(verschil*);_
    verschil[o] = meetwaarde[0] - meetwaarde[1];
    _
    Serial.print("Verschil is: ");_
    _
    Serial.println(verschil[o]);_
    zoals je ziet trek ik 2 meetwaardes van elkaar af en die geven een som, deze som wordt geprint in de seriële monitor, dezelfde meetwaardes komen terug en de som wordt opnieuw gemaakt.
    Nu zou ik graag met de sommen (verschil ) en (verschil [o]) ook verder werken, ik heb al een paar zaken geprobeerd maar het lukt niet.
    Zo zou ik graag beide sommen vergelijken en afhankelijk van de uitkomst een volgende actie plannen.
    Als ik schrijf: if (verschil ) == (verschil [o]) {
    _ digitalWrite (ledPin, HIGH);
    }*

    Dan geeft dit niet het gewenste resultaat, ik heb de indruk dat men de wisselende waarde/uitkomst sommen en [o] niet herkent in mijn geschreven code, vergelijken gaat dus ook niet denk ik dan.
    heeft er iemand een tip?
    bedankt, groeten Gert_

ik zie net dat mijn tekst helemaal niet klopt zoals ik hem had geschreven, dus ik doe een nieuwe poging:

Ik ben dus aan het werken/experimenteren met een pot meter en met de waardes die ik dan zie in/op de seriële monitor.
Verschillende waardes van de potmeter optellen en aftrekken lukt me aardig, ik krijg de uitkomst mooi te zien op de monitor, hieronder een stukje van de code.

verschil = meetwaarde[0] - meetwaarde[1];

  • Serial.print("Verschil is: ");*
    _ Serial.println(verschil*);*_
    Op deze manier krijg ik verschillende keren een som te zien op de monitor, dat krijg ik werkende.
    Nu zou ik graag met de uitkomst van die sommen verder werken, bv de sommen met elkaar vergelijken en afhankelijk van die vergelijking een volgende actie laten uitvoeren.
    *Ik heb echter de indruk dat mijn code *
    *if verschil (1) == verschil (2) *
    de waarde van de som niet herkent, ermee werken (of vergelijken) is dus niet mogelijk.
    Heeft er iemand een tip?
    De hele code hier zetten is nogal lastig want ik moet die nog opkuisen en dat doe ik pas als ik de code helemaal af heb (wacht ik nog even mee want ik ben bang dat ik iets wis wat niet weg mag ;D)

Plaats code tussen
** **[code]** **
en
** **[/code]** **
.

Plaats je volledige code.

Het is normaal om voor een project een stuk of wat kleine test-sketchen te maken.
Kun je een kleine sketch maken die het probleem laat zien ?
Je sketch kun je tussen code-tags zetten, dat is met de </> knop. Dan krijg je < code > en < / code > (maar dan zonder de spaties), daartussen zet je de sketch.

De potmeter geeft een vast waarde af. Het is niet nodig om steeds de verschillen bij te houden.
Als je wilt weten of er aan de potmeter gedraaid wordt, dan kun je de potmeter lezen met een vaste interval. Bijvoorbeeld 5 keer per seconde. Dan kun je het verschil berekenen en de absolute waarde (positief getal) van het verschil nemen. Als die boven een grens komt, dan weet je dat er aan de potmeter gedraaid wordt.

Een potmeter aan een analog ingang heeft vaak wat ruis. Het testen op precies een bepaalde waarde is nauwelijks mogelijk.

Hallo,

Hieronder mijn code, mijn led zou moeten branden als ik twee keer na elkaar dezelfde som heb gehad.
en dat doet hij dus niet :).
ziet iemand wat ik moet/kan aanpassen?

const int buttonPin = 2;
const int ledPin = 13;
const int analoog = A0;

bool checkDrukknop;
bool checkLed;
int test = 0;
int sensorWaarde = 0;

int meetwaarde[10];
int verschil[1];

void setup() {
pinMode (buttonPin, INPUT);
pinMode (ledPin, OUTPUT);
pinMode (analoog, INPUT);
Serial.begin(9600);
}

void loop() {
{
digitalWrite (ledPin, LOW);
delay(1);
checkDrukknop = digitalRead(buttonPin);
if (checkDrukknop == 1 && test == 0) {
delay(1);
meetwaarde[0] = analogRead(analoog);
Serial.println(meetwaarde[0]);
test = 1;
delay(500);
}
checkDrukknop = digitalRead(buttonPin);
if (checkDrukknop == 1 && test == 1) {
delay(1);
meetwaarde[1] = analogRead(analoog);
Serial.println(meetwaarde[1]);
test = 2;
verschil[0] = meetwaarde[0] - meetwaarde[1];
Serial.print("Verschil is: ");
Serial.println(verschil[0]);

delay(500);
}
checkDrukknop = digitalRead(buttonPin);
if (checkDrukknop == 1 && test == 2) {
delay(1);
meetwaarde[0] = analogRead(analoog);
Serial.println(meetwaarde[0]);
test = 3;
delay(500);
}
checkDrukknop = digitalRead(buttonPin);
if (checkDrukknop == 1 && test == 3){
delay(1);
meetwaarde[1] = analogRead(analoog);
Serial.println(meetwaarde[1]);
test = 0;
verschil[1] = meetwaarde[0] - meetwaarde[1];
Serial.print("Verschil is: ");
Serial.println(verschil[1]);

delay(500);
}
if (verschil[0]== verschil[1] ) {
digitalWrite (ledPin, HIGH);
}
else {
return;
}}}

In je loop() zitten te veel accolades. Dat is toegestaan, maar het staat een beetje raar.

void loop()
{
  {
    // jouw code
  }
}

Je gebruikt allerlei verschillende dingen door elkaar heen.
Een digitalRead() geeft een ‘int’ terug. Je mag ook een ‘byte’ gebruiken. Jij gebruikt een ‘bool’, dat is vreemd.
Vervolgens vergelijk je die ‘bool’ met ‘1’. Dat is ook vreemd, de ‘bool’ is ‘true’ of ‘false’ en de digitalRead() geeft een ‘HIGH’ of ‘LOW’ terug.

Dit is normaal:

int checkDrukknop = digitalRead(buttonPin);
if (checkDrukknop == HIGH && test == 0)
{

Er bestaat geen ‘verschil[1]’, je array heeft maar één element.
Een int appel[1] bestaat uit appel[0] en meer niet.
Een int peer[100] bestaat uit peer[0] tot en met peer[99] (inclusief).

Het is niet gebruikelijk om een ‘return’ in de loop() te doen.

Kun in de Arduino IDE eens op Ctrl+T drukken, en het dan zelf nog wat netter maken. Als je zelf een andere stijl van de code wilt, dan kun dat in een bestand zetten, in de map die bij de ‘Voorkeuren’ genoemd staat.

Het spijt me, maar ik begrijp helaas niet wat je wilt maken. Wil je met de drukknop de analoge waarden opslaan ? of wil je alleen vergelijken met de vorige keer ?
Bij een Arduino sketch is het gebruikelijk om de loop() zo vaak mogelijk te laten uitvoeren en om bijvoorbeeld maar één keer de stand van een knop op te vragen met digitalRead().

Misschien kun je hier eens naar kijken: https://www.arduino.cc/en/Tutorial/BuiltInExamples/StateChangeDetection.
Dat zou een goede toevoeging kunnen zijn.

ik weet het, daarom dat ik de code ook eerst nog niet wou plaatsen, ik ben beginner en heb van alles door elkaar geprobeerd.
Als ik wat wis heb ik schrik dat het niet meer werkt tot het punt dat ik nu al heb. De code oppoetsen wou ik doen eens ik mijn doel bereikt had 8)
Wat ik wil doen is:
ik lees een waarde bij het indrukken van de knop, ik lees nog een waarde bij het loslaten van de knop, hiervan wordt het verschil berekend, deze actie doe ik twee keer.
Dit werkt met mijn code :smiley:
vervolgens moet het berekende verschil vergeleken worden, als dit twee keer hetzelfde is dan zou de LED moeten gaan branden, en dat lukt met dus niet.

als dit niet twee keer hetzelfde is dan moet de loop herbeginnen totdat er twee keer eenzelfde "verschil" gezien is en de led dus gaat branden

ik zie in je antwoord dat dit logisch is omdat mijn array maar 1 element heeft?
hoe kan ik dit dan anders schrijven?

Okay, ik denk dat dat ik het begrijp :confused:

Kun je alles doen wat ik schreef en je sketch weer laten zien ?
Een array met twee element maak je met int mijnArray[2];, en die heeft de elementen mijnArray[0] en mijnArray[1].

Heb je die State Change Detection bekeken ?
Dan kun je kijken wanneer een knop wordt ingedrukt en wanneer een knop wordt losgelaten. Nu gebruik je daar delay() voor, dat is ook maar een beetje hopen dat je op tijd de knop los laat :frowning:

Je kunt doen zoals nu, en de hele cyclus in de loop() zetten en die achter elkaar uitvoeren.
Je kunt ook de loop() steeds opnieuw laten uitvoeren en iedere keer maar één deel van de cyclus uitvoeren.

hallo,

De reden waarom ik het niet werkende kreeg kon ik dus oplossen met mijnArray, hartelijk dank, ik heb het werkende gekregen.
ik heb gekeken naar de State change detection maar dat moet ik nog eens goed lezen ;D.
voorlopig werkt het en de volgende keer ga ik de code oppoetsen.
nogmaals bedankt,

Groeten Gert

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.