come modificare un delay da seriale

salve a tutti,sono nuovo avrei bisogno di qualche consiglio.per lavoro dovrei implementare un codice che mi permetta di modificare da seriale un delay come e quando voglio…questo codice poi sara inserito in un altro codice che già funziona quindi non vorrei che fosse una cosa lunghissima.dopo vari tentativi sono quasi arrivato(forse)ad una soluzione ma mi da ancora dei problemini infatti la variabile che poi dovrei inserire nel delay in qualche modo risulta"sporca".qualcuno che ne capisce più di me?
grazie.

int T1 = 0;
int T2 = 10000;
const int MaxChars = 4;
char strValue[MaxChars+1];
int i = 0;
void setup()
{
Serial.begin(9600);
}
void loop () { 
 Serial.print ("T1 = ");
 Serial.print (T1);
 delay (T2);
}
void serialEvent()
{
 while(Serial.available())
{
 char ch = Serial.read();
  Serial.write(ch);
  strValue[i++] = ch;

           strValue[i] = 0;                               
           T1 = atoi(strValue);
           if(T1 > 0 && T1 < 1000000){
             Serial.write (T1);
           }
}
}

hi,

you were resetting strValue = 0 in your code

this code might work for you:

int T1 = 0;
int T2 = 10000;
const int MaxChars = 7;
char strValue[MaxChars+1];
int i = 0;

void setup()
{
 Serial.begin(9600);
}

void loop () {
	while(Serial.available())
	{
		if(i<=MaxChars){
			char ch = Serial.read();
			Serial.write(ch);
			strValue[i++] = ch;
		}
		else{
			break;
		}
	}
	
	strValue[i] = '\0';                               
    
	T1 = atoi(strValue);
    
	if(T1 > 0 && T1 < 1000000){
		Serial.write (T1);
    }
	
	Serial.print ("T1 = ");
	Serial.print (T1);
	delay (T2);
}

thank u but...that's what i can see in the serial monitor

T1 = 0999çT1 = 999

i need only to see t1=999 i wrote 999 and that's the result... :( and if i write another number it will be subtracted from the first nuber

T1T1 = 0999çT1 = 9998000T1 = -29008

how can it be possible?

nope,i need to write for ex:t1=999 and have that value in t1 then if i have to modify t1 and put in it for ex:10000 otherwise t1 will have the value of 999. do you understand? now i can write 999 in t1 but immediatly afterwards i will have 0 in t1

sorry, I purely wrote the code. but I checked it now on an actual board and I found the bug you talk about and fixed it.

THIS CODE SHOULD NOW WORK FOR YOU:

int T1 = 0;
int T2 = 10000;
const int MaxChars = 6;
char strValue[MaxChars+1];
int i = 0;

void setup()
{
 Serial.begin(9600);
}

void loop () {
int temp;

  while(Serial.available())
  {
    if(i<=MaxChars){
      char ch = Serial.read();
      Serial.write(ch);
      strValue[i++] = ch;
    }
    else{
      break;
    }
  }

  strValue[i] = '\0';
  temp = atoi(strValue);
    
  if(temp > 0 && temp < 1000000){
    T1=temp;
  }
  
  i = 0;
  
  Serial.print ("T1 = ");
  Serial.print (T1);
  delay (T2);
}

note that the mininum integer value will be 1 and maximum 999999

T1 = 010000T1 = 10000T1 = 100001900000T1 = 1000000T1 = 1000080000T1 = 14464T1 = 14464T1 = 14464190000T1 = 14464

the result :frowning: i hate so much this problem!!
i don’t understand why i put a number and the serial is only able to reply me with another number.
i just want to modify a delay from the serial monitor…can it be so difficult?
now he reply me only the first number i put in T1 and no one else and after a few attempt he put in T1 random numbers…i don’t understand

that one instead is a solution like but it has that sum or substraction bug too but only sometimes

int T1 = 0;
int T2 = 10000;
const int MaxChars = 7;
char strValue[MaxChars+1];
int i = 0;

void setup()
{
 Serial.begin(9600);
}

void loop () {
  while(Serial.available())
  {
    if(i<=MaxChars){
      char ch = Serial.read();
      Serial.write(ch);
      strValue[i++] = ch;
    }
    else{
      break;
    }
  }
  
  strValue[i] = "t1";                               
    
  T1 = atoi(strValue);
    
  if(T1 > 0 && T1 < 1000000){
    //Serial.write (T1);
    Serial.write ("___");
        }

        i = 0;     //RESET i before looping back
  
  Serial.print ("T1 = ");
  Serial.print (T1);
  delay (T2);
}

mad95:
salve a tutti,sono nuovo

Benvenuto. Essendo il tuo primo post, nel rispetto del regolamento, ti chiediamo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione … possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il su citato REGOLAMENTO… Grazie.
Qui una serie di link utili, non inerenti al tuo problema:

Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare ( pulsante </> ).
Altrimenti parte del codice può essere visualizzata male o mancare perché interpretato come attributo del testo stesso.

Leggi bene le varie funzioni della Serial. Esiste anche Serial.parseInt() e Serial.readUntil()

  1. come ti è stato detto, il codice, in conformità al REGOLAMENTO, punto 7, va racchiuso tra i tag CODE che, in fase di edit, ti inserisce il bottone </> … primo a sinistra. Provvedi quindi ad EDITARE i tuoi post precendenti ed ha racchiudere il codice negli appositi TAG.

  2. Come richiesto da Nid69ita, attendiamo la tua presentazione nell’apposita sezione

  3. infine, nella sezione in lingua Inglese si può scrivere SOLO in Inglese … quindi, per favore, la prossima volta presta più attenzione … il tuo post è stato spostato nell’opportuna sezione del forum “Italiano”.

Guglielmo

mi sono gia presentato ma per qualche motivo non avete letto la mia presentazione comunque grazie dell'aiuto

Te l'ho già scritto sotto la presentazione e te lo ripeto qui: ... invece di fare del sarcasmo e della polemica, potresti fare quanto ti viene richiesto nel semplice rispetto del regolamento !

Guglielmo

nid69ita: Leggi bene le varie funzioni della Serial. Esiste anche Serial.parseInt() e Serial.readUntil()

E tu hai letto quel che ti ho scritto ? Oppure devo venire da te io a farti il programma, visto che ti serve per lavoro. Anche io sono dei dintorni di Torino. Costo 45 euro l'ora+iva

Accidenti, oggi deve essere proprio giornata! :(

tutti un po nervosetti eh?mi spiace se non ho rispettato tutte le vostre regole e il vostro regolamento avevo solo bisogno di una mano in futuro cercherò di rispettare ogni vostra regola sempre che mi diate almeno il tempo per potermi ambientare…non so neanche come vedere se avete scritto alla mia presentazione quindi calmi tutti eh?grazie della calorosa accoglienza comunque

Anche se le regole non le hai rispettate, la mano te la stiamo dando, visto che ti ho proposto dei comandi della Serial per risolvere. Questo è periodo di studentelli che chiedono la pappa-fatta per i loro esami. Se ti aggiungi anche tu, che sei un professionista, siamo fregati. :confused: Mi pare ti abbiamo solo chiesto di presentarti e seguire delle regole.

si hai ragione ma non riuscivo a trovare la mia presentazione e continuavano ad arrivare appunto messaggi che mi chiedevano di presentarmi va beh mi spiace mi adeguerò al regolamento scusate...ok?

Ok, ma … lo ripeto ancora …

In conformità al regolamento, punto 7, devi editare i tui post (iniziale e #5) (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More → Modify che si trova in basso a destra del tuo post) e racchiudere il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

Guglielmo

ciao gb...perdonami ma sono veramente parecchio lento in ste cose non riesco a capire come devo editare il codice davvero potresti spiegarmelo con calma?almeno poniamo fine a questo problema...

fatto spero che ora cosi com'e vada bene... ora possiamo tornare a pensare al problema e non a com'è impaginato?

Hai guardato, come più volte ti è stato suggerito, il medodo parseInt() della classe Serial ? ... perché, senza complicarti troppo la vita, con quella serie di metodi risolvi piû semplicemente.

Guglielmo

allora vi serve un filo di backround il fatto è che io già un paio di anni che lavoro con arduino per un motivo o per l’altro comunque qui dove lavoro era arrivato uno stagista 3 settimane al quale ho “INSEGNATO” un filo di arduino comunque dovendo fare molti altri lavori ho lasciato la gestione autonoma a lui(sbagliatissimo) perchè copiando da una parte e dall’altra ha tirato fuori un codice che potrebbe anche essere figo peccato che non funzioni e che sia lunghissimo ora io ve lo allego io sto cercando di capire più o meno che cavolo ha scritto giusto per raccapezzarmi perchè ora che lui non ce più naturalmente devo tradurre il suo codice praticamente privo di ogni tipo di indicazione.se volete provare a buttarci un occhio intanto vedo come e se posso ancora integrare un parseint in questo suo codice che se funzionasse sarebbe perfetto ripeto peccato che non sia cosi…ve lo allego

int menuselect;

int out=0;
int serial=0;
char tastiera = 0;
int T1 ;
int T2 ;
int T3 = 10000 ;
const int MaxChars = 6;
char strValue[MaxChars+1];
int i = 0;



void setup() 
            { 
              //Initialize serial and wait for port to open:
              Serial.begin(9600); 
              // prints text and menu options for user to select from 
              Serial.println(F("Buongiorno "));
              delay(1000);
              Serial.println(F(" "));
              Serial.println(F("Scelga l'opzione desiderata"));
              Serial.println(F(" "));
              Serial.println(F("Menu"));
              Serial.println(F("---------")); 
              Serial.println(F("a. T1"));
              Serial.println(F("b. T2"));
            }
    
void loop()
{
  int temp;
  serial = Serial.read();
    tastiera = Serial.read();
   char ch;
   if (Serial.available())   //selezionando a
      {
        menuselect = Serial.read(); 
        if (menuselect = 'a')
          { 
            while(Serial.available())
            {
                if(i<=MaxChars)
                  {
                    char ch = Serial.read();
                    Serial.write(ch);
                    strValue [i++] = ch;
                  }
                else
                    {
                      break;
                    }
            }

            strValue[i] = '\0';
            temp = atoi(strValue);
    
            if(temp > 0 && temp < 1000000)
              {
                T1=temp;
                
              }
            Serial.print ("   T1 = ");
            Serial.print (T1);
            
            delay (T3);
          }
     }
      Serial.flush();
      if (Serial.available())  //selezionando b
         {
          menuselect = Serial.read(); 
          if (menuselect = 'b')
          { 
            while(Serial.available())
            {
              if(i<=MaxChars)
                {
                  char ch = Serial.read();
                  Serial.write(ch);
                  strValue [i++] = ch;
                }
              else
                  {
                   break;
                  }
            }
            strValue[i] = '\0';
            temp = atoi(strValue);
            if(temp > 0 && temp < 1000000)
              {
                T2=temp;
              }
            i = 0;
            Serial.print ("   T2 = ");
            Serial.print (T2);
            delay (T3);
          }
         }
    }