[Risolto] Ricevere valori positivi-negativi in seriale da PC ad Arduino

Ciao a tutti

Sto cercando una soluzione da giorni al mio problema e non ho trovato topic simili :~

Sto provando a ricevere una stringa di numeri con arduino da PC via seriale. Il PC con Ubuntu tramite seriale invia dei valori ad arduino connesso via usb. I valori vanno da tot negativo a tot positivo.
Quando arduino riceve il valore lo utilizza per far aumentare o diminuire la luminosità di un led collegato su un pin PWM (ovviamente sto provando con valori fino a 255).

Per valori positivi tutto ok, la luminosità del led varia perfettamente rispetto al valore inviato.

Sono in crisi sui valori negativi.
Come faccio a far distinguere ad arduino per esempio un 150 da un -150?
(ovviamente non voglio far accendere un led con tensione negativa ma è un test che mi serve per capire se arduino riesce a leggere i valori negativi)

Quindi come faccio ad accendere il led A per valori positivi (con PWM) e il led B per valori negativi (con PWM)?

Grazie a tutti in anticipo :slight_smile:

prova ad aggiungere nel loop:

if (Serial.available()!=0){
  int lettura =Serial.parseInt() ;
  if(lettura<0){
    lettura=-lettura;
//accendi led1 con variabile lettura
}else{
//accendi led2 con variabile lettura
}
}
}

marcogiacomelli:
Ciao a tutti

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento

So che forse cambierebbe troppe cose ma potresti usare la funzione StringIndexOf e ottenedo una stringa da seriale

La seriale trasmette numeri di 8 Bit. Per poter avere numeri negativi potresti:

  1. interpretare un numero da 0 a 255 come un numero da -128 a +127
  2. mandare 2 valori dove il primo rappresenta il segno
  3. mandare una stringa che comprende il segno e tradurrlo con la funziona ATOI().

Ciao Uwe

hard_uino:
prova ad aggiungere nel loop:

Grazie hard_uino la tua soluzione è proprio quella che fa a caso mio :slight_smile: :slight_smile:
Ho provato le varie soluzioni appena ho potuto.

Il programma ora con la funzione “Serial.parseInt()” funziona perfettamente ed i led vanno a meraviglia sia per valori positivi che negativi.
Problema risolto :slight_smile:

Scrivo qui sotto il programma completo.
Grazie a tutti per le altre risposte

int led1 = 9;
int led2 =11;
void setup() {
  Serial.begin(9600); // apro la seriale
   delay(1000);

}

void loop() {
  if (Serial.available()!=0){
  int lettura =Serial.parseInt() ;
  
  //Se lettura ha un valore negativo accendi led 1
  if(lettura < 0){
    lettura=-lettura;
    analogWrite(led1, lettura);
    analogWrite(led2, 0);
    
//altrimenti se lettura ha un valore positivo accendi led 2
}else{
    analogWrite(led2, lettura);
    analogWrite(led1, 0);
}
}
}