Go Down

Topic: Switching from Uno to Mega 2560 with no success!! (Read 361 times) previous topic - next topic

roineust

Hello!

I have an IDE code, that includes a couple of ultrasound sensors and the PCM library. When i put my hand closer to the ultrasound sensors, it plays a word i recorded at a higher frequency, as the hand gets closer.

It works perfectly on the Uno.

Now i want to put in several more ultrasound sensors, but don't have enough pin input places on the Uno.

So, i checked out again that the code works perfectly on the Uno and first of all i tried to switch to the exact pin numbers, ground connections and 5V connections, on the Mega, without adding any new ultrasound sensors. But, nothing happens - the speaker is totally silent! i checked and rechecked if i switched all the wires to the exact same places and yet all is the same, but the speaker is not working, then i switched back to the Uno again - and it is working! Back again to the Mega - Not working!!

What should i do?

What might be the reason?

Thanks a lot!!

CrossRoads

Post your code.  Likely related to which pins support PWM.
Designing & building electrical circuits for over 25 years.  Screw Shield for Mega/Due/Uno,  Bobuino with ATMega1284P, & other '328P & '1284P creations & offerings at  my website.

roineust

#2
Dec 23, 2013, 02:18 pm Last Edit: Dec 23, 2013, 04:21 pm by CrossRoads Reason: 1
Hello CrossRoads!
Thanks for replying!

Please take into account, that i am only a beginner hobbyist, taking patches of code from here and there and putting them together, with no real in-depth understanding....

Here is the code:

(code tags added by moderator for beginner hobbyist)
Code: [Select]

#include <PCM.h>
#include <SoftwareSerial.h>

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

int isObstacle=0;
int ObstacleLoop=0;

int leftObstacleLoop1=0;
int leftObstacleLoop2=0;
int leftObstacleLoop3=0;

int rightObstacleLoop1=0;
int rightObstacleLoop2=0;
int rightObstacleLoop3=0;

int winFlag=0;

//const unsigned char sample[] PROGMEM = {
//  126, 127, 128, 128, 128,  127,  //Took out all the mass of numbers
//};

const unsigned char sample_left[] PROGMEM = {
129, 128, 128, 127, 128, 127, 127, 128,  //Took out all the mass of numbers
};

const unsigned char sample_right[] PROGMEM = {
126, 127, 127, 126, 127,  128, 128,  //Took out all the mass of numbers
};

const unsigned char silence[] PROGMEM = {
 126, 127, 127, 126, 127, //Took out all the mass of numbers
};

#define trigPin 6
#define echoPin 7
#define trigPin1 12
#define echoPin1 13

void setup() {
 
  mySerial.begin(9600);
 
 Serial.begin (9600);
 pinMode(trigPin, OUTPUT);
 pinMode(echoPin, INPUT);
 pinMode(trigPin1, OUTPUT);
 pinMode(echoPin1, INPUT);
}

void loop() {
 
  //mySerial.println("XXX?");
 
    long duration, distance, duration1, distance1;
 
  digitalWrite(trigPin, LOW);  // Added this line
  delayMicroseconds(4); // Added this line
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10); // Added this line
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;
 

 digitalWrite(trigPin1, LOW);  // Added this line
 delayMicroseconds(4); // Added this line
 digitalWrite(trigPin1, HIGH);
 delayMicroseconds(10); // Added this line
 digitalWrite(trigPin1, LOW);
 duration1 = pulseIn(echoPin1, HIGH);
 distance1 = (duration1/2) / 29.1;


 if(winFlag==0 && isObstacle==0){
   mySerial.write(byte(0));
     // winFlag=1;

}
   
 
if (distance <= 200 && distance < distance1){
     
    startPlayback(sample_left, sizeof(sample_left));
   
    winFlag=1;
   
    if (distance <=200 && distance >=50) {
    isObstacle=0;
    leftObstacleLoop1=0;
    leftObstacleLoop2=0;
    leftObstacleLoop3=0;  
   
     if(ObstacleLoop==0){
     mySerial.write(byte(0));
     winFlag=1;}
     
   ObstacleLoop=1;  
   startPlayback(silence, sizeof(silence));
   delay(250);
 
   
     }
       
   else  if (distance <=50 && distance >=28) {
    isObstacle=0;
    leftObstacleLoop1=0;
    leftObstacleLoop2=0;
    leftObstacleLoop3=0;  
   
     if(ObstacleLoop==0){
     mySerial.write(byte(0));
     winFlag=1;}
     
   ObstacleLoop=1;  
   startPlayback(silence, sizeof(silence));
   delay(250);
   
     }
     
else if (distance <=28 && distance >=24) {
    isObstacle=0;
    leftObstacleLoop1=0;
    leftObstacleLoop2=0;
    leftObstacleLoop3=0;  
   
     if(ObstacleLoop==0){
     mySerial.write(byte(0));
     winFlag=1;}
     
   ObstacleLoop=1;  
     delay(2440);
     }
      else if (distance <=24 && distance >=20){
    isObstacle=0;
    leftObstacleLoop1=0;
    leftObstacleLoop2=0;
    leftObstacleLoop3=0;
         
     if(ObstacleLoop==0){
     mySerial.write(byte(0));
     winFlag=0;}
     
     ObstacleLoop=1;  
      delay(1500);
      }
       else if (distance <=20 && distance >=16){
      isObstacle=0;
      leftObstacleLoop1=0;
      leftObstacleLoop2=0;
      leftObstacleLoop3=0;
           
       if(ObstacleLoop==0){
       mySerial.write(byte(0));
       winFlag=0;}
     
       ObstacleLoop=1;  
       delay(1080);
       }      
        else if (distance <=16 && distance >=12){
        isObstacle=0;
        leftObstacleLoop1=0;
        leftObstacleLoop2=0;
        leftObstacleLoop3=0;
             
       if(ObstacleLoop==0){
       mySerial.write(byte(0));
       winFlag=0;}
       
         ObstacleLoop=1;  
       delay(740);
        }
         else if (distance <=12 && distance >=8){
            if(leftObstacleLoop3==0)
            mySerial.write(byte(1));
            isObstacle=1;
            ObstacleLoop=0;
             leftObstacleLoop3++;
             winFlag=0;
             
         delay(530);
         }
          else if (distance <=8 && distance >=4){
           if(leftObstacleLoop2==0)
            mySerial.write(byte(1));
            isObstacle=1;
             ObstacleLoop=0;
             leftObstacleLoop2++;
              winFlag=0;
             
          delay(340);
          }
          else if (distance <=4 && distance >=0){
            if(leftObstacleLoop1==0)
            mySerial.write(byte(1));
            isObstacle=1;
             ObstacleLoop=0;
             leftObstacleLoop1++;
              winFlag=0;
             
             delay(180);
          }
           else {
            isObstacle=0;
            leftObstacleLoop1=0;
            leftObstacleLoop2=0;
            leftObstacleLoop3=0;
                 
            if(ObstacleLoop==0)
             mySerial.write(byte(0));
             ObstacleLoop=1;
              startPlayback(silence, sizeof(silence));
           }
   
 }
 else  startPlayback(silence, sizeof(silence));
 

 if (distance1 <= 200 && distance1 < distance){
     
    startPlayback(sample_right, sizeof(sample_right));
   
    winFlag=1;
   
          if (distance1 <=200 && distance1 >=50) {
    isObstacle=0;
       rightObstacleLoop1=0;
       rightObstacleLoop2=0;
       rightObstacleLoop3=0;
         
     if(ObstacleLoop==0){
     mySerial.write(byte(0));
     winFlag=0;}
     
     ObstacleLoop=1;  
     startPlayback(silence, sizeof(silence));
     delay(250);
       
   }
   
    else if (distance1 <=50 && distance1 >=28) {
    isObstacle=0;
       rightObstacleLoop1=0;
       rightObstacleLoop2=0;
       rightObstacleLoop3=0;
         
     if(ObstacleLoop==0){
     mySerial.write(byte(0));
     winFlag=0;}
     
     ObstacleLoop=1;  
     
     startPlayback(silence, sizeof(silence));
     delay(250);
       
   }
           
   else if (distance1 <=28 && distance1 >=24) {
    isObstacle=0;
       rightObstacleLoop1=0;
       rightObstacleLoop2=0;
       rightObstacleLoop3=0;
         
     if(ObstacleLoop==0){
     mySerial.write(byte(0));
     winFlag=0;}
     
     ObstacleLoop=1;  
     delay(2440);
     }
      else if (distance1 <=24 && distance1 >=20){
      isObstacle=0;
        rightObstacleLoop1=0;
        rightObstacleLoop2=0;
        rightObstacleLoop3=0;
           
       if(ObstacleLoop==0){
       mySerial.write(byte(0));
       winFlag=0;}
     
       ObstacleLoop=1;  
      delay(1500);
      }
       else if (distance1 <=20 && distance1 >=16){
      isObstacle=0;
       rightObstacleLoop1=0;
       rightObstacleLoop2=0;
       rightObstacleLoop3=0;  
           
       if(ObstacleLoop==0){
       mySerial.write(byte(0));
       winFlag=0;}
     
       ObstacleLoop=1;  
       delay(1080);
       }      
        else if (distance1 <=16 && distance1 >=12){
      isObstacle=0;
      rightObstacleLoop1=0;
      rightObstacleLoop2=0;
      rightObstacleLoop3=0;
           
       if(ObstacleLoop==0){
       mySerial.write(byte(0));
       winFlag=0;}
     
       ObstacleLoop=1;  
       delay(740);
        }
         else if (distance1 <=12 && distance1 >=8){
            if(rightObstacleLoop3==0)
            mySerial.write(byte(2));
            isObstacle=1;
             ObstacleLoop=0;
             rightObstacleLoop3++;
              winFlag=0;
             
         delay(530);
         }
               else if (distance1 <=8 && distance1 >=4){
                if(rightObstacleLoop2==0)
                mySerial.write(byte(2));
                 isObstacle=1;
                 ObstacleLoop=0;
                 rightObstacleLoop2++;
                  winFlag=0;
                 
                 delay(340);
          }
          else if (distance1 <=4 && distance1 >=0){
            if(rightObstacleLoop1==0)
            mySerial.write(byte(2));
            isObstacle=1;
             ObstacleLoop=1;  
             rightObstacleLoop1++;
              winFlag=0;
             
             delay(180);
          }
           else {
              isObstacle=0;  
          rightObstacleLoop1=0;
          rightObstacleLoop2=0;
          rightObstacleLoop3=0;
               
           if(ObstacleLoop==0)
           mySerial.write(byte(0));
           ObstacleLoop=1;  
              startPlayback(silence, sizeof(silence));
           }
           
     }
      else  startPlayback(silence, sizeof(silence));
     
   
}

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy