potrebujem vedieť či sa dajú robiť aj iné veci na arduino keď sa mi spusti for loop.
lebo keď sa mi spusti for loopovanie nemôžem nič robiť pokiaľ neskonči.
Potrebujem vykonávať viac veci naraz.
Mam ovládanie cez encoder, keď spustím stmievanie led, tak ledku stimeva. Ale nejde nič iné robiť pokiaľ ten for loop neskončí.
Dá sa to nejako obísť?
Používam Arduino UNO
knihovňa RotaryEncoder
Tu je skrátená verzia môjho problému.
Kód: Vybrať všetko
#include <RotaryEncoder.h>
#include <Wire.h>
#define ROTARYSTEPS 1
#define ROTARYMIN 0
#define ROTARYMAX 16
int setPos;
int bright = 0;
int ledPin = 9;
const byte buttonPin = 4;
byte buttonState = 0;
int newPos;
int lastPos = -1;
RotaryEncoder encoder(3, 2);
void setup()
{
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
Serial.println("LimitedRotator ");
encoder.setPosition(setPos / ROTARYSTEPS); }
void loop()
{
buttonState = digitalRead(buttonPin);
encoder.tick();
newPos = encoder.getPosition() * ROTARYSTEPS;
if (newPos < ROTARYMIN) {
encoder.setPosition(ROTARYMIN / ROTARYSTEPS);
newPos = ROTARYMIN;
} else if (newPos > ROTARYMAX) {
encoder.setPosition(ROTARYMAX / ROTARYSTEPS);
newPos = ROTARYMAX;
}
if (lastPos != newPos) {
Serial.print(newPos);
Serial.println();
}
if (buttonState == 0 && newPos == 5) {
digitalWrite(ledPin, HIGH);
}
if (buttonState == 0 && newPos == 12) {
digitalWrite(ledPin, LOW);
}
if(buttonState == 0 && newPos == 15){
bright = 0;
for (int i = 0; i < 250; i++) {
bright = i;
delay(150);
analogWrite(ledPin, bright);
lastPos = newPos;
}
}
lastPos = newPos;
}