per quale motivo quando quando arriva un qualsiasi seriale si blocca il pwm,premetto che gestico diversi motori tramite vb,ognuno gestito da un arduino.Potete verificare avviando lo sketch ,avviate il monitor seriale , inviate 4 poi se inviate qualsiasi comando seriale, motori restano accesi ma il pwm si blocca.
Non capisco.
Potrei usare il ciclo for per pwm ,ma mentre esegue il for non posso fare altro.
Grazie mille.
Attendo consigli
#define UP 0
#define DOWN 1
const byte pwmLED = 10;
int md = A2;
int ms = A3;
int val;
const int minPWM = 0;
const int maxPWM = 255;
int fadeDirection = UP;
int fadeValue = 0;
int fadeIncrement = 1;
unsigned long previousFadeMillis;
int fadeInterval = 50;
void setup() {
analogWrite(pwmLED, fadeValue);
Serial.begin(9600);
}
void doTheFade(unsigned long thisMillis) {
if (thisMillis - previousFadeMillis >= fadeInterval) {
if (fadeDirection == UP) {
fadeValue = fadeValue + fadeIncrement;
if (fadeValue >= maxPWM) {
fadeValue = maxPWM;
}
} else {
fadeValue = fadeValue - fadeIncrement;
if (fadeValue <= minPWM) {
fadeValue = minPWM;
fadeDirection = UP;
}
}
analogWrite(pwmLED, fadeValue);
previousFadeMillis = thisMillis;
}
}
void loop() {
Serial.println(fadeValue);
{
if (Serial.available() > 0) //se arriva un byte dal pc
val = Serial.read();
if (val == '4') { // md
digitalWrite(ms, LOW);
digitalWrite(md, HIGH);
fadeDirection = UP;
{
unsigned long currentMillis = millis();
doTheFade(currentMillis);
}
}
{ if (Serial.available())
val = Serial.read();
if (val == '3') { // ms
digitalWrite(md , LOW);
digitalWrite(ms, HIGH);
fadeDirection = UP;
{
unsigned long currentMillis = millis();
doTheFade(currentMillis);
}
}
{ if (Serial.available())
val = Serial.read();
if (val == 'z') {
fadeDirection = DOWN;
// digitalWrite(md, LOW);
// digitalWrite(ms, LOW);
if (fadeValue < 50) {
digitalWrite(ms, LOW);
digitalWrite(md, LOW);
}
{
unsigned long currentMillis = millis();
doTheFade(currentMillis);
}
}
}
}
}
}
#define UP 0
#define DOWN 1
#define md 2
#define ms 4
const byte pwmLED = 9;
int val;
const int minPWM = 0;
const int maxPWM = 255;
byte fadeDirection = UP;
int fadeValue = 0;
byte fadeIncrement = 1;
unsigned long previousFadeMillis;
int fadeInterval = 5;
void setup() {
analogWrite(pwmLED, fadeValue);
Serial.begin(9600);
}
void doTheFade(unsigned long thisMillis) {
if (thisMillis - previousFadeMillis >= fadeInterval) {
if (fadeDirection == UP) {
fadeValue = fadeValue + fadeIncrement;
if (fadeValue >= maxPWM) {
fadeValue = maxPWM;
fadeDirection = DOWN;
}
} else {
fadeValue = fadeValue - fadeIncrement;
if (fadeValue <= minPWM) {
fadeValue = minPWM;
fadeDirection = UP;
}
}
analogWrite(pwmLED, fadeValue);
previousFadeMillis = thisMillis;
}
}
void loop() {
Serial.println(fadeValue);
{
if (Serial.available() > 0) //se arriva un byte dal pc
val = Serial.read();
if (val == '4') { // md
digitalWrite(ms, LOW);
digitalWrite(md, HIGH);
fadeDirection = UP;
{
unsigned long currentMillis = millis();
doTheFade(currentMillis);
}
}
{ if (Serial.available() > 0)
val = Serial.read();
if (val == '3') { // md
digitalWrite(md , LOW);
digitalWrite(ms, HIGH);
fadeDirection = UP;
{
unsigned long currentMillis = millis();
doTheFade(currentMillis);
}
}
{ if (Serial.available() > 0)
val = Serial.read();
if (val == 'z') { // md
fadeDirection = DOWN;
// digitalWrite(md, LOW);
// digitalWrite(ms, LOW);
if (fadeValue < 50) {
digitalWrite(ms, LOW);
digitalWrite(md, LOW);
}
{
unsigned long currentMillis = millis();
doTheFade(currentMillis);
}
}
}
}
}
}