Forum: Mikrocontroller und Digitale Elektronik Arduino Due Poti Auslesen


von Rene K. (errorflash)


Lesenswert?

Hallo,

Ich habe ein 10k Poti an den A2 Anschluss beim Arduino DUE angeklemmt 
und lese den Wert aus. Durch ein mapping gibt er mir den Wert von 0 bis 
100 aus, den ich mir auch auf einem I2C Display anzeigen lasse.

Leider habe ich keinen hohen IQ in C++ Programmierung wenn die mit 
vielen Bedingungen einhergehen muss.

Und zwar läuft der Arduino DUE als HID Keyboard. Ich suche eine Code 
Hilfe bei dem wenn ich den Poti Wert erhöhe alle 5 Werte einmal einen 
Keyboard.press / Keyboard.release auslöst z.b. "A" bis er den wert 100 
erreicht hat. Also bei 5, bei 10, bei 15, bei 20 etc....

und natürlich auch beim zurückdrehen des Potis. Das der Arduino dann 
z.B. einmal ein "B" auslöst. von 100 zurück bei 95, 90, 85 etc.....

Könnte dies zwar mit einem Encoder relativ einfach machen würde aber 
gerne ein Poti nehmen damit die Haptik stufenlos ist.

Hier mein Anfangscode zum Auslesen des Poti Wertes:
------------------------------------------------------------
1
#include <Wire.h>
2
#include <LiquidCrystal_I2C.h>
3
#include <Keyboard.h>
4
#include <HID.h>
5
6
LiquidCrystal_I2C lcd(0x27,16,2);
7
8
9
int pot1 = A2; 
10
int pot1_wert = 0; 
11
 void setup() {
12
  
13
   Serial.begin(9600); 
14
   lcd.init();              
15
   lcd.setCursor(0,0);
16
   lcd.print("#    Volume    #");
17
   lcd.backlight();
18
   Keyboard.begin();
19
20
 }
21
22
 void loop() {
23
   pot1_wert = analogRead(pot1); 
24
   pot1_wert = map(pot1_wert, 0, 1023, 0, 100); 
25
   lcd.setCursor(7, 1);
26
   lcd.print(pot1_wert);
27
   delay(300);
28
   lcd.setCursor(0, 1);
29
   lcd.print("                ");
30
   Serial.print("P1 = "); 
31
   Serial.println(pot1_wert); 
32
   delay(100);
-----------------------------------------------------

Das Poti soll bei einer Software die mit Tastendruck funktioniert die 
Lautstärke erhöhen bzw. verringern. 20 Tasten Anschläge Max /Min Volume.

Vielen Dank der mir dabei helfen könnte.

: Verschoben durch Moderator
von HabeFertig (Gast)


Lesenswert?

if wert == 0 char = A
else
if wert == 100 char = B

if wert modulo 5 == 0
write char

von HabeFertig (Gast)


Lesenswert?

Übrigens, falsches Forum:

Forum: Projekte & Code

Hier könnt ihr eure Projekte, Schaltungen oder Codeschnipsel vorstellen 
und diskutieren. Bitte hier keine Fragen posten!

von HabeFertig (Gast)


Lesenswert?

Statt 100 könntest du natürlich gleich auf 20 mappen lassen.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

HabeFertig schrieb:
> Übrigens, falsches Forum:

Habe es verschoben.

von Einer (Gast)


Lesenswert?

1
#include <Wire.h>
2
3
#include <LiquidCrystal_I2C.h>
4
5
#include <Keyboard.h>
6
7
#include <HID.h>
8
9
LiquidCrystal_I2C lcd(0x27,16,2);
10
11
int pot1 = A2; 
12
13
int pot1_wert = 0;
14
int oldpot1_wert = 0; 
15
16
 void setup() {
17
18
  
19
20
   Serial.begin(9600); 
21
22
   lcd.init();              
23
24
   lcd.setCursor(0,0);
25
26
   lcd.print("#    Volume    #");
27
28
   lcd.backlight();
29
30
   Keyboard.begin();
31
32
 }
33
34
 void loop() {
35
36
   pot1_wert = analogRead(pot1); 
37
38
   pot1_wert = map(pot1_wert, 0, 1023, 0, 20); 
39
40
   lcd.setCursor(7, 1);
41
42
   lcd.print(pot1_wert);
43
44
   delay(300);
45
46
   lcd.setCursor(0, 1);
47
48
   lcd.print("                ");
49
50
   Serial.print("P1 = "); 
51
   if (pot1_wert > oldpot1_wert {
52
     Serial.print("A");
53
   }
54
   if (pot1_wert < oldpot1_wert {
55
     Serial.print("B ");
56
   }
57
   oldpot1_wert = pot1_wert;
58
   Serial.println(pot1_wert); 
59
60
   delay(100);
61
 }

von Rene K. (errorflash)


Lesenswert?

Besten Dank an Alle, habe jetzt eine Lösung durch die Hilfen hier 
gefunden!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.