• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Program Arduino, dziwny błąd
#1
Witam,
mam napisany Soft który wrzucę poniżej a problem występujący polega na tym że choć ja  w programie nie potrafię znaleźć żadnego błędu to efektem jest: mam 4 silniki bezszczotkowe każdy z nich podłączony jest do pinu PWM ale zawsze działa tylko silnik podłączony do pinu 11.
Wie ktoś czym to może być spowodowane?
Jest to program sterujący dronem, z chęcią wysłucham wszelkich uwag i porad.


Kod:
#include <SoftwareSerial.h>


SoftwareSerial mySerial(2, 3); // RX, TX



int pwm=700;


int msg;


int servo1=10;
int servo2=9;
int servo3=6;
int servo4=11;


void setup()
{

 
 
 
  pinMode(servo4, OUTPUT);
 pinMode(servo2, OUTPUT);
  pinMode(servo3, OUTPUT);
  pinMode(servo1, OUTPUT);
  mySerial.begin(9600);
 

    Serial.begin(9600);  // Debugging only
    Serial.println("setup");

                                 

}

void loop
{

        
      
       
        if(mySerial.available() > 1){    
    msg = mySerial.parseInt();//read serial input and convert to integer (-32,768 to 32,767)    
   
    }
 
  if(msg==0)   {pwm=700;}
if(msg==140||141||142||143||144||145||146||147||148||149){
    if(msg==140)   {pwm=1600; }
    if(msg==141)   {pwm=1500; }
    if(msg==142)   {pwm=1400; }
    if(msg==143)   {pwm=1300; }
    if(msg==144)   {pwm=1200; }        
    if(msg==145)   {pwm=1100; }
    if(msg==146)   {pwm=1000; }
    if(msg==147)   {pwm=900; }
    if(msg==148)   {pwm=850; }
    if(msg==149)   {pwm=800; }       
     if(msg==0)   {pwm=700;}
 digitalWrite(servo1, HIGH);
 digitalWrite(servo2, HIGH);
 digitalWrite(servo3, HIGH);
  delayMicroseconds(pwm);
 digitalWrite(servo1, LOW);
 digitalWrite(servo2, LOW);
 digitalWrite(servo3, LOW);
digitalWrite(servo4,HIGH);
delayMicroseconds(pwm-50);
 digitalWrite(servo4,LOW);
    }

if(msg==130||131||132||133||134||135||136||137||138||139){
    if(msg==130)   {pwm=1600; }
    if(msg==131)   {pwm=1500; }
    if(msg==132)   {pwm=1400; }
    if(msg==133)   {pwm=1300; }
    if(msg==134)   {pwm=1200; }        
    if(msg==135)   {pwm=1100; }
    if(msg==136)   {pwm=1000; }
    if(msg==137)   {pwm=900; }
    if(msg==138)   {pwm=850; }
    if(msg==139)   {pwm=800; }       
     if(msg==0)   {pwm=700;}
 digitalWrite(servo1, HIGH);
 digitalWrite(servo2, HIGH);
 digitalWrite(servo4, HIGH);
  delayMicroseconds(pwm);
 digitalWrite(servo1, LOW);
 digitalWrite(servo2, LOW);
 digitalWrite(servo4, LOW);
digitalWrite(servo3,HIGH);
delayMicroseconds(pwm-50);
 digitalWrite(servo3,LOW);
 
    }

    if(msg==110||111||112||113||114|115||116||117||118||119){
    if(msg==110)   {pwm=1600; }
    if(msg==111)   {pwm=1500; }
    if(msg==112)   {pwm=1400; }
    if(msg==113)   {pwm=1300; }
    if(msg==114)   {pwm=1200; }        
    if(msg==115)   {pwm=1100; }
    if(msg==116)   {pwm=1000; }
    if(msg==117)   {pwm=900; }
    if(msg==118)   {pwm=850; }
    if(msg==119)   {pwm=800; }   
     if(msg==0)   {pwm=700;}
 digitalWrite(servo2, HIGH);
 digitalWrite(servo3, HIGH);
 digitalWrite(servo4, HIGH);
  delayMicroseconds(pwm);
 digitalWrite(servo2, LOW);
 digitalWrite(servo3, LOW);
 digitalWrite(servo4, LOW);
digitalWrite(servo1,HIGH);
delayMicroseconds(pwm-50);
 digitalWrite(servo1,LOW);
 
    }

    if(msg==120||121||122||123||124||125||126||127||128||129){
   if(msg==120)   {pwm=1600; }
    if(msg==121)   {pwm=1500; }
    if(msg==122)   {pwm=1400; }
    if(msg==123)   {pwm=1300; }
    if(msg==124)   {pwm=1200; }        
    if(msg==125)   {pwm=1100; }
    if(msg==126)   {pwm=1000; }
    if(msg==127)   {pwm=900; }
    if(msg==128)   {pwm=850; }
    if(msg==129)   {pwm=800; }        
     if(msg==0)   {pwm=700;}
 digitalWrite(servo1, HIGH);
 digitalWrite(servo3, HIGH);
 digitalWrite(servo4, HIGH);
  delayMicroseconds(pwm);
 digitalWrite(servo1, LOW);
 digitalWrite(servo3, LOW);
 digitalWrite(servo4, LOW);
digitalWrite(servo2,HIGH);
delayMicroseconds(pwm-50);
 digitalWrite(servo2,LOW);
    }

if(msg==170||171||172||173||174||175||176||177||178||179){
    if(msg==170)   {pwm=1600; }
    if(msg==171)   {pwm=1500; }
    if(msg==172)   {pwm=1400; }
    if(msg==173)   {pwm=1300; }
    if(msg==174)   {pwm=1200; }        
    if(msg==175)   {pwm=1100; }
    if(msg==176)   {pwm=1000; }
    if(msg==177)   {pwm=900; }
    if(msg==178)   {pwm=850; }
    if(msg==179)   {pwm=800; }         
     if(msg==0)   {pwm=700;}
 digitalWrite(servo1, HIGH);
 digitalWrite(servo3, HIGH);
delayMicroseconds(pwm);
 digitalWrite(servo1, LOW);
 digitalWrite(servo3, LOW);
digitalWrite(servo2,HIGH);
digitalWrite(servo4,HIGH);
delayMicroseconds(pwm-50);
 digitalWrite(servo2,LOW);
 digitalWrite(servo4,LOW);
}

if(msg==150||151||152||153||154||155||156||157||158||159){
    if(msg==150)   {pwm=1600; }
    if(msg==151)   {pwm=1500; }
    if(msg==152)   {pwm=1400; }
    if(msg==153)   {pwm=1300; }
    if(msg==154)   {pwm=1200; }        
    if(msg==155)   {pwm=1100; }
    if(msg==156)   {pwm=1000; }
    if(msg==157)   {pwm=900; }
    if(msg==158)   {pwm=850; }
    if(msg==159)   {pwm=800; }        
     if(msg==0)   {pwm=700;}
 digitalWrite(servo2, HIGH);
 digitalWrite(servo3, HIGH);
  delayMicroseconds(pwm);
 digitalWrite(servo2, LOW);
 digitalWrite(servo3, LOW);
digitalWrite(servo1,HIGH);
digitalWrite(servo4,HIGH);
delayMicroseconds(pwm-50);
 digitalWrite(servo1,LOW);
 digitalWrite(servo4,LOW);

    }

    if(msg==180||181||182||183||184||185||186||187||188||189){
    if(msg==180)   {pwm=1600; }
    if(msg==181)   {pwm=1500; }
    if(msg==182)   {pwm=1400; }
    if(msg==183)   {pwm=1300; }
    if(msg==184)   {pwm=1200; }        
    if(msg==185)   {pwm=1100; }
    if(msg==186)   {pwm=1000; }
    if(msg==187)   {pwm=900; }
    if(msg==188)   {pwm=850; }
    if(msg==189)   {pwm=800; }     
     if(msg==0)   {pwm=700;}
 digitalWrite(servo1, HIGH);
 digitalWrite(servo4, HIGH);
  delayMicroseconds(pwm);
 digitalWrite(servo1, LOW);
 digitalWrite(servo4, LOW);
digitalWrite(servo2,HIGH);
digitalWrite(servo3,HIGH);
delayMicroseconds(pwm-50);
 digitalWrite(servo2,LOW);
 digitalWrite(servo3,LOW);
 
    }

    if(msg==160||161||162||163||164||165||166||167||168||169){
    if(msg==160)   {pwm=1600; }
    if(msg==161)   {pwm=1500; }
    if(msg==162)   {pwm=1400; }
    if(msg==163)   {pwm=1300; }
    if(msg==164)   {pwm=1200; }        
    if(msg==165)   {pwm=1100; }
    if(msg==166)   {pwm=1000; }
    if(msg==167)   {pwm=900; }
    if(msg==168)   {pwm=850; }
    if(msg==169)   {pwm=800; }        
     if(msg==0)   {pwm=700;}
 
 digitalWrite(servo2, HIGH);
 digitalWrite(servo4, HIGH);
  delayMicroseconds(pwm);
 digitalWrite(servo2, LOW);
 digitalWrite(servo4, LOW);
digitalWrite(servo1,HIGH);
digitalWrite(servo3, HIGH);
delayMicroseconds(pwm-50);
 digitalWrite(servo1,LOW);
 digitalWrite(servo3,LOW);
 
    }
 






  if(msg==0)   {pwm=700;}





        
if(msg==10 || 11||12||13||14||15||16||17||18||19||0){
    
    if(msg==10)   {pwm=2000; }
    if(msg==11)   {pwm=1900; }
    if(msg==12)   {pwm=1700; }
    if(msg==13)   {pwm=1400; }
    if(msg==14)   {pwm=1300; }        
    if(msg==15)   {pwm=1200; }
    if(msg==16)   {pwm=1100; }
    if(msg==17)   {pwm=1000; }
    if(msg==18)   {pwm=900; }
    if(msg==19)   {pwm=800; }
     if(msg==0)   {pwm=700;;}
 digitalWrite(servo4, HIGH);
 digitalWrite(servo2, HIGH);
 digitalWrite(servo3, HIGH);
 digitalWrite(servo1, HIGH);
 delayMicroseconds(pwm);
 digitalWrite(servo4, LOW);
 digitalWrite(servo2, LOW);
 digitalWrite(servo3, LOW);
 digitalWrite(servo1, LOW);
 }


 if(msg==20||21||22||23||24||25||26||27||28||29){              
    if(msg==20)   {pwm=2000; }
    if(msg==21)   {pwm=1500; }
    if(msg==22)   {pwm=1400; }
    if(msg==23)   {pwm=1300; }
    if(msg==24)   {pwm=1200; }        
    if(msg==25)   {pwm=1100; }
    if(msg==26)   {pwm=1000; }
    if(msg==27)   {pwm=1000; }
    if(msg==28)   {pwm=1000; }
    if(msg==29)   {pwm=1000; }                 
     if(msg==0)   {pwm=700;}
 digitalWrite(servo1, HIGH);
 digitalWrite(servo2, HIGH);
 delayMicroseconds(pwm-50);
 digitalWrite(servo1, LOW);
 digitalWrite(servo2, LOW);
 digitalWrite(servo3, HIGH);
 digitalWrite(servo4, HIGH);
 delayMicroseconds(pwm);
 digitalWrite(servo3, LOW);
 digitalWrite(servo4, LOW);
 }


 if(msg==30||31||32||33||34||35||36||37||38||39){
    if(msg==30)   {pwm=2000; }
    if(msg==31)   {pwm=1500; }
    if(msg==32)   {pwm=1400; }
    if(msg==33)   {pwm=1300; }
    if(msg==34)   {pwm=1200; }        
    if(msg==35)   {pwm=1100; }
    if(msg==36)   {pwm=1000; }
    if(msg==37)   {pwm=1000; }
    if(msg==38)   {pwm=1000; }
    if(msg==39)   {pwm=1000; }
    if(msg==0)   {pwm=700;}
 digitalWrite(servo3, HIGH);
 digitalWrite(servo4, HIGH
delayMicroseconds(pwm-50);
digitalWrite(servo3, LOW);

 digitalWrite(servo4, LOW);
 digitalWrite(servo1, HIGH);
 digitalWrite(servo2, HIGH);
 delayMicroseconds(pwm);
 digitalWrite(servo1, LOW);
 digitalWrite(servo2, LOW);
 }

 
Serial.println(pwm);
mySerial.flush();//clear the serial buffer for unwanted inputs




}

I po raz kolejny proszę używać "code"
 
Odpowiedź
#2
Jest jakiś powód że nie stosujesz sprzętowego PWM?
Pomagam za darmo więc szanuj mój czas.
Wklejaj tekst a nie jego zdjęcie.
Nie pisz następnego postu jak nie odpowiedziałeś na poprzedni.
Jak mądrze zadawać pytania
 
Odpowiedź
#3
Po pierwsze tak jak kolega wyżej napisał zacznij stosować pwm sprzętowe.
Kod:
/*
  Analog input, analog output, serial output

Reads an analog input pin, maps the result to a range from 0 to 255
and uses the result to set the pulsewidth modulation (PWM) of an output pin.
Also prints the results to the serial monitor.

The circuit:
* potentiometer connected to analog pin 0.
   Center pin of the potentiometer goes to the analog pin.
   side pins of the potentiometer go to +5V and ground
* LED connected from digital pin 9 to ground

created 29 Dec. 2008
modified 9 Apr 2012
by Tom Igoe

This example code is in the public domain.

*/

// These constants won't change.  They're used to give names
// to the pins used:
const int analogInPin = A0;  // Analog input pin that the potentiometer is attached to
const int analogOutPin = 9; // Analog output pin that the LED is attached to

int sensorValue = 0;        // value read from the pot
int outputValue = 0;        // value output to the PWM (analog out)

void setup() {
  // initialize serial communications at 9600 bps:
  Serial.begin(9600);
}

void loop() {
  // read the analog in value:
  sensorValue = analogRead(analogInPin);
  // map it to the range of the analog out:
  outputValue = map(sensorValue, 0, 1023, 0, 255);
  // change the analog out value:
  analogWrite(analogOutPin, outputValue);

  // print the results to the serial monitor:
  Serial.print("sensor = ");
  Serial.print(sensorValue);
  Serial.print("\t output = ");
  Serial.println(outputValue);

  // wait 2 milliseconds before the next loop
  // for the analog-to-digital converter to settle
  // after the last reading:
  delay(2);
}
To dobry przykład zaimplementowany w każde arduino ide .
Po drugie poleca nauczyć się używać funkcji void zamiast po 5 razy powielać ten sam program .
To pozwala na przejrzyste kody i zaśmiecanie bezsensownie kod.
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#4
Wielkie dzięki Smile
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości