10x Speed Up after receiving an I2C Event()?


first off, have gleaned , learned forum on years lurking , searching. thank all!

i have ran don't understand , can't seem find answer too, maybe searching wrong tags or phrases.

arduino v1.05 ide, using ledcontrol.h & wire.h

i sending i2c event master 328p uno r3. slave arduino uno r3 receives i2c event fine, calls receiveevent(int eventcode); then..

calls alarm(); fine well. alarm(); simple routine blink set of leds in pattern of 6 times, 1 second on, .5 second off.

however execution speed increases dramatically or @ least appears so, code being called within receiveevent.

delay(1000); = has speed of approximately 100ms, have increase delay(10000); equal 1000ms of wall clock time.
delay(500); = has speed of approximately 50ms. have increase delay(5000); equal 500ms

if call alarm(); outside of receiveevent(int eventcode);, becomes delay(10000); equal 10000ms of wall clock time.


i've tested putting alarm(); test code in front of
code: [select]
switch wire.read()) {, , still ~10x faster

it's receiving of i2c event, removes avr background interrupts or effect. i've never seen arduino code run fast.

any thoughts, or ideas on missed?

code: [select]

void receiveevent(int eventcode) {
//alarm(); - yep still fast.
    switch (wire.read()) {
     case 2:
      ledoff();
      break;      
     case 3:
      alarm();
      delay(5000);
      break;
     case 9:
       //message();
       //alarm();
      break;
     case 10:
       //dancemode();
      break;
     case 11:
       //systemfailure1();
       //delay(5000);
      break;
     case 12:
       alarm();
       systemfailure2();
       delay(5000);
      break;
      case 13:
      alarm();
      delay(5000);
//        cantina();
      break;


     default:
      // if nothing else matches, default
      // going nothing... matter not waste time
      break;
     }
}



void alarm(){
if (logicsi2cadapter==1){
  // bunch of code here for...
}


 if (logicsi2cadapter==2){
  if (psislide==false){
   lc2.cleardisplay(0);
   lc2.cleardisplay(1);
   for (int cnt=0; cnt<6; cnt++){
//    int pcols=b11000000;
     for (int row=0; row<4; row++)
       lc2.setrow(fpsidev,row,b00110000);

     delay(10000);// when called i2c event... delays 10x faster gets me second
     for (int row=0; row<4; row++)
       lc2.setrow(fpsidev,row,b00000000);
     delay(5000);// when called i2c event... delays 10x faster gets me half second
   }
  }
  if (psislide==true){
   lc2.cleardisplay(0);
   lc2.cleardisplay(1);
   for (int cnt=0; cnt<6; cnt++){
       lc2.setrow(fpsidev,0,b01010000);
       lc2.setrow(fpsidev,1,b10100000);
       lc2.setrow(fpsidev,2,b01010000);
       lc2.setrow(fpsidev,3,b10100000);
     delay(10000);// when called i2c event... delays 10x faster gets me second
     for (int row=0; row<4; row++)
       lc2.setrow(fpsidev,row,b00000000);
     delay(5000);// when called i2c event... delays 10x faster gets me  half second
   }
  }
}

if (logicsi2cadapter==3){
//code here
}
 
 
}

quote
or ideas on missed?

the rest of code.


Arduino Forum > Using Arduino > Programming Questions > 10x Speed Up after receiving an I2C Event()?


arduino

Comments

Popular posts from this blog

Convierte tu Raspberry en un NAS. Firmware fvdw-sl 15.3 - Raspberry Pi Forums

How to format a Get Request

avrdude: verification error, first mismatch at byte 0x0000 0x0c != 0x62