Forum: Mikrocontroller und Digitale Elektronik analogWrite wird ignoriert.


von Mario S. (mariost)


Lesenswert?

Hey Leute,

ich habe jetzt schon so ziemlich alles versucht und geprüft, aber der
Code läuft nicht richtig.

wenn das Tor zu geht soll in void ZU() bei buttonPresses (Zähne am
Zahnrad zählen) <30 das Tor nur noch mit gedrosselter Geschwindgkeit
laufen, tut es aber nicht.

Bei Tor auf ist alles in ok und läuft auch so wie es soll.

Jetzt stelle ich mir die Frage:


"Wie zur Hölle geht das,wenn der Code identisch für beide Anweisungen
ist?"

Ich bin für jede Hilfe dankbar :D



P.s. buttonPresses==0 ist Tor geschlossen und buttonPresses==159 ist Tor
geöffnet.

1
#include <RCSwitch.h>
2
3
RCSwitch mySwitch = RCSwitch();
4
5
6
int PWM_AUF = 5; //  IBT2 PIN 1
7
int PWM_ZU = 4; // IBT2 PIN 2
8
int K1 = 6;//12v
9
int S3 = 7;//Schalter Tor auf/zu an HCG
10
int Initiator_1 = 10; // Initiator am Zahnrad
11
int S1 = 12;//Tor offen
12
int S2 = 11;//Tor geschlossen
13
int Fhem_Tor_auf = 9;
14
int Fhem_Tor_zu = 3;
15
int Tor_offen_an_Fhem = 7;
16
int Tor_zu_an_Fhem = 8;
17
18
int value_S1 = 0;
19
int value_S2 = 0;
20
int value_S3 = 0;
21
int value_In1 = 0;
22
int value_Fhem_Tor_auf = 0;
23
int value_Fhem_Tor_zu = 0;
24
int value_Tor_offen_an_Fhem = 0;
25
int value_Tor_zu_an_Fhem = 0;
26
int value_FFB = 0;
27
int counter_auf = 0;
28
int counter_zu = 0;
29
int val;
30
int buttonState;
31
int buttonPresses = 0;
32
int vals = 1023;
33
int vall = 370;
34
35
36
37
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
38
void setup() {
39
  mySwitch.enableReceive(0);  // Receiver on inerrupt 0 => that is pin #2
40
  pinMode(PWM_AUF, OUTPUT);
41
  pinMode(PWM_ZU, OUTPUT);
42
  pinMode(K1, OUTPUT);
43
  pinMode(S1, INPUT);
44
  pinMode(S2, INPUT);
45
  pinMode(S3, INPUT);
46
  pinMode(Initiator_1, INPUT);
47
  pinMode(Tor_offen_an_Fhem, OUTPUT);
48
  pinMode(Tor_zu_an_Fhem, OUTPUT);
49
  pinMode(Fhem_Tor_auf, INPUT);
50
  pinMode(Fhem_Tor_zu, INPUT);
51
  digitalWrite(K1, HIGH);
52
  Serial.begin(9600);
53
}
54
55
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
56
void loop() {
57
  value_S1 = digitalRead(S1);
58
  value_S2 = digitalRead(S2);
59
  value_S3 = digitalRead(S3);
60
  value_In1 = digitalRead(Initiator_1);
61
  value_Fhem_Tor_auf = digitalRead(Fhem_Tor_auf);
62
  value_Fhem_Tor_zu = digitalRead(Fhem_Tor_zu);
63
  val = value_In1;
64
65
66
67
68
  if (mySwitch.available())
69
  { int value = mySwitch.getReceivedValue();
70
    value_FFB = mySwitch.getReceivedValue();
71
    mySwitch.resetAvailable();
72
  }
73
  Serial.println(buttonPresses);
74
75
76
77
  //////////////////////////TOR AUF////////////////////////////////////////////////////////////////
78
  if ((buttonPresses == 0) && (value_S1 == 0) && (value_Fhem_Tor_auf == 1) || (value_S3 == 1) || (value_FFB == 452)) {
79
    counter_auf = 1;
80
  }
81
82
  if (buttonPresses == 159) {
83
    counter_auf = 0;
84
  }
85
86
  if (counter_auf == 1) {
87
    AUF();
88
    if (val != buttonState)
89
    {
90
      if (val == LOW)
91
      {
92
        buttonPresses++;
93
      }
94
    }
95
    buttonState = val;
96
    digitalWrite(K1, LOW);
97
  }
98
  else
99
  {
100
    analogWrite(PWM_AUF, 0);
101
  }
102
  /////////////////////////////TOR ZU///////////////////////////////////////////////////////////////
103
104
  if ((buttonPresses == 159) && (value_S2 == 0) && (value_Fhem_Tor_zu == 1) || (value_S3 == 1) || ( value_FFB == 452)) {
105
    (counter_zu = 1);
106
  }
107
108
  if ((buttonPresses == 0)) {
109
    counter_zu = 0;
110
  }
111
112
  if (counter_zu == 1) {
113
    ZU();
114
115
    if (val != buttonState)
116
    {
117
      if (val == LOW)
118
      {
119
        buttonPresses--;
120
      }
121
    }
122
    buttonState = val;
123
124
    digitalWrite(K1, LOW);
125
  }
126
127
  else
128
  {
129
    analogWrite(PWM_ZU, 0);
130
  }
131
132
133
134
135
136
  //////////////////////////////////K3//////////////////////////////////////////
137
  if ((counter_zu == 0) && (counter_auf == 0)) {
138
    digitalWrite(K1, HIGH);
139
  }
140
  value_FFB = 0;
141
}
142
143
144
//////////////////////////////////////////////////////////////////////////////////////////////////////
145
void ZU()
146
{
147
148
149
  if (buttonPresses > 100) {
150
    analogWrite(PWM_ZU, 400); Serial.print("wwwwwwwww");
151
  }
152
  if (buttonPresses < 100) {
153
    analogWrite(PWM_ZU, 1023); Serial.print("kkkkkkkkkk");
154
  }
155
}
156
157
///////////////////////////////////////////////////////////////////////////////////////////////
158
void AUF()
159
{
160
161
162
  if (buttonPresses < 150) {
163
    analogWrite(PWM_AUF, 1023);
164
  }
165
  if (buttonPresses > 150) {
166
    analogWrite(PWM_AUF, 390);
167
  }
168
}

von Manfred (Gast)


Lesenswert?

Mario S. schrieb:
> int PWM_AUF = 5; //  IBT2 PIN 1
> int PWM_ZU = 4; // IBT2 PIN 2
Wenn das die Pins eines Arduinos sind: Nachgucken, auf welchen der PWM 
kann!

von Mario S. (mariost)


Lesenswert?

DAAAAAAAAAAAAAANKE!!!



 Welcher Pin ist beim Arduino Nano kein PWM Pin ? Richtig,Pin 4!!!

gibt es sonst noch Verbesserungsvorschläge für meinen Code?

von Harry D. (harry_d)


Lesenswert?

analogWrite geht nur von 0 bis 255

von Mario S. (mariost)


Lesenswert?

Aber warum macht dann void AUF() was es soll?

von Harry D. (harry_d)


Lesenswert?

Weil 1023 als uint8 übergeben zufällig 255 sind und 390 ebenso einen 
(brauchbaren) uint8 Wert übergibt.

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.