Глюк Serial.println на arduino uno

microms
microms аватар
Offline
Зарегистрирован: 22.03.2016

Ардуино отправляет 4 раза Serial.println вместо одного

как исправить чтоб только было один раз,или я чтото не пойму или баг?

код регулирует яркость на лед ленте через драйвер L298N подключенный по шим по 3 пину

int IN3 = 5;
int IN4 = 4;
int ENB = 3;
int n;
int b;
void setup()
{
  Serial.begin(9600);
 pinMode (ENB, OUTPUT); 
 pinMode (IN3, OUTPUT);
 pinMode (IN4, OUTPUT);
}
void loop()
{
  if (Serial.available() > 0) {
   n = Serial.read(); 
  digitalWrite (IN3, HIGH);
  digitalWrite (IN4, LOW);    
       switch (n) {
    case '1':
       b= b + 10 ;
       if ( b > 255) { b = 0; }        
      break;
    case '2':
      b = b - 10 ;
      if ( b < 0) { b = 0; }       
      break;   
           } 
      analogWrite(ENB,b);
       delay(100);                 
       Serial.println(b);      
                 }
  delay(100);
  
}

 

microms
microms аватар
Offline
Зарегистрирован: 22.03.2016

James
Offline
Зарегистрирован: 26.02.2016
int IN3 = 5;
int IN4 = 4;
int ENB = 3;
int n;
int b;
void setup()
{
  Serial.begin(9600);
 pinMode (ENB, OUTPUT); 
 pinMode (IN3, OUTPUT);
 pinMode (IN4, OUTPUT);
}
void loop()
{
  if (Serial.available() > 0) {
   n = Serial.read(); 
  digitalWrite (IN3, HIGH);
  digitalWrite (IN4, LOW);    
       switch (n) {
    case '1':
       b= b + 10 ;
       if ( b > 255) { b = 0; }        
      break;
    case '2':
      b = b - 10 ;
      if ( b < 0) { b = 0; }       
      break;   
           } 
      analogWrite(ENB,b);
       delay(100);             
       Serial.println(b);      
                  }   
  delay(100);
  
}

Все нормально работает

kasper007
Offline
Зарегистрирован: 23.05.2016

А что вы отправляете со стороннего устройства на ардуину? В данной реализации serial.println будет срабатывать ровно столько раз, сколько байт приходит на ардуину.

microms
microms аватар
Offline
Зарегистрирован: 22.03.2016

отправляю я с андроид смартфона символ 1 или 2 .
работает то норм код, только вот приходит 4 раза, вот в чем проблема.

microms
microms аватар
Offline
Зарегистрирован: 22.03.2016

отправляю символы 1 или 2 , со смартфона андроид по блютуз.

microms
microms аватар
Offline
Зарегистрирован: 22.03.2016

нашел решение оказалось надо было включить принт в кейс

int IN3 = 5;
int IN4 = 4;
int ENB = 3;
int n;
int b;
void setup()
{
  Serial.begin(9600);
 pinMode (ENB, OUTPUT); 
 pinMode (IN3, OUTPUT);
 pinMode (IN4, OUTPUT);
}
void loop()
{
  if (Serial.available() > 0) {
   n = Serial.read();  }   
  digitalWrite (IN3, HIGH);
  digitalWrite (IN4, LOW);    
       switch (n) {
    case '1':
       b= b + 10 ;
       if ( b > 255) { b = 0; } 
       Serial.println(b);        
      break;
    case '2':
      b = b - 10 ;
      if ( b < 0) { b = 0; } 
      Serial.println(b);       
      break;   
           } 
      analogWrite(ENB,b); 
      delay(30);  
}

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Значит, смартфон у Вас отправляет вместо одного байта четыре.

Бороться лучше с болезнью, а не с симптомами.