Beste Tweakers!
op het moment ben ik bezig met een hobby project en probeer ik een eigen module te maken die mijn frequentieregelaar kan aansturen. Op deze module zit een lcd scherm en een encoder.
Met behulp van de encoder wil ik graag door een menu op het lcd schermpje kunnen scrollen.
Alleen het lukt mij niet om de encoder zo te programmeren dat hij netjes op en af telt. de uitkomst is niet stabiel en springt veel op en neer.
Op het internet zijn natuurlijk veel voorbeelden te vinden van een encoder alleen bij dit project wil ik graag dat als een getal boven een waarde komt dat ie dan weer naar nul gaat. en andersom van minimale naar maximale waarde. zodat ik als het waarde door. Ik hoop dat de flowchart hieronder duidelijkheid schept.
https://stefan787.stackstorage.com/s/PcfW8cZo5f5gB1U
uiteindelijk wil ik van de code die ik heb een functie maken zodat ik de
dit is het overzicht van de opbouw van het uiteidelijke display:
https://stefan787.stackstorage.com/s/XMlnuzcbnCIczG7
Als ik dan bij Set RPM CW sta en ik klik dan op de schakelaar van de encoder dat ik dan vervolgens aan de encoder kan draaien en een toerental kan instellen.
Dan moeten de volgende waarde:
maar hiervoor heb ik eerste een goed werkende encoder nodig.
dit is de code die ik nu heb staan:
Ik hoop dat iemand er naar kan kijken en mij kan helpen, ik ben hier namelijk al eigenlijk al te lang mee bezig wordt er nu een beetje
van.
Alvast bedankt!!
op het moment ben ik bezig met een hobby project en probeer ik een eigen module te maken die mijn frequentieregelaar kan aansturen. Op deze module zit een lcd scherm en een encoder.
Met behulp van de encoder wil ik graag door een menu op het lcd schermpje kunnen scrollen.
Alleen het lukt mij niet om de encoder zo te programmeren dat hij netjes op en af telt. de uitkomst is niet stabiel en springt veel op en neer.
Op het internet zijn natuurlijk veel voorbeelden te vinden van een encoder alleen bij dit project wil ik graag dat als een getal boven een waarde komt dat ie dan weer naar nul gaat. en andersom van minimale naar maximale waarde. zodat ik als het waarde door. Ik hoop dat de flowchart hieronder duidelijkheid schept.
https://stefan787.stackstorage.com/s/PcfW8cZo5f5gB1U
uiteindelijk wil ik van de code die ik heb een functie maken zodat ik de
per pagina op het display kan aan passen.MaxValue, MinValue en StepSize
dit is het overzicht van de opbouw van het uiteidelijke display:
https://stefan787.stackstorage.com/s/XMlnuzcbnCIczG7
Als ik dan bij Set RPM CW sta en ik klik dan op de schakelaar van de encoder dat ik dan vervolgens aan de encoder kan draaien en een toerental kan instellen.
Dan moeten de volgende waarde:
3000, 250 en 50 worden.MaxValue, MinValue en StepSize
maar hiervoor heb ik eerste een goed werkende encoder nodig.
dit is de code die ik nu heb staan:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
| /* Name: Main_V0.ino Created: 10/1/2018 5:12:10 PM Author: Stefan de Kraker Flow chart: https://www.draw.io/#LFlow_Menu_frequentieregelaar.xml */ // encoder setup const int OutputA = 2; const int OutputB = 4; const int OutputSW = 3; int EncoderVal = 0; // setup RPM int Waarde = 0; static int MaxValue = 3000; static int MinValue = 250; // setup Menu int MenuLevel = 0; void setup() { pinMode(7, OUTPUT); pinMode(OutputA, INPUT); pinMode(OutputB, INPUT); pinMode(OutputSW, INPUT); digitalWrite(OutputSW, HIGH); Serial.begin(9600); } void loop() { int change = getEncoderTurn(); EncoderVal = EncoderVal + change; overflow(1,6,1); }; int getEncoderTurn() { static int oldA = HIGH; static int oldB = HIGH; int result = 0; int newA = digitalRead(OutputA); int newB = digitalRead(OutputB); if (newA != oldA || newB != oldB) { if (oldA == HIGH && newA == LOW) { result = (oldB * 2 - 1); //Serial.println("EncoderVal: "); //Serial.println(EncoderVal); Serial.println(Waarde); } } oldA = newA; oldB = newB; return result; } void overflow(int StepSize, int MaxValue, int MinValue) { if (EncoderVal >= 1) { Waarde = Waarde + StepSize; EncoderVal = 0; } if (EncoderVal == -1) { Waarde = Waarde - StepSize; EncoderVal = 0; } if (Waarde > MaxValue) { Waarde = MinValue; } if (Waarde < MinValue) { Waarde = MaxValue; } } |
Ik hoop dat iemand er naar kan kijken en mij kan helpen, ik ben hier namelijk al eigenlijk al te lang mee bezig wordt er nu een beetje

Alvast bedankt!!

[Voor 30% gewijzigd door stefan787 op 02-10-2018 08:51]