Errore di compilazione

Buonasera a tutti, ho un piccolo problema con il programma qui sotto, mi trovo degli errori che non so risolvere, sapreste darmi una mano?
Grazie mille in anticipo!

#include "HX711.h"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 32 // OLED display height, in pixels

#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

HX711 scale(2, 3);

float calibration_factor = -1034; //valore che differisce per ogni tipo di cella di carico
float units;//misurazione peso
int peso_impostato;

void setup() {
  pinMode(1, INPUT);
  pinMode(2, INPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("Error..."));
    for (;;);
  }
  // the library initializes this with an Adafruit splash screen.
  display.display();
  display.clearDisplay();

  scale.set_scale();//inizializzazione
  scale.tare(); //tara
  scale.set_scale(calibration_factor); //calibrazione in base al valore sopra definito
}



void loop() {
  units = scale.get_units(); //esegue una singola lettura e la salva dentro units
  if (units < 0) {
    units = 0.00;
  }//se il peso è minore di zero units = a 0
  if (digitalRead(1)=HIGH) {
    peso_impostato++;
        delay(200);
        }
     if (digitalRead(2)=HIGH) {
    peso_impostato--;
        delay(200);
        }
display.setCursor(0, 2);
  display.print(peso_impostato);
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(0, 0);
  display.print(units);
  //display.setCursor(100, 0);
  display.print(" g.");
  display.display();
  delay(200);
if (units<400) {
    digitalWrite(3,HIGH);
    }
    if (units>500) {
    digitalWrite(4,HIGH);
    }
    if (units>400&units<500) {
    digitalWrite(5,HIGH);
    }
}

Ecco i messaggi di errore:
Arduino:1.8.9 (Windows Store 1.8.21.0) (Windows 10), Scheda:"Arduino/Genuino Uno"

In file included from sketch\finito.ino.cpp:1:0:

D:\Desktop\Macchina pesatrice\arduino\finito\finito.ino: In function 'void loop()':

D:\Documents\ArduinoData\packages\arduino\hardware\avr\1.8.1\cores\arduino/Arduino.h:40:14: error: lvalue required as left operand of assignment

#define HIGH 0x1

^

D:\Desktop\Macchina pesatrice\arduino\finito\finito.ino:44:22: note: in expansion of macro 'HIGH'

if (digitalRead(1)=HIGH) {

^~~~

D:\Documents\ArduinoData\packages\arduino\hardware\avr\1.8.1\cores\arduino/Arduino.h:40:14: error: lvalue required as left operand of assignment

#define HIGH 0x1

^

D:\Desktop\Macchina pesatrice\arduino\finito\finito.ino:48:25: note: in expansion of macro 'HIGH'

if (digitalRead(2)=HIGH) {

^~~~

exit status 1
Errore durante la compilazione per la scheda Arduino/Genuino Uno.

Questo report potrebbe essere più ricco di informazioni abilitando l'opzione
"Mostra un output dettagliato durante la compilazione"
in "File -> Impostazioni"

Dovrebbe bastare aggiungere un =. Uno solo è assegnazioni, mentre due == significa comparazione, quindi es.

if ( digitalRead(1) == HIGH ) {

Ciao.

Direi anche che questo è sbagliato:

if (units>400&units<500) {

va corretto in:

if (units>=400 && units<=500) {

non solo perché l'AND logico è "&&", ma anche perché nelle if() che hai messo, se "units" vale esattamente 400 o 500 non entra da nessuna parte...

Ok perfetto funziona, grazie mille!!
Colgo l'occasione per chiedervi un informazione, se volessi che lo scostamento dal peso fosse vincolato da una variabile, mi spiego meglio, se io ora vado a modificare il peso impostato devo anche modificare i due valori di confronto, come potrei fare in modo che ad esempio quei valori valgano ad esempio 50g quindi se 500( che ora consideriamo come peso impostato e maggiore di 500 più oppure meno 50 mi abilita le due uscite. Grazie mille!

passi per due variabili di appoggio

int pesoimposto=400; // oppure 500 oppure 1000, vedi tu
int tolleranza=50;
.
.
.
if (units>=pesoimposto-tolleranza and units <=pesoimposto+tolleranza).............

Sta sera provo. Grazie!!

#include "HX711.h"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 32 // OLED display height, in pixels

#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

HX711 scale(2, 3);

float calibration_factor = -1034; //valore che differisce per ogni tipo di cella di carico
float units;//misurazione peso
int peso_impostato=500;
int tolleranza=20;

void setup() {
   Serial.begin(9600);
  pinMode(1, INPUT);
  pinMode(2, INPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("Error..."));
    for (;;);
  }
  // the library initializes this with an Adafruit splash screen.
  display.display();
  display.clearDisplay();

  scale.set_scale();//inizializzazione
  scale.tare(); //tara
  scale.set_scale(calibration_factor); //calibrazione in base al valore sopra definito
}



void loop() {
  units = scale.get_units(); //esegue una singola lettura e la salva dentro units
  if (units < 0) {
    units = 0.00;
  }//se il peso è minore di zero units = a 0
 [color=blue] if (digitalRead(8)==HIGH) {
    peso_impostato+=1;
        delay(200);
        }
     if (digitalRead(9)==HIGH) {
    peso_impostato-=1;
        delay(200);[/color]
        }
display.setCursor(0, 2);
  display.print(peso_impostato);
   
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(0, 0);
  display.print(units);
  //display.setCursor(100, 0);
  display.print(" g.");
  display.display();
  Serial.println(peso_impostato);
  Serial.println(units);
  delay(200);
 
   
    
if (units<=peso_impostato-tolleranza) {
    digitalWrite(3,HIGH);
    }
    if (units>peso_impostato+tolleranza) {
    digitalWrite(4,HIGH);
    }
    if (units>=400&units<=500) {
    digitalWrite(5,HIGH);
    }
    
    
  
}

Ho un piccolo problema con l'incremento e il decremento del peso appena chiudo il contatto di uno dei due pin (8, 9) vedi parte evidenziata in blu per quanto sia veloce a premere e lasciare il pulsante lui incrementa di decine come posso ovviare al problema?

Dentro i tag code il colore blue viene perso :slight_smile: comunque:
Supponendo che tu abbia messo il dobounce hardware sul pulsante, la soluzione rapida è aumentare il delay, mettilo a un secondo e verifica.
Soluzione più complessa e che non prevede il delay è quella di memorizzare che hai già incrementato in una variabile booleana che azzeri quando rilasci il pulsante (ovvero nel'else dell'if della lettura del pulsante) in modo che ad una singola pressione corrisponda un singolo incremento.
Anche questa soluzione (a maggior ragione direi) presuppone il debounce hardware

Concorquoto, aumentare un poco il tempo dovrebbe bastare,

invece vedo un problema qui:

    }
    if (units>=400&units<=500) {
    digitalWrite(5,HIGH);
    }

and logico (non bit a bit) si scrive "&&" oppure "and"
un solo apersand (&) significa and bit a bit

Non posso aumentare il tempo per altri motivi ho cosi provato a fare ciò che mi hai detto ma presumo di sbagliare in qualche punto perchè ora il peso si autoincrementa senza sosta

#include "HX711.h"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

HX711 scale(2, 3);

float calibration_factor = -1034; //valore che differisce per ogni tipo di cella di carico
float units;//misurazione peso
int peso_impostato=500;
int tolleranza=20;
int p1=0;

void setup() {
   Serial.begin(9600);
  pinMode(1, INPUT);
  pinMode(2, INPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x78)) {
    Serial.println(F("Error..."));
    for (;;);
  }
  // the library initializes this with an Adafruit splash screen.
  display.display();
  display.clearDisplay();

  scale.set_scale();//inizializzazione
  scale.tare(); //tara
  scale.set_scale(calibration_factor); //calibrazione in base al valore sopra definito
}



void loop() {
  units = scale.get_units(); //esegue una singola lettura e la salva dentro units
  if (units < 0) {
    units = 0.00;
  }//se il peso è minore di zero units = a 0
   if (digitalRead(9)==HIGH) {
    p1,HIGH;
    }
       else{
        digitalWrite (p1,LOW);
       }
  if (digitalRead(p1)==HIGH) {
    peso_impostato+=1;
        }
     if (digitalRead(8)==HIGH) {
    peso_impostato-=1;
        delay(200);
        }
display.setCursor(0, 2);
  display.print(peso_impostato);
   
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(0, 0);
  display.print(units);
  //display.setCursor(100, 0);
  display.print(" g.");
  display.display();
  Serial.println(peso_impostato);
  Serial.println(units);
  delay(200);
 
   
    
if (units<=peso_impostato-tolleranza) {
    digitalWrite(3,HIGH);
    }
    if (units>peso_impostato+tolleranza) {
    digitalWrite(4,HIGH);
    }
    if (units>=400&units<=500) {
    digitalWrite(5,HIGH);
    }
    
    
  
}

>nikopoli: ... in ogni caso stai ignorando l'errore che ti ha segnalato Standardoil al post #8 ! Correggilo ...

Guglielmo

questo pezzo non ha alcun significato

 {
        p1, HIGH;
    }

compilare compila, ma non fa nulla, qualunque cosa ti aspetti

questo:

    {
        digitalWrite(p1, LOW);
    }

subito dopo, va a scrivere su un input (possibile, ma forse non è quello che vuoi)
anzi, corrreggo: tu non ha mai inizializzato il pin p1
che comunque sarebbe il pin 0,
stai usando un Arduino 1?
se sì sappi che il pin 0 fa parte della seriale, per l'esattezza RX, che essendo attivo basso (se ricordo bene) sarà sempre alto, ecco la ragione per la quale:

    if (digitalRead(p1) == HIGH)
    {
        peso_impostato += 1;
    }

sembra salire da solo

inoltre qui:

    if (digitalRead(8) == HIGH)
    {
        peso_impostato -= 1;
        delay(200);
    }

stai leggendo un pin del quale non hai fatto la pinmode

fermati un attimo e chiarisciti lo schema
fai le pinmode congruenti con lo schema
e vedrai che migliora....

#include "HX711.h"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

HX711 scale(2, 3);

float calibration_factor = -1034; //valore che differisce per ogni tipo di cella di carico
float units;//misurazione peso
int peso_impostato=500;
int tolleranza=20;
int statopulsante1=0;

void setup() {
   Serial.begin(9600);
  pinMode(8, INPUT);
  pinMode(9, INPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x78)) {
    Serial.println(F("Error..."));
    for (;;);
  }
  // the library initializes this with an Adafruit splash screen.
  display.display();
  display.clearDisplay();

  scale.set_scale();//inizializzazione
  scale.tare(); //tara
  scale.set_scale(calibration_factor); //calibrazione in base al valore sopra definito
}



void loop() {
  units = scale.get_units(); //esegue una singola lettura e la salva dentro units
  if (units < 0) {
    units = 0.00;
  }//se il peso è minore di zero units = a 0
   if (digitalRead(9)==HIGH) {
    statopulsante1=1;
    }
       else{
        statopulsante1=0;
       }
  if (digitalRead(statopulsante1)==HIGH) {
    peso_impostato+=1;
        }
     if (digitalRead(8)==HIGH) {
    peso_impostato-=1;
        delay(200);
        }
display.setCursor(0, 2);
  display.print(peso_impostato);
   
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(0, 0);
  display.print(units);
  //display.setCursor(100, 0);
  display.print(" g.");
  display.display();
  Serial.println(peso_impostato);
  Serial.println(units);
  delay(200);
 
   
    
if (units<=peso_impostato-tolleranza) {
    digitalWrite(5,HIGH);
    }
    if (units>peso_impostato+tolleranza) {
    digitalWrite(6,HIGH);
    }
    if (units>=400&&units<=500) {
    digitalWrite(7,HIGH);
    }
    
    
  
}

Quando ho pubblicato l'ultimo post si è ricaricata la pagina è solo allora ho visto l'errore & che ho corretto immediatamente solo che non ho potuto rispondere immediatamente siccome il forum non mi permetteva di inviare una risposta consecutiva all'altra per tot tempo..,
Comunque, probabilmente ho capito male, io ho generato una variabile che varia in base allo stato del pulsante la quale mi dovrebbe incrementare di 1 il valore del peso impostato, probabilmente mi sono perso qualcosa, ho visto adesso che avevo un po di pasticci con i pin mode e infatti li ho corretti, grazie!

continua a non andare vero?

questo:

    if (digitalRead(9) == HIGH)
    {
        statopulsante1 = 1;
    }
    else
    {
        statopulsante1 = 0;
    }

    if (digitalRead(statopulsante1) == HIGH)
    {
        peso_impostato += 1;
    }

comincia bene, leggendo correttamente un ingresso
ma poi scrivi una variabile a 0 o 1 per leggere il "pin" 0 o 1
di nuovo la seriale

esatto continua a non andare, io però non voglio fare nulla con il pin 0 o 1 io ho il pulsante collegato al pin 9 quando lo premo dovrebbe cambiarmi di stato la variabile del pulsante portandomela da 0 a 1 e la quale mi incrementa il peso impostato, ma continua a incrementare da solo senza sosta.

stai usando i pin in maniera incontrollata

riguardati lo schema, che non può essere corretto
usi anche i pin 2 e 3 che sono riservati alla bilancia

nikopoli:
io però non voglio fare nulla con il pin 0 o 1 io ho il pulsante collegato al pin 9 quando lo premo dovrebbe cambiarmi di stato la variabile del pulsante portandomela da 0 a 1 e la quale mi incrementa il peso impostato, ma continua a incrementare da solo senza sosta.

controlla i cablaggi, fai corrispondere i cablaggi ai pinmode, come ha detto Salvor Hardin evita di usare a muzzo i pin della bilancia, decidi cosa fa cosa, non usare i pin 0 e 1
metti dei led agli ingressi dei pulsanti, così hai la conferma che sia premuto oppure no
fai le pinMode corrette (e non a caso come adesso)
rileggi con calma il mio post 11, che ti spiega per filo e per segno perché stai erroneamente usando i pin 0 e 1
rispondi alla mia domanda su quale Arduino stai usando
e "come per magia" vedrai che le cose migliorano

Ho parlato

I pin 2 e 3 sono riguardanti la bilancia e non posso definirli nella pin mode perchè se li dichiaro come input nel monitor seriale non mi compare più nulla, il pin 4 chè è il pin di reset display non ho ancora potuto provarlo siccome sto ancora aspettando il display, non saprei come fare...
Ho appena riletto il post 11 ma io non li utilizzo i pin 0 e 1, quando scrivo cio
(digitalRead(9)==HIGH) {
statopulsante1=1;
}
mi aspetteri di variare il valore della variabile:
int statopulsante1=0;

#include "HX711.h"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

HX711 scale(2, 3);

float calibration_factor = -1034; //valore che differisce per ogni tipo di cella di carico
float units;//misurazione peso
int peso_impostato=500;
int tolleranza=20;
int statopulsante1=0;

void setup() {
   Serial.begin(9600);
  pinMode(8, INPUT);
  pinMode(9, INPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x78)) {
    Serial.println(F("Error..."));
    for (;;);
  }
  // the library initializes this with an Adafruit splash screen.
  display.display();
  display.clearDisplay();

  scale.set_scale();//inizializzazione
  scale.tare(); //tara
  scale.set_scale(calibration_factor); //calibrazione in base al valore sopra definito
}



void loop() {
  units = scale.get_units(); //esegue una singola lettura e la salva dentro units
  if (units < 0) {
    units = 0.00;
  }//se il peso è minore di zero units = a 0
   if (digitalRead(9)==HIGH) {
    statopulsante1=1;
    }
       else{
        statopulsante1=0;
       }
  if (digitalRead(statopulsante1)==HIGH) {
    peso_impostato+=1;
        }
     if (digitalRead(8)==HIGH) {
    peso_impostato-=1;
        delay(200);
        }
display.setCursor(0, 2);
  display.print(peso_impostato);
   
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(0, 0);
  display.print(units);
  //display.setCursor(100, 0);
  display.print(" g.");
  display.display();
  Serial.println(peso_impostato);
  Serial.println(units);
  delay(200);
 
   
if (units<=peso_impostato-tolleranza) {
    digitalWrite(5,HIGH);
    }
    else{ digitalWrite(5,LOW); }
    if (units>peso_impostato+tolleranza) {
    digitalWrite(6,HIGH);
    } 
    else{ digitalWrite(6,LOW); }
    if (units>=400&units<=500) {
    digitalWrite(7,HIGH);
    }
     else{ digitalWrite(7,LOW); }
  
}

  
}

Mi sono accorto soltanto ora che con la doppia & il programma non svolgeva più la funzione richiesta, tra le altre cosa ora ho aggiunto degli else al fondo che lavorano come dovrebbero, l'unico problema restante ora è sull'incremento e il decremento del peso impostato.
Nel frattempo grazie a quelli che mi hanno risposto e continuano ad aiutarmi !!!

beh, io ti ho risposto e aiutato

ma non posso continuare ad aiutarti, scusami ma non è proprio possibile

si dice "aiuta te stesso" ma significa che il primo passo, il più importante lo devi fare tu

ti è stato indicato più volte da più persone quali sono i tuoi errori, non è che possiamo fare molto di più, io ad esempio posso solo ripeterti parole non mie:

"stai leggendo dai pin della seriale"

non capisci perché?
io non ci posso fare nulla, lo studio del linguaggio di programmazione è compito e dovere tuo, io lo ho già assolto

se non vedi l'errore che ha fatto con la digitalRead che ti è stata indicata io (mo son sicuro anche altri) non posso fare altro che dirti di pensarci, e ri-pensare ai cablaggi e alle connessioni che hai fatto te lo ho già detto

sappi che mi rifiuto di scriverti io la parte corretta del programma, nessuno mi fa per me il mio lavoro e quindi io non lo faccio per gli altri, grazie
pertanto volendo comunque aiutarti ti posso dare una indicazione ancora: sotto forma di una domanda
perché per alzare il valore usi due digitalread e una variabile e invece per abbassarlo no?
ricordati che alzare ed abbassare sono operazioni gemelle...