Progetto macchina etichettatrice

Salve ragazzi sono nuovo del forum e un novellino in tema di programmazione arduino.
Volevo rimettere in funzione una vecchia etichettatrice per bottiglie,

l’ elettronica è composta da un bottone di start (collegato ad un entrata digitale di arduino) una fotocellula che legge le etichette (letta tramite un partitore di 2 resistenze con etichetta da valore 800 senza il valore è 10) e un motore da 24 V che assorbe massimo 4 A comandato con un IRF640 N dalla porta 10.

Il ciclo della macchina dovrebbe essere: se premo il pulsante start il motore avanza non appena la fotocellula sente la presenza dell’ etichetta tiene il motore on fino alla fine dell etichetta la macchina poi resta in attesa che si prema il pulsante un altra volta per ricominciare il ciclo.

Il codice che avevo pensato é:

if (statebutton == HIGH) {digitalWrite (MOTORC, BUTTON);}

if ((statebutton == HIGH) && (valsensorf > 10)){
digitalWrite (MOTORC, HIGH);
if (valsensorf < 10) {
digitalWrite (MOTORC, LOW);
}else{
digitalWrite (MOTORC, HIGH);
}

Non funziona come vorrei cortesemente sapreste spiegarmi il perchè.

Ringrazio in anticipo tutte le persone che si interessano al mio problema.

Usa il tag [code] e posta lo sketch intero, tanto per incominciare.

Poi temo che "Non funziona" sia un po' troppo vago... È come andare dal dottore e dire "Non sto bene".

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento se non lo hai già fatto: Regolamento
Qui una serie di link utili, non inerenti al tuo problema:

SukkoPera:
Usa il tag [code] e posta lo sketch intero, tanto per incominciare.

Poi temo che “Non funziona” sia un po’ troppo vago… È come andare dal dottore e dire “Non sto bene”.

// Programma prova scheda etichettatrice

//*******************************************************************************
//Associo ogni pin ad un dispositivo I/O

const int SENSORF = A2; //Associo il pin A2 alla fotocellula etichette 1
const int BUTTON = 2; //Associo il pin 2 all’ pulsante di inizio ciclo di etichettatura
const int MOTORC = 9; //Associo il pin 9 al motore avanzamento carta

//Creo delle variabili *********************************************************************************

int val = 0; //Variabile creata per usare se necessaria
int valsensorf = 0; //Variabile assciata al valore della fotocellula lettura etichette 1
int statebutton = 0; //Variabile associata allo stato dell’ bottone start

//*******************************************************************************

void setup () {

pinMode (SENSORF, INPUT); //Dichiaro SENSORF un ingresso;
pinMode (BUTTON, INPUT); //Dichiaro START un ingresso
pinMode (MOTORC, OUTPUT); //Dichiaro MOTORC un uscita

}

//********************************************************************************

void loop () {

valsensorf = analogRead (SENSORF);
statebutton = digitalRead (BUTTON);

//*******************************************************************
if (statebutton == HIGH) {digitalWrite (MOTORC, BUTTON);}

if ((statebutton == HIGH) && (valsensorf > 10)){
digitalWrite (MOTORC, HIGH);
if (valsensorf < 10) {
digitalWrite (MOTORC, LOW);
}else{
digitalWrite (MOTORC, HIGH);
}
}

}

Non funziona nel senso che il motore continua ad andare

mentre dovrebbe andare solo quando si tiene premuto il pulsante o quando si preme il pulsante e la fotocellula sente la presenza dell’ etichetta.

USA I TAG PER IL CODICE!!!

if ((statebutton == HIGH) && (valsensorf > 10)){
  digitalWrite (MOTORC, HIGH);
  if (valsensorf < 10) {
    digitalWrite (MOTORC, LOW);
  }else{
    digitalWrite (MOTORC, HIGH);
  }
}

Come può il secondo if essere chiamato in causa, quando si trova dentro ad un altro if che verifica la condizione opposta?

Il classico caso che vedere anche come è fatta fisicamente la macchina farebbe Utile

icio:
Il classico caso che vedere anche come è fatta fisicamente la macchina farebbe Utile

Puoi farti un idea guardando il video a questo link: - YouTube

// Programma prova scheda etichettatrice
// aspetta pulsante start, poi motore=ON fino a fine etichetta, poi ferma motore e riaspetta start

//*******************************************************************************
const int SENS_F=	A2;	//fotocellula etichette      >10 => foglio etichetta presente
const int START	=	2;	//pulsante start             1=premuto
const int MOTOR	=	9;	//motore avanzamento carta   1=ON

#define SOGLIA_SENSORE   10     //
#define DELAY_STOP   100000     //uS
#define DELAY_KEY    100000     //uS

volatile char  state_sens	=	0;	//stato sensore 1=foglio presente
volatile char  old_sens		=	0;	//
volatile char  state_motor	=	0;	//stato motore 1=acceso

//*******************************************************************************
void setup () {
  pinMode (SENS_F, INPUT);	
  pinMode (START, INPUT);	
  pinMode (MOTOR, OUTPUT);
  digitalWrite (MOTOR, LOW);	
}

//*******************************************************************
void loop () {

while (digitalRead(START) == LOW) {}	//aspetta start
	digitalWrite (MOTOR, HIGH);
	state_motor=1;

while (state_motor) {
	read_sens();
	if (!state_sens && old_sens) { 	//fronte negativo foglio
		delayMicroseconds(DELAY_STOP);
		digitalWrite (MOTOR, LOW);
		state_motor=0;
	}

	old_sens = state_sens;
}
while (digitalRead(START) == HIGH) {}
	delayMicroseconds(DELAY_KEY);

} //loop

//*******************************************************************

void read_sens(void){
	if (analogRead(SENS_F) < SOGLIA_SENSORE){state_sens=0;} else {state_sens=1;}
}

//*******************************************************************

oh jnico, l'ho scritto per la tua macchina , provalo almeno..

Scusami sono stato in trasferta per lavoro e non ho avuto l' opportunità di leggere la tua risposta

ho provato poco fà il codice che hai postato, purtroppo non funziona correttamente

Il motore continua a girare e non si ferma ad etichetta conclusa

Ti ringrazio comunque