von
Arduino_Mann (Gast)
08.05.2018 08:31
Hallo zusammen,
wie am Betreff zu erkennen habe ich ein Problem mit den Analogen
Eingängen des Arduino und zwar lese ich mit dem Befehl analogRead(A0)
nur den Wert 18 aus, egal was ich anschließe. Was noch komischer ist das
ich an A1:19, A2:20, A3:21, A4:22 und an A5:23 auslese. Woran könnte das
liegen? Ich habe es zum Beispiel mit ein Spannungsteiler versucht bei
dem Ich 5V angelegt habe und auch an GND angeschlossen habe. A0 habe ich
zwischen den beiden Widerständen angeschlossen.
von
Horst S. (Gast)
08.05.2018 08:35
Bitte GANZES Programm in korrekter Forums-Form posten.
Code (in Code-Tags bitte) sowie ein Foto vom Aufbau wären sicher sehr
hilfreich, Schaltplan ist auch nicht zu verachten.
von
Erwin D. (Gast)
08.05.2018 09:13
Arduino_Mann schrieb:
> Was noch komischer ist das
> ich an A1:19, A2:20, A3:21, A4:22 und an A5:23 auslese.
Was willst du mit diesem Satz ausdrücken?
von
Arduino_Mann (Gast)
08.05.2018 09:35
wenn ich mit analogRead(A1) A1 auslese und mit dem Befehl
Serial.println(A1) A1 ausgebe erhalte ich 19 im Seriellen Monitor
von
Arduino_Mann (Gast)
08.05.2018 09:39
void setup() {
analogWrite(A0, Input)
}
void loop() {
analogRead(A0);
Serial.println(A0);
}
von
Captain Albern (Gast)
08.05.2018 09:41
A1 scheint eine Konstante zu sein, die den Port angibt. Mit
Serial.println(A1) gibst du diese Konstante aus.
Du solltest Serial.println(analogRead(A1)) ausgeben. (Falls A1
tatsächlich den richtigen Pin bezeichnet).
Keine Haftung für Rechtschreibung der Befehle.
analogwrite und analogread auf demselben Port? Was genau soll das
bewirken?
Wie wäre es wenn du dir mal ansiehst was die Befehle eigentlich tun?
Captain Albern schrieb:
> A1 scheint eine Konstante zu sein, die den Port angibt. Mit
> Serial.println(A1) gibst du diese Konstante aus.
>
> Du solltest Serial.println(analogRead(A1)) ausgeben. (Falls A1
> tatsächlich den richtigen Pin bezeichnet).
>
> Keine Haftung für Rechtschreibung der Befehle.
Ja, das ist quasi richtig erklärt aber es wäre schön gewesen, wenn du
vorher mal geschaut hättest, was A1 beim Arduino bedeutet.
@TE
Wie der Captain gesagt hat gibst du nur die Konstante aus, die hinter A1
steht. Das ist natürlich Mumpitz. Du musst das etwa so schreiben:
1 void setup () {
2 analogWrite ( A0 , Input );
3
4 }
5
6 void loop () {
7
8 Serial . println ( analogRead ( A0 ));
9
10 }
oder
1 void setup () {
2 analogWrite ( A0 , Input );
3 uint16_t value ;
4
5 }
6
7 void loop () {
8 value = analogRead ( A0 );
9 Serial . println ( value );
10
11 }
von
Arduino_Mann (Gast)
08.05.2018 10:10
Vielen Dank jetzt weiß ich was mein Fehler war
von
Arduino_Mann (Gast)
08.05.2018 11:03
Zweite Frage:
Ich habe folgendes Programm geschrieben in dem von 1-6 gezählt wird,
kann ich mit dem Programm wenn es bei 6 angekommen ist wieder zurück
nach 1 zählen also dann von 6-1?
1 int i = 0;
2
3
4 void setup() {
5 pinMode(2, OUTPUT);
6 pinMode(3, OUTPUT);
7 pinMode(4, OUTPUT);
8 pinMode(5, OUTPUT);
9 pinMode(6, OUTPUT);
10 pinMode(7, OUTPUT);
11 }
12
13 void loop() {
14 if((i=1)|| (i=12)){
15 digitalWrite(2, HIGH);
16 Serial.println("1");
17 delay(1000);
18 }
19 else{
20 digitalWrite(2, LOW);
21 }
22 if((i=2)|| (i=11)){
23 digitalWrite(3, HIGH);
24 Serial.println("2");
25 delay(1000);
26 }
27 else{
28 digitalWrite(3, LOW);
29 }
30 if((i=3)|| (i=10)){
31 digitalWrite(4, HIGH);
32 Serial.println("3");
33 delay(1000);
34 }
35 else{
36 digitalWrite(4, LOW);
37 }
38 if((i=4)|| (i=9)){
39 digitalWrite(5, HIGH);
40 Serial.println("4");
41 delay(1000);
42 }
43 else{
44 digitalWrite(5, LOW);
45 }
46 if((i=5)|| (i=8)){
47 digitalWrite(6, HIGH);
48 Serial.println("5");
49 delay(1000);
50 }
51 else{
52 digitalWrite(6, LOW);
53 }
54 if((i=6)|| (i=7)){
55 digitalWrite(7, HIGH);
56 Serial.println("6");
57 delay(1000);
58
59 }
60 else{
61 digitalWrite(7, LOW);
62 }
63 }
von
Arduino_Mann (Gast)
08.05.2018 11:06
Das Programm oben ist nicht ganz richtig.
Ich habe es folgender maßen versucht:
1 int i = 0;
2
3
4 void setup() {
5 pinMode(2, OUTPUT);
6 pinMode(3, OUTPUT);
7 pinMode(4, OUTPUT);
8 pinMode(5, OUTPUT);
9 pinMode(6, OUTPUT);
10 pinMode(7, OUTPUT);
11 }
12
13 void loop(){
14 while(i=0, i=12, i++){
15 if((i=1)|| (i=12)){
16 digitalWrite(2, HIGH);
17 Serial.println("1");
18 delay(1000);
19 }
20 else{
21 digitalWrite(2, LOW);
22 }
23 if((i=2)|| (i=11)){
24 digitalWrite(3, HIGH);
25 Serial.println("2");
26 delay(1000);
27 }
28 else{
29 digitalWrite(3, LOW);
30 }
31 if((i=3)|| (i=10)){
32 digitalWrite(4, HIGH);
33 Serial.println("3");
34 delay(1000);
35 }
36 else{
37 digitalWrite(4, LOW);
38 }
39 if((i=4)|| (i=9)){
40 digitalWrite(5, HIGH);
41 Serial.println("4");
42 delay(1000);
43 }
44 else{
45 digitalWrite(5, LOW);
46 }
47 if((i=5)|| (i=8)){
48 digitalWrite(6, HIGH);
49 Serial.println("5");
50 delay(1000);
51 }
52 else{
53 digitalWrite(6, LOW);
54 }
55 if((i=6)|| (i=7)){
56 digitalWrite(7, HIGH);
57 Serial.println("6");
58 delay(1000);
59
60 }
61 else{
62 digitalWrite(7, LOW);
63 }
64 }
65 }
ich glaube das:
wird schon mal nicht funktionieren da i nur nochzählt solange i=12 ist.
Richtig müsste es sein:
solange i kleiner 12 ist soll er hochzählen.
Dann sowas:
Zuweisungen werden mit einem "=" geschrieben.
Bei Vergleichen in einer if Abfrage werden jedoch zwei "==" benutzt. 1 int i = 0 ;
2 if ( i == 1 ) { blablablubb }
So, mal als Laie ausgedrückt
von
Zeno (Gast)
08.05.2018 11:40
Arduino_Mann schrieb:
> void loop() {
> analogRead(A0);
> Serial.println(A0);
>
> }
analogRead ist doch meines Wissens eine Funtion? Da müßte es doch so
gemacht werden:1 long INPUT ;
2 INPUT = analogRead ( A0 );
3 Serial . println ( INPUT );
oder 1 Serial . println ( analogRead ( A0 ));
von
Äxl (geloescht) (Gast)
08.05.2018 11:48
als long #issklar. 10Bit gehen bis 1023...
von
Arduino_Mann (Gast)
08.05.2018 12:08
So funktioniert es jetzt:
1 //__________Wichtige_Information___________//
2 //__Version_1.0____________________________//
3 //__Erstellt_am:_08.05.2018________________//
4 //_Geändert_am:____________________________//
5 //_________________________________________//
6 //_Funktion_des_Programms:_________________//
7 //_In_diesem_Programm_wird_ein_Lauflicht___//
8 //_generiert_das_vor-_und_rückwärst_läuft._//
9 //_Außerdem_wird_im_seriellen_Monitor_von__//
10 //_1-6_und_dann_wieder_zurück_von_6-1______//
11 //_gezählt.________________________________//
12
13
14
15
16 int i = 0; //Variable i festlegen
17
18
19 void setup() {
20 pinMode(2, OUTPUT); //Digital Pin als Ausgang festlegen
21 pinMode(3, OUTPUT); //Digital Pin als Ausgang festlegen
22 pinMode(4, OUTPUT); //Digital Pin als Ausgang festlegen
23 pinMode(5, OUTPUT); //Digital Pin als Ausgang festlegen
24 pinMode(6, OUTPUT); //Digital Pin als Ausgang festlegen
25 pinMode(7, OUTPUT); //Digital Pin als Ausgang festlegen
26 }
27
28 void loop(){
29 for(i=0; i<11; i++){ //For Schleife
30 if((i==1)|| (i==11)){ //Im Vorlauf wenn i=1/ Im Rücklauf wenn I=11
31 digitalWrite(2, HIGH); // Setzen des zweiten Augangs auf HIGH (Vorlauf)
32 digitalWrite(3, LOW); // Setzen des dritten Ausgangs auf LOW (Rücklauf)
33 Serial.println("1"); // Das Schreiben einer "1" im Seriellen Monitor
34 delay(500); // Verzögerung
35 }
36
37 if((i==2)|| (i==10)){ //Im Vorlauf wenn i=2/ Im Rücklauf wenn I=10
38 digitalWrite(3, HIGH); // Setzen des dritten Augangs auf HIGH (Vorlauf)
39 digitalWrite(2, LOW); // Setzen des zweiten Ausgangs auf LOW (Vorlauf)
40 digitalWrite(4, LOW); // Setzen des vierten Ausgangs auf LOW (Rücklauf)
41 Serial.println("2"); // Das Schreiben einer "2" im Seriellen Monitor
42 delay(500); // Verzögerung
43 }
44
45 if((i==3)|| (i==9)){ //Im Vorlauf wenn i=3/ Im Rücklauf wenn I=9
46 digitalWrite(4, HIGH); // Setzen des vierten Augangs auf HIGH (Vorlauf)
47 digitalWrite(3, LOW); // Setzen des dritten Ausgangs auf LOW (Vorlauf)
48 digitalWrite(5, LOW); // Setzen des fünften Ausgangs auf LOW (Rücklauf)
49 Serial.println("3"); // Das Schreiben einer "3" im Seriellen Monitor
50 delay(500); // Verzögerung
51 }
52
53 if((i==4)|| (i==8)){ //Im Vorlauf wenn i=4/ Im Rücklauf wenn I=8
54 digitalWrite(5, HIGH); // Setzen des fünften Augangs auf HIGH (Vorlauf)
55 digitalWrite(4, LOW); // Setzen des vierten Ausgangs auf LOW (Vorlauf)
56 digitalWrite(6, LOW); // Setzen des sechsten Ausgangs auf LOW (Rücklauf)
57 Serial.println("4"); // Das Schreiben einer "4" im Seriellen Monitor
58 delay(500); // Verzögerung
59 }
60
61 if((i==5)|| (i==7)){ //Im Vorlauf wenn i=5/ Im Rücklauf wenn I=7
62 digitalWrite(6, HIGH); // Setzen des sechsten Augangs auf HIGH (Vorlauf)
63 digitalWrite(5, LOW); // Setzen des fünften Ausgangs auf LOW (Vorlauf)
64 digitalWrite(7, LOW); // Setzen des siebten Ausgangs auf LOW (Rücklauf)
65 Serial.println("5"); // Das Schreiben einer "5" im Seriellen Monitor
66 delay(500); // Verzögerung
67 }
68
69 if(i==6){ //Im Vorlauf wenn i=6/ Im Rücklauf wird diese If verknüpfung überspungen da sie sonst zweimal ausgeführt wird.
70 digitalWrite(7, HIGH); // Setzen des siebten Augangs auf HIGH (Vorlauf)
71 digitalWrite(6, LOW); // Setzen des sechsten Ausgangs auf LOW (Vorlauf)
72 Serial.println("6"); // Das Schreiben einer "6" im Seriellen Monitor
73 delay(500); // Verzögerung
74
75 }
76 }
77 }
von
Zeno (Gast)
08.05.2018 23:07
Äxl (geloescht) schrieb:
> als long #issklar. 10Bit gehen bis 1023...
Reg Dich mal wieder ab.
Da ich Arduino eher nicht benutze ist mir die Auflösung des AD Wandlers
von Selbigen eher nicht geläufig.
Es ging hier auch eher ums Prinzip, das die genannte Funktion einen
ganzzahligen Wert zurück gibt. Du darfst natürlich gern einen uint16
einsetzen. Der würde dann bis 16Bit gehen, was der Arduino auch können
soll, wie ich gerade nachgelesen habe.
von
ArduHelp (Gast)
08.05.2018 23:14
Mach das Delay aus der Schleife, mach bei digitalisiere als Pinnummer
eine Variable (hint: x) und was macht analogWrite(A0, INPUT) bitte? Wie
wärs mit pinmode?
von
ArduHelp (Gast)
08.05.2018 23:14
digitalisiere soll natürlich DigitalWrite heißen
von
Stefan F. (Gast)
09.05.2018 18:06
Abwechselnd hoch und runter zählen macht man so:
1 void loop ()
2 {
3 for ( int i = 1 ; i <= 5 ; i ++ ) // 1,2,3,4,5,6
4 {
5 anzeigen ( i );
6 delay ( 500 );
7 }
8 for ( int i = 5 ; i >= 2 ; i -- ) // 5,4,3,2
9 {
10 anzeigen ( i );
11 delay ( 500 );
12 }
13 }
Aber eigentlich sollte man die loop() immer möglichst rasch verlassen,
indem man das ganze Ereignisorientiert statt mit Wiederholschleifen
umsetzt.
1 int i = 0 ;
2 int schritt = 1 ;
3 long lastTime = millis ();
4
5 void loop ()
6 {
7 long jetzt = millis ();
8 if ( jetzt - lastTime > 500 )
9 {
10 // eine halbe Sekunde ist verstrichen
11 lastTime = jetzt ;
12
13 // i erhöhen oder verringern
14 i += schritt ;
15
16 anzeigen ( i );
17
18 // Laufrichtung ggf. umschalten
19 if ( i == 6 )
20 {
21 // Ab jetzt rückwärts zählen
22 schritt =- 1 ;
23 }
24 if ( i == 1 )
25 {
26 // Ab jetzt vorwärts zählen
27 schritt = 1 ;
28 }
29 }
30 }
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.