Analog Eingänge Vom PRO MICRO

Ich noch unerfahren arbeite an diesem Projekt:

https://create.arduino.cc/projecthub/markbennettuk/throttle-quadrant-and-trim-wheel-d746e8?ref=search&ref_id=throttle%2Bquadrant&offset=0

Dank der Hilfe von Stefan läuft es auch absolut zufriedenstellend mit 4 Reglern.
Laut der Beschreibung ist das Sketch für 6 Eingänge geschrieben worden.

bool a0Used = true;
bool a1Used = true;
bool a2Used = true;
bool a3Used = true;
bool a4Used = false;
bool a5Used = false;

Auf der Platine des Pro Micro finde ich nach der Beschriftung nur A0,A1,A2,A3

Auf der Seite ist ein Baugleicher Pro Micro dort finde ich allerdings kein A4,A5 https://www.researchgate.net/figure/Arduino-Pro-Micro-connections-pinouts_fig2_338345202

Frage:
nehme ich dann 4=A6 anstatt A4?
und 6= A7 anstelle von A5
und muß diese dann nur noch im Programm ändern?

noch eine Frage:
Der Pro Micro kann doch noch mehr Eingänge verwalten?
wenn ich richtig sehe sogar bis zu 9?

Angestrebt ist von mir mit 8 Reglern.
Muss ich da für das Sketch einfach die betreffenden Teile mit A0-A3 Kopieren einfügen und entsprechend in A6,A7,A8,A9 abändern?

Vielen Dank für eure Mühe

LG Rebecca

Sach mal, ist das möglich irgendwas als Grundlage zu bieten?
Dein Link scheint ein Highlight zu sein.

Ganz ehrlich. Da hörts dann auf.

Wo hast Du Deinen ProMicro her?
Warum hast Du kein vernünftiges DaBla?
Ist das sowas?

Da ist's dann erklärt.

Du nimmst A6 und schließt die zu messende Spannung an A6 an.

A4 ist an einem der nicht herausgeführten Pins siehe Seite 3 von https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7766-8-bit-AVR-ATmega16U4-32U4_Datasheet.pdf
und https://i.stack.imgur.com/Pdf4W.png

Der Micro PRO hat einfach nicht alle Pins auf die Lötleiste herausgeführt, weil die anzahl der Pins limitiert ist. dazu gehören die Pins 11 bis 13 die zugunsten des SPI wegelassen wurden.

Grüße Uwe

1 Like

Ich verstehe die Frage leider nicht

Wenn ich wüsste was man damit so anstellt, dann hätte ich höchst unwahrscheinlich meine Frage gestellt.
Aber danke für die Antwort
...

:green_heart: uwefed

Also wie ich vermutet habe, Danke.

AHA, jetzt verstehe ich warum ich die Anschlüsse nicht finde...
Das gibt Gewissheit doch das richtige zu machen. DANKESCHÖN uwefed
Das erste Fragespiel ist gelöst und so traue ich mich also da weiter zu machen.

Das Sketch habe ich auf A6 etc. geändert und alles funktioniert einwandfrei.

 #include "Joystick_mh_V2.h"
 
 Joystick_ Joystick;
 
 // put the max and min values from the analogRead in these arrays
 // these are translated to a range of 0 - 1023
 int axisLimits0[] = {338, 688};
 int axisLimits1[] = {345, 692};
 int axisLimits2[] = {352, 697};
 int axisLimits3[] = {336, 688};
 int axisLimits4[] = {325, 675};
 int axisLimits5[] = {348, 703};
 int axisLimits6[] = {342, 691};
 
 // turn axes on or off by setting these variables
 bool a0Used = true;
 bool a1Used = true;
 bool a2Used = true;
 bool a3Used = true;
 bool a6Used = true;
 bool a7Used = true;
 
 // setting mode prints the pin value and translated value to the serial monitor
 // int setting = -1; // no printing to the serial monitor
 // int setting = 2; // values 0 - 5, print the pin values to the serial monitor
 int setting = -1;
 
 void setup() {
   if (a0Used) pinMode(A0, INPUT);
   if (a1Used) pinMode(A1, INPUT);
   if (a2Used) pinMode(A2, INPUT);
   if (a3Used) pinMode(A3, INPUT);
   if (a6Used) pinMode(A6, INPUT);
   if (a7Used) pinMode(A7, INPUT);
   Joystick.begin();
   if (setting >= 0) Serial.begin(9600);
 }
 
 void loop() {
   int value = 0;
   int pos = 0;
 
   if (a0Used) {
     value = analogRead(A0);
     pos = translateValue(value, axisLimits0[0], axisLimits0[1]);
     Joystick.setThrottle(pos);
     if (setting == 0) settingPrint(value, pos);
   }
 
   if (a1Used) {
     value = analogRead(A1);
     pos = translateValue(value, axisLimits1[0], axisLimits1[1]);
     Joystick.setRxAxis(pos);
     if (setting == 1) settingPrint(value, pos);
   }
 
   if (a2Used) {
     value = analogRead(A2);
     pos = translateValue(value, axisLimits2[0], axisLimits2[1]);
     Joystick.setRyAxis(pos);
     if (setting == 2) settingPrint(value, pos);
   }
 
   if (a3Used) {
     value = analogRead(A3);
     pos = translateValue(value, axisLimits3[0], axisLimits3[1]);
     Joystick.setRzAxis(pos);
     if (setting == 3) settingPrint(value, pos);
   }
 
   if (a6Used) {
     value = analogRead(A6);
     pos = translateValue(value, axisLimits4[0], axisLimits4[1]);
     Joystick.setXAxis(pos);
     if (setting == 4) settingPrint(value, pos);
   }
 
   if (a7Used) {
     value = analogRead(A7);
     pos = translateValue(value, axisLimits5[0], axisLimits5[1]);
     Joystick.setYAxis(pos);
     if (setting == 5) settingPrint(value, pos);
   }
   delay(5);
 }
 
 int translateValue(int v, int f1, int f2) {
   // translates values to a 0 - 1023 range
   int result = 0;
   int start = 0;
   float range = 0;
 
   if (f1 < f2) {
     start = f1;
     range = f2 - f1;
   }
   else {
     start = f2;
     range = f1 - f2;
   }
 
   result = (v - start) * (1023 / range);
 
   if (result < 0) result = 0;
   if (result > 1023) result = 1023;
 
   return result;
 }
 
 void settingPrint(int value, int pos) {
   Serial.print(value);
   Serial.print(" ");
   Serial.println(pos);
 }

Dann habe ich es um 2 erweitert und im Monitor der IDE Funktioniert auch alles .
Aber als ich die Gamecontroller Eigenschaften aufrufe sehe ich, dass der Joystick kann scheinbar nur 7 Achsen verarbeiten kann:
A6 - X-Achse (Gemisch1)
A7 - Y-Achse (Gemisch2)
A8 - Z-Achse (Propeller1)
A9 - (Propeller2)
A1 - X-Rotation (Schub2)
A2 - Y-Rotation (Klappen)
A3 - Z-Rotation (TrimWheel)
A0 - Schubkontrolle (Schub1)
Z-Achse Funktioniert nicht und Y Achse ist komisch

Schade, nun gut, dann habe ich einen aus dem Sketch wieder heraus genommen:
A6 - X-Achse (Gemisch1)
A7 - Y-Achse (Gemisch2)
A8 - Z-Achse (Propeller 1&2)
A1 - X-Rotation (Schub2)
A2 - Y-Rotation (Klappen)
A3 - Z-Rotation (TrimWheel)
A0 - Schubkontrolle (Schub1)

die Z-Achse A8 Funktioniert leider immer noch nicht.
Und der Poti an A8 scheint die Ausgabe von A7(Y Achse) mit zu beeinflussen.

Auch mit einer Lupe habe ich keine Lötbrücke gesehen und im IDE Monitor arbeiten sie ja auch sauber und unabhängig von einander.
hier der Sketch mit 7:

 #include "Joystick_mh_V2.h"
 
 Joystick_ Joystick;
 
 // put the max and min values from the analogRead in these arrays
 // these are translated to a range of 0 - 1023
 int axisLimits0[] = {338, 688};
 int axisLimits1[] = {345, 692};
 int axisLimits2[] = {352, 697};
 int axisLimits3[] = {336, 688};
 int axisLimits4[] = {325, 675};
 int axisLimits5[] = {348, 703};
 int axisLimits6[] = {342, 691};
 
 // turn axes on or off by setting these variables
 bool a0Used = true;
 bool a1Used = true;
 bool a2Used = true;
 bool a3Used = true;
 bool a6Used = true;
 bool a7Used = true;
 bool a8Used = true;
 
 // setting mode prints the pin value and translated value to the serial monitor
 // int setting = -1; // no printing to the serial monitor
 // int setting = 2; // values 0 - 6, print the pin values to the serial monitor
 int setting = -1;
 
 void setup() {
   if (a0Used) pinMode(A0, INPUT);
   if (a1Used) pinMode(A1, INPUT);
   if (a2Used) pinMode(A2, INPUT);
   if (a3Used) pinMode(A3, INPUT);
   if (a6Used) pinMode(A6, INPUT);
   if (a7Used) pinMode(A7, INPUT);
   if (a8Used) pinMode(A8, INPUT);
   Joystick.begin();
   if (setting >= 6) Serial.begin(9600);
 }
 
 void loop() {
   int value = 0;
   int pos = 0;
 
   if (a0Used) {
     value = analogRead(A0);
     pos = translateValue(value, axisLimits0[0], axisLimits0[1]);
     Joystick.setThrottle(pos);
     if (setting == 0) settingPrint(value, pos);
   }
 
   if (a1Used) {
     value = analogRead(A1);
     pos = translateValue(value, axisLimits1[0], axisLimits1[1]);
     Joystick.setRxAxis(pos);
     if (setting == 1) settingPrint(value, pos);
   }
 
   if (a2Used) {
     value = analogRead(A2);
     pos = translateValue(value, axisLimits2[0], axisLimits2[1]);
     Joystick.setRyAxis(pos);
     if (setting == 2) settingPrint(value, pos);
   }
 
   if (a3Used) {
     value = analogRead(A3);
     pos = translateValue(value, axisLimits3[0], axisLimits3[1]);
     Joystick.setRzAxis(pos);
     if (setting == 3) settingPrint(value, pos);
   }
 
   if (a6Used) {
     value = analogRead(A6);
     pos = translateValue(value, axisLimits4[0], axisLimits4[1]);
     Joystick.setXAxis(pos);
     if (setting == 4) settingPrint(value, pos);
   }
 
   if (a7Used) {
     value = analogRead(A7);
     pos = translateValue(value, axisLimits5[0], axisLimits5[1]);
     Joystick.setYAxis(pos);
     if (setting == 5) settingPrint(value, pos);
   }
   
   if (a8Used) {
     value = analogRead(A8);
     pos = translateValue(value, axisLimits5[0], axisLimits5[1]);
     Joystick.setYAxis(pos);
     if (setting == 6) settingPrint(value, pos);
   }
   delay(5);
 }
 
 int translateValue(int v, int f1, int f2) {
   // translates values to a 0 - 1023 range
   int result = 0;
   int start = 0;
   float range = 0;
 
   if (f1 < f2) {
     start = f1;
     range = f2 - f1;
   }
   else {
     start = f2;
     range = f1 - f2;
   }
 
   result = (v - start) * (1023 / range);
 
   if (result < 0) result = 0;
   if (result > 1023) result = 1023;
 
   return result;
 }
 
 void settingPrint(int value, int pos) {
   Serial.print(value);
   Serial.print(" ");
   Serial.println(pos);
 }

Was mache ich da falsch?
wie bekomme ich die Z Achse als 7ten Regler?

LG Rebecca

Dann zitiere ich mich von oben erneut:

Was ist daran nicht zu verstehen?
Ja, ich hätte es mir gerne angesehen.

Wenn Du Deinen Code in codetags und nicht als quote einbringst, dann lässt sich das auch lesen.
Schau es Dir an, was passiert, wenn ich das zitiere:

Das sieht dann hier auch so in der IDE aus.
Und das ist falsch.
Ja, bevor hier jetzt ein ganz schlauer kommt: Ich weiss, das das Kästchen eigentlich ein

[]

sein soll..

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