Go Down

Topic: Arduino Mega startet Programm nicht (Read 883 times) previous topic - next topic

Karlsa

Hallo zusammen,

ich habe mein Projekt fertig uns es läuft einwandfrei. Nun möchte ich dass das Programm ohne am USB zu hängen anfängt das Programm abzuspielen. Das Passiert aber nur wenn ich den Resetknopf betätige.

Muss man den Sketch anders auf den Arduino laden, wenn dieser sofort nach Spannung anlegen beginnen soll?

Ich hab einen Arduino Mega 2560 Rev 3.
An Vin hab ich 5V angelegt.

Danke im Voraus

Karlsa

MueThoS

Sollte immer automatisch passieren.
Zeig mal deinen Code!

Karlsa

Code: [Select]
int typ = 1;                                           //1 = One Laser Diode, 2 = Two Laser Diode



//Encoder******************************************
byte speicherA = 0;
byte speicherB = 0;

int stellungA;
int stellungB;

int A = 34;
int B = 36;
byte auswahl = 0;
byte auswahl_typ2 = 0;                              // wenn typ = 2, bei menue ACC
int menue = 0, status = 0, optionen = 0;
//*************************************************


boolean message_receive = false;

//*************************************************
char buf[10] = {0};

char ACC_Send[] = {0};
float valueACC = 0;
float bufACC = 0;

char APC_Send[] = {0};
float valueAPC = 0;
float bufAPC = 0;

char AGC_Send[] = {0};
float valueAGC = 0;
float bufAGC = 0;

//*************************************************
int counter = 0;

int fan = 4;


int zero = 0x00;                                 // 0 hex ans Display senden

byte change = 0;

int back = 42;
int back_led = 44;
int enter = 38;
int pump = 40;
int pump_led = 46;

int i, k;


void setup()
{
 Serial1.begin(9600);//Diplay
 Serial2.begin(9600);//EDFA

 pinMode(back, INPUT);
 digitalWrite(back, HIGH);
 pinMode(enter, INPUT);
 pinMode(A, INPUT);
 digitalWrite(A, HIGH);
 pinMode(B, INPUT);
 digitalWrite(B, HIGH);
 pinMode(back_led, OUTPUT);
 pinMode(pump_led, OUTPUT);
 pinMode(fan, OUTPUT);
 digitalWrite(fan, LOW);
 
 attachInterrupt(0, ReadTemp, RISING);
 
 DisplayIni();
 Serial1.begin(115200);
 start();

}

void loop()
{  
 char current[20] = {0};
 char powerIn[30] = {0};
 char powerOut[30] = {0};
 unsigned long time = 0;
 
 while(1)
 {
   menueWahl();  

   if (millis() >= 1000 + time)
   {  
     
     if (menue == 0 || menue == 1)
       getValue("LC 1", 0x03, 0x04, "LD current:", 8, current);
       
     getPower(0x07, 0x06, powerIn, powerOut);
     time = millis();
   }
     
   if (auswahl == 0 && digitalRead(enter) == HIGH)
   {
     while(digitalRead(enter) == HIGH);
     setValue(current, powerIn, powerOut);  
   }
   
   if (auswahl == 1 && digitalRead(enter) == HIGH && millis() <= 1000 + time)
   {
     while(digitalRead(enter) == HIGH);
     time = showMenue();
   }
     
   if (auswahl == 2 && digitalRead(enter) == HIGH)
   {
     while(digitalRead(enter) == HIGH);
     showStatus();
   }      
   
   if (auswahl == 3 && digitalRead(enter) == HIGH)
   {
     while(digitalRead(enter) == HIGH);
     showOptions();
   }
 
 
   if (digitalRead(pump) == HIGH)
   {
     if (menue == 1)
       startPump("APC", current, powerIn, powerOut);
     
     else if (menue == 2)
       startPump("ACC", current, powerIn, powerOut);
       
     else if (menue == 0)
       startPump("AGC", current, powerIn, powerOut);
   }  
 }      
}      
 
// Funktionen  

void start()
{  
  char apc[20] = {0};
  ClearDisplay();
  while (Serial2.available() > 0) Serial2.read();
  getValue("APC", 0x03, 0x01, "Power Out:", 5, apc);
  Ausgabe(0x03, 0x06, "Pi:");
  Ausgabe(0x03, 0x08, "Po:");
  Ausgabe(0x03, 0x0B, "APC");
  Ausgabe(0x09, 0x0B, "Status");
  Ausgabe(0x12, 0x0B, "Optionen");
  menue = 1;      

  valueAPC = atof(apc);
  bufAPC = valueAPC;
}

void menueWahl()
{  
 
 if (digitalRead(A)==HIGH && digitalRead(B)==LOW && speicherA==0 && speicherB==0)
 {
   auswahl++; auswahl_typ2++;
   auswahl %= 4; auswahl_typ2 %= 5;
   speicherA=1;
   speicherB=0;
 }
 else if (digitalRead(A)==HIGH && digitalRead(B)==HIGH && speicherA==1 && speicherB==0)
 {
   auswahl++; auswahl_typ2++;
   auswahl %= 4; auswahl_typ2 %= 5;
   speicherA=1;
   speicherB=1;
 }
 else if (digitalRead(A)==LOW && digitalRead(B)==HIGH && speicherA==1 && speicherB==1 )
 {
   auswahl++; auswahl_typ2++;
   auswahl %= 4; auswahl_typ2 %= 5;
   speicherA=0;
   speicherB=1;
 }
 else if (digitalRead(A)==LOW && digitalRead(B)==LOW && speicherA==0 && speicherB==1 )
 {
   auswahl++; auswahl_typ2++;
   auswahl %= 4; auswahl_typ2 %= 5;
   speicherA=0;
   speicherB=0;
 }
 
else if (digitalRead(A)==LOW && digitalRead(B)==HIGH && speicherA==0 && speicherB==0)
 {
   auswahl--; auswahl_typ2--;
   auswahl %= 4; auswahl_typ2 %= 5;
   speicherA=0;
   speicherB=1;
 }
 else if (digitalRead(A)==HIGH && digitalRead(B)==HIGH && speicherA==0 && speicherB==1)
 {
   auswahl--; auswahl_typ2--;
   auswahl %= 4; auswahl_typ2 %= 5;
   speicherA=1;
   speicherB=1;
 }
 else if (digitalRead(A)==HIGH && digitalRead(B)==LOW && speicherA==1 && speicherB==1)
 {
   auswahl--; auswahl_typ2--;
   auswahl %= 4; auswahl_typ2 %= 5;
   speicherA=1;
   speicherB=0;
 }
 else if (digitalRead(A)==LOW && digitalRead(B)==LOW && speicherA==1 && speicherB==0)
 {
   auswahl--; auswahl_typ2--;
   auswahl %= 4; auswahl_typ2 %= 5;
   speicherA=0;
   speicherB=0;
 }

 if (typ == 1 || typ == 2  && menue == 1 || typ == 2 && menue == 0)
 {  
   if (auswahl == 0)
   {
     Ausgabe(0x01, 0x01, "->");
     AusgabeLoeschen(0x01, 0x0B, "->");
     AusgabeLoeschen(0x10, 0x0B, "->");
   }
   else if (auswahl == 1)
   {
     Ausgabe(0x01, 0x0B, "->");
     AusgabeLoeschen(0x01, 0x01, "->");
     AusgabeLoeschen(0x07, 0x0B, "->");
   }
   else if (auswahl == 2)
   {
     Ausgabe(0x07, 0x0B, "->");
     AusgabeLoeschen(0x01, 0x0B, "->");
     AusgabeLoeschen(0x10, 0x0B, "->");
   }
   else if (auswahl == 3)
   {
     Ausgabe(0x10, 0x0B, "->");
     AusgabeLoeschen(0x07, 0x0B, "->");
     AusgabeLoeschen(0x01, 0x01, "->");
   }
 }
 
 else if (typ == 2 && menue == 2)
 {  
   if (auswahl_typ2 == 0)
   {
     Ausgabe(0x01, 0x01, "->");
     AusgabeLoeschen(0x01, 0x03, "->");
     AusgabeLoeschen(0x10, 0x0B, "->");
   }
   else if (auswahl_typ2 == 1)
   {
     Ausgabe(0x01, 0x03, "->");
     AusgabeLoeschen(0x01, 0x01, "->");
     AusgabeLoeschen(0x01, 0x0B, "->");
   }
   else if (auswahl_typ2 == 2)
   {
     Ausgabe(0x01, 0x0B, "->");
     AusgabeLoeschen(0x01, 0x03, "->");
     AusgabeLoeschen(0x07, 0x0B, "->");
   }
   else if (auswahl_typ2 == 3)
   {
     Ausgabe(0x07, 0x0B, "->");
     AusgabeLoeschen(0x01, 0x0B, "->");
     AusgabeLoeschen(0x10, 0x0B, "->");
   }
   else if (auswahl_typ2 == 4)
   {
     Ausgabe(0x10, 0x0B, "->");
     AusgabeLoeschen(0x07, 0x0B, "->");
     AusgabeLoeschen(0x01, 0x01, "->");
   }
 }
}  





Karlsa

Code: [Select]
unsigned long showMenue()
{
   char apc[20] = {0};
   char acc1[20] = {0};
   char agc[20] = {0};
   char current[20] = {0};
   
   if (menue == 0)
   {  
     ClearDisplay();  
     getValue("APC", 0x03, 0x01, "Power Out:", 5, apc);
     Ausgabe(0x03, 0x06, "Pi:");
     Ausgabe(0x03, 0x08, "Po:");
     Ausgabe(0x03, 0x0B, "APC");
     Ausgabe(0x09, 0x0B, "Status");
     Ausgabe(0x12, 0x0B, "Optionen");
     menue = 1;
   }
   
   else if (menue == 1)
   {  
     ClearDisplay();
     
     if (typ == 1)
     {  
       getValue("ACC 1", 0x03, 0x01, "LD current:", 8, acc1);  
       Ausgabe(0x03, 0x06, "Pi:");
       Ausgabe(0x03, 0x08, "Po:");
       Ausgabe(0x03, 0x0B, "ACC");
       Ausgabe(0x09, 0x0B, "Status");
       Ausgabe(0x12, 0x0B, "Optionen");
       menue = 2;

       valueACC = atof(acc1);
       bufACC = valueACC;

     }
     else if (typ == 2)
     {
       Ausgabe(0x03, 0x01, "Laser Diode 1:");
       delay(10);
       Ausgabe(0x03, 0x03, "Laser Diode 2:");
       Ausgabe(0x03, 0x06, "Pi:");
       Ausgabe(0x03, 0x08, "Po:");    
       Ausgabe(0x03, 0x0B, "ACC");
       Ausgabe(0x09, 0x0B, "Status");
       Ausgabe(0x12, 0x0B, "Optionen");
       menue = 2;
      }          
   }
 
   else if (menue == 2)
   {  
     ClearDisplay();  
     getValue("AGC", 0x03, 0x01, "Gain:", 5, agc);
     Ausgabe(0x03, 0x06, "Pi:");
     Ausgabe(0x03, 0x08, "Po:");
     Ausgabe(0x03, 0x0B, "AGC");
     Ausgabe(0x09, 0x0B, "Status");
     Ausgabe(0x12, 0x0B, "Optionen");
     menue = 0;
     
     valueAGC = atof(agc);
     bufAGC = valueAGC;
   }  
   
 return millis();
}    

void setValue(char* saveCurrent, char* Pi, char* Po)
{  
   char apc[20] = {0};
   char acc1[20] = {0};
   char agc[20] = {0};
   char current[20] = {0};
   char powerIn[30] = {0};
   char powerOut[30] = {0};  
   unsigned long time;
   
   strcpy(current, saveCurrent);
   strcpy(powerIn, Pi);
   strcpy(powerOut, Po);
   
   AusgabeLoeschen(0x01, 0x01, "->");
   Ausgabe(0x01, 0x01, "<-");
   change = 1;
   
   dtostrf(valueAPC, 3, 1, apc);
   dtostrf(valueACC, 3, 1, acc1);  
   dtostrf(valueAGC, 3, 1, agc);  

   while (digitalRead(enter) == HIGH);
   
   time = millis();
   
   while (change == 1)
   {  
     if (menue == 1)
     {        
        if (millis() >= 1000 + time)
       {  
         if (menue == 0 || menue == 1)
         getValue("LC 1", 0x03, 0x04, "LD current:", 8, current);
         getPower(0x07, 0x06, powerIn, powerOut);
         time = millis();
       }
       
         valueAPC = changeValue("APC");

        if (bufAPC != valueAPC)
        {

          dtostrf(valueAPC, 3, 1, buf);
          sprintf(APC_Send, "APC %s", buf);
          Serial2.println(APC_Send);
          delay(45);
          while(Serial2.available() > 0)    
             Serial2.read();

          getValue("APC", 0x03, 0x01, "Power Out:", 5, apc);
         
          valueAPC = atof(apc);
          bufAPC = valueAPC;
         }
      }
       else if (menue == 2)
       {  
          if (millis() >= 1000 + time)
         {  
           if (menue == 0 || menue == 1)
           getValue("LC 1", 0x03, 0x04, "LD current:", 8, current);
           getPower(0x07, 0x06, powerIn, powerOut);
           time = millis();
         }          
          valueACC = changeValue("ACC");
         
          if (bufACC != valueACC)
          {
            dtostrf(valueACC, 3, 1, buf);
            sprintf(ACC_Send, "ACC 1 %s", buf);
            Serial2.println(ACC_Send);
            delay(45);
            while(Serial2.available() > 0)    
              Serial2.read();
           
            getValue("ACC 1", 0x03, 0x01, "LD current:", 8, acc1);
           
            valueACC = atof(acc1);
             bufACC = valueACC;
          }
        }
       else if (menue == 0)
       {
          if (millis() >= 1000 + time)
         {  
           if (menue == 0 || menue == 1)
           getValue("LC 1", 0x03, 0x04, "LD current:", 8, current);
           getPower(0x07, 0x06, powerIn, powerOut);
           time = millis();
         }          
          valueAGC = changeValue("AGC");
         
          if (bufAGC != valueAGC)
          {
            dtostrf(valueAGC, 3, 1, buf);
            sprintf(AGC_Send, "AGC %s", buf);            
            Serial2.println(AGC_Send);
            delay(45);
            while(Serial2.available() > 0)    
              Serial2.read();  
             
            getValue("AGC", 0x03, 0x01, "Gain:", 5, agc);
           
            valueAGC = atof(agc);
             bufAGC = valueAGC;
          }  
        }  
       
        if (digitalRead(enter) == HIGH)
        {
          while (digitalRead(enter) == HIGH);
          AusgabeLoeschen(0x01, 0x01, "<-");
          change = 0;
        }
   }
 strcpy(saveCurrent, current);
 strcpy(Pi, powerIn);
 strcpy(Po, powerOut);    
}


}

Karlsa

Code: [Select]
float changeValue(char* modus)
{
    int last;
    float value;
 
    if (modus == "APC")
      value = valueAPC;
     
    else if (modus == "ACC")
      value = valueACC;
     
    else if (modus == "AGC")
      value = valueAGC;
     
     
    if (last == 1)
      while(digitalRead(A)!=HIGH && digitalRead(B)!=LOW);   
    else if (last == 2)
      while(digitalRead(A)!=HIGH && digitalRead(B)!=HIGH);
    else if (last == 3)
      while(digitalRead(A)!=LOW && digitalRead(B)!=LOW);
    else if (last == 4)
      while(digitalRead(A)!=LOW && digitalRead(B)!=LOW);
    else if (last == 5)
      while(digitalRead(A)!=LOW && digitalRead(B)!=HIGH);
    else if (last == 6)
      while(digitalRead(A)!=HIGH && digitalRead(B)!=HIGH);
    else if (last == 7)
      while(digitalRead(A)!=HIGH && digitalRead(B)!=LOW);
    else if (last == 8)
      while(digitalRead(A)!=LOW && digitalRead(B)!=LOW);



     
     
    if (digitalRead(A)==HIGH && digitalRead(B)==LOW && speicherA==0 && speicherB==0)
    {
      if (menue == 1 || menue == 0)
      {
        if (digitalRead(back) == LOW)
        value += 1.0;   
        else
          value +=0.1;
      }     
      if (menue == 2)
      {
        if (digitalRead(back) == LOW)
          value += 10.0;
        else
          value +=1;
      }     
      speicherA=1;
      speicherB=0;
      last = 1;
    }
    else if (digitalRead(A)==HIGH && digitalRead(B)==HIGH && speicherA==1 && speicherB==0)
    {
      if (menue == 1 || menue == 0)
      {
        if (digitalRead(back) == LOW)
          value += 1.0;   
        else
          value +=0.1;
      }   
      if (menue == 2)
      {
        if (digitalRead(back) == LOW)
          value += 10.0;
        else
          value +=1;
      }     
      speicherA=1;
      speicherB=1;
      last = 2;
    }
    else if (digitalRead(A)==LOW && digitalRead(B)==HIGH && speicherA==1 && speicherB==1)
    {
      if (menue == 1 || menue == 0)
      {
        if (digitalRead(back) == LOW)
          value += 1.0;   
        else
          value +=0.1;
      }   
      if (menue == 2)
      {
        if (digitalRead(back) == LOW)
          value += 10.0;
        else
          value +=1;
      }           
      speicherA=0;
      speicherB=1;
      last = 3;
    }
    else if (digitalRead(A)==LOW && digitalRead(B)==LOW && speicherA==0 && speicherB==1)
    {
       if (menue == 1 || menue == 0)
      {
        if (digitalRead(back) == LOW)
          value += 1.0;   
        else
          value +=0.1;
      }   
      if (menue == 2)
      {
        if (digitalRead(back) == LOW)
          value += 10.0;
        else
          value +=1;
      }         
      speicherA=0;
      speicherB=0;
      last = 4;
    }
 
    else if (digitalRead(A)==LOW && digitalRead(B)==HIGH && speicherA==0 && speicherB==0)
    {
      if (menue == 1 || menue == 0)
      {
        if (digitalRead(back) == LOW)
          value -= 1.0;   
        else
          value -=0.1;
      }   
      if (menue == 2)
      {
        if (digitalRead(back) == LOW)
          value -= 10.0;
        else
          value -=1;
      }           
      speicherA=0;
      speicherB=1;
      last = 5;
    }
    else if (digitalRead(A)==HIGH && digitalRead(B)==HIGH && speicherA==0 && speicherB==1)
    {
      if (menue == 1 || menue == 0)
      {
        if (digitalRead(back) == LOW)
          value -= 1.0;   
        else
          value -=0.1;
      }   
      if (menue == 2)
      {
        if (digitalRead(back) == LOW)
          value -= 10.0;
        else
          value -=1;
      }                 
      speicherA=1;
      speicherB=1;
      last = 6;
    }
    else if (digitalRead(A)==HIGH && digitalRead(B)==LOW && speicherA==1 && speicherB==1)
    {
      if (menue == 1 || menue == 0)
      {
        if (digitalRead(back) == LOW)
          value -= 1.0;   
        else
          value -=0.1;
      }   
      if (menue == 2)
      {
        if (digitalRead(back) == LOW)
          value -= 10.0;
        else
          value -=1;
      }                 
      speicherA=1;
      speicherB=0;
      last = 7;
    }
    else if (digitalRead(A)==LOW && digitalRead(B)==LOW && speicherA==1 && speicherB==0)
    {
      if (menue == 1 || menue == 0)
      {
        if (digitalRead(back) == LOW)
          value -= 1.0;   
        else
          value -=0.1;
      }   
      if (menue == 2)
      {
        if (digitalRead(back) == LOW)
          value -= 10.0;
        else
          value -=1;
      }               
      speicherA=0;
      speicherB=0;
      last = 8;
    }
    return value;
}


void startPump(char* modus, char* saveCurrent, char* Pi, char* Po)
{
  char checkModus[10] = {0};
  char current[20] = {0};
  char powerIn[30] = {0};
  char powerOut[30] = {0};
  unsigned long time;
 
  strcpy(current, saveCurrent);
  strcpy(powerIn, Pi);
  strcpy(powerOut, Po);
 
  while (digitalRead(pump) == HIGH);
 
  time = millis();
 
  if (modus == "APC")
  {
    do
    {
      counter = 0;
      Serial2.println("AM P");
      delay(50);
      while (Serial2.available() >0)
        checkModus[counter++] = Serial2.read();       
   }
    while (checkModus[0] != 'A' && checkModus[1] != 'M' && checkModus[3] != 'P');
  }

  else if (modus == "ACC")
  {
    do
    {
      counter = 0;
      Serial2.println("AM C");
      delay(50);
      while (Serial2.available() >0)
        checkModus[counter++] = Serial2.read();
    }
    while (checkModus[0] != 'A' && checkModus[1] != 'M' && checkModus[3] != 'C');
  }
 
  else if (modus == "AGC")
  {
    do
    {
      counter = 0;
      Serial2.println("AM G");
      delay(50);
      while (Serial2.available() >0)
        checkModus[counter++] = Serial2.read();       
    }
    while (checkModus[0] != 'A' && checkModus[1] != 'M' && checkModus[3] != 'G');
  }
   
  digitalWrite(pump_led, HIGH);
 
  do
  {
    if (millis() >= 1000 + time)
    { 
     
      if (menue == 0 || menue == 1)
        getValue("LC 1", 0x03, 0x04, "LD current:", 8, current);
      getPower(0x07, 0x06, powerIn, powerOut);
      time = millis();
      }
   
    menueWahl();
   
    if (digitalRead(enter) == HIGH && auswahl == 2)
    {
      while(digitalRead(enter) == HIGH);
      showStatus();
    } 
    if (auswahl == 0 && digitalRead(enter) == HIGH)
    {
      while(digitalRead(enter) == HIGH);
      setValue(current, powerIn, powerOut);   
    }
  }
  while(digitalRead(pump) == LOW);
 
  strcpy(saveCurrent, current);
  strcpy(Pi, powerIn);
  strcpy(Po, powerOut);
   
  do
  {
     counter = 0;
     Serial2.println("AM O");
     delay(50);
     while (Serial2.available() >0)
       checkModus[counter++] = Serial2.read();   
  }
  while (checkModus[0] != 'A' && checkModus[1] != 'M' && checkModus[3] != 'O');
 
  digitalWrite(pump_led, LOW);

  while(digitalRead(pump) != LOW);
}

Go Up