aqui adjunto el codigo, no me deja en el anterior post xq exede el numero de caracteres.
#include <Servo.h>
#include "Nextion.h"
#include <Wire.h> // libreria
void nporcionesPushCallback(void *ptr); //botones pantalla nextion
void bsiguientePushCallback(void *ptr);
void biniciarPushCallback(void *ptr);
void tm0TimerCallback(void *ptr);
void bpausePushCallback(void *ptr);
void bpl1PushCallback(void *ptr);
#define REXTRACTOR 31 // se definen los pines donde se conectaran los reles (modulo 8 relees
#define RMOTOR 32
#define RCHISPA 33
#define RGAS 34
#define RBOMBA2 35
#define RBOMBA3 36
#define RBOMBA4 37
#define RREVOLVER 38
#define ON LOW
#define OFF HIGH
Servo SERVOGAS;
Servo SERVOVELOCIDAD;
Servo SERVOBRAZO;
const int SENSOR = 3;
const int SENSORPALETA = 18;
int plato = 0, transcurrido = 0, sensorAct = 0, posServo = 50;
unsigned long time_now = 0;
//declarar todas las variables
NexButton bpl1 = NexButton(0, 2, "bpl1");
NexButton bpl2 = NexButton(0, 3, "bpl2");
NexButton bpl3 = NexButton(0, 4, "bpl3");
NexButton bpl4 = NexButton(0, 5, "bpl4");
NexButton bpl5 = NexButton(0, 6, "bpl5");
NexButton bpl6 = NexButton(0, 7, "bpl6");
NexButton bpl7 = NexButton(0, 8, "bpl7");
NexButton bpl8 = NexButton(0, 9, "bpl8");
NexButton bpl9 = NexButton(0, 10, "bpl9");
NexButton bpl10 = NexButton(0,11, "bpl110");
NexButton bpl11 = NexButton(0, 12, "bpl11");
NexTimer tm0 = NexTimer(2, 6, "tm0");
NexNumber nporciones = NexNumber(1, 1, "nporciones");
NexButton bsiguiente = NexButton(1, 5, "bsiguiente");
NexButton bpause = NexButton(2, 7, "bpause");
NexButton biniciar = NexButton(2, 8, "biniciar");
NexText tproceso = NexText(2, 1, "tproceso");
NexText tpaso = NexText(2, 3, "tpaso");
NexText ttiempo_total = NexText(2, 11, "ttiempo_total");
NexText ttiempo_paso = NexText(2, 10, "ttiempo_paso");
int APAGADO = 80, BAJO = 60, MEDIO = 50 , ALTO = 30; // VARIABLES SEVOS
int VDETENIDO = 0, VESTACIONAMIENTO = 40, VLENTA = 20, VMEDIA = 60, VRAPIDA = 100;
int GUARDADO = 50, EXTENDIDO = 116;
int paro = 0, rev = 0,paleta = 0, contRev = 0, encendida = 0;
char buffer[100] = {0};
int tiempo = 40;
int tiempo1 = 20;
int estadoMotor = OFF, estadoVelocidad = VDETENIDO, estadoGas = APAGADO, estadoValvulaGas = OFF, estadoBomba2 = OFF,estadoBomba3 = OFF,estadoBomba4 = OFF,estadoRevolver = OFF ;
NexTouch *nex_listen_list[] =
{
&bpl1,
&bpl2,
&bpl3,
&bpl4,
&bpl5,
&bpl6,
&bpl7,
&bpl8,
&bpl9,
&bpl10,
&bpl11,
&nporciones,
&bsiguiente,
&tproceso,
&bpause,
&biniciar,
&tpaso,
&tm0,
NULL
};
void nporcionesPushCallback(void *ptr)
{
//dbSerialPrintln("n0PopCallback");
nporciones.setValue(1);
}
void bsiguientePushCallback(void *ptr)
{
uint32_t number;
tproceso.setText("proceso");
}
void biniciarPushCallback(void *ptr)
{
tpaso.setText("biniciar paso");
if(!encendida) {
encender();
encendida = 1;
}else{
reanudar();
}
tm0.enable();
}
void bpausePushCallback(void *ptr)
{
dbSerialPrintln("pausado");
tm0.disable();
pausar();
}
void bpl2PushCallback(void *ptr)
{
transcurrido = 0;
plato= 1; //VARIA SEGUN EL CASE
tiempo=40;
}
void tm0TimerCallback(void *ptr)
{
if(tiempo>0){
switch(plato){
case 1: dbSerialPrintln(transcurrido);
if( transcurrido == 3 ) {
digitalWrite(RMOTOR, ON);
SERVOVELOCIDAD.write(VLENTA);
SERVOGAS.write(MEDIO);
}
if( transcurrido == 5 ) {
digitalWrite(RMOTOR, ON);
SERVOVELOCIDAD.write(VMEDIA);
//moverServo(SERVOBRAZO, EXTENDIDO, 45);
}
if ( transcurrido == 10 ) {
rev=1;
attachInterrupt(digitalPinToInterrupt(SENSOR), fincarrera, RISING );
}
}
break;
case 2: break;
default: break;
}
transcurrido++;
tiempo--;
char sttotal = secondsToString(tiempo);
ttiempo_total.setText(&sttotal);
dbSerialPrintln(digitalRead(SENSORPALETA));
}else{
apagar();
}
}
void encender() {
encendida=1;
digitalWrite(RGAS, ON);
SERVOGAS.write(BAJO);
digitalWrite(REXTRACTOR, ON);
prenderyapagar(RCHISPA, 2);
}
void revolver() {
digitalWrite(RMOTOR, OFF);
moverServo(SERVOBRAZO, EXTENDIDO, 45);
delay (700); //delay espera servo posicione
digitalWrite(RREVOLVER, ON);
}
void reiniciar() {
digitalWrite(RREVOLVER, OFF);
moverServo(SERVOBRAZO, GUARDADO, 45);
pausa(1);
digitalWrite(RMOTOR, ON);
dbSerialPrintln("motor on");
}
void pausar() {
//guardar variables
estadoMotor = digitalRead(RMOTOR);
estadoValvulaGas = digitalRead(RGAS);
estadoBomba2 = digitalRead(RBOMBA2);
estadoBomba3 = digitalRead(RBOMBA3);
estadoBomba4 = digitalRead(RBOMBA4);
estadoRevolver = digitalRead(RREVOLVER);
estadoGas = SERVOGAS.read();
//pausar
digitalWrite(RMOTOR, OFF);
digitalWrite(RGAS, OFF);
digitalWrite(RBOMBA2, OFF);
digitalWrite(RBOMBA3, OFF);
digitalWrite(RBOMBA4, OFF);
SERVOGAS.write(APAGADO);
SERVOVELOCIDAD.write(VDETENIDO);
rev=contRev=0;
if(estadoRevolver==0){
attachInterrupt(digitalPinToInterrupt(SENSORPALETA), finpaleta, RISING );
}
}
void pausa(int t){
for(int i=0; i<t; i++){
delay(1000);
transcurrido++;
tiempo--;
char sttotal = secondsToString(tiempo);
ttiempo_total.setText(&sttotal);
}
}
void reanudar(){
digitalWrite(RMOTOR, estadoMotor);
digitalWrite(RBOMBA2, estadoBomba2);
digitalWrite(RBOMBA3, estadoBomba3);
digitalWrite(RBOMBA4, estadoBomba4);
//digitalWrite(RREVOLVER, estadoRevolver);
digitalWrite(RGAS, estadoValvulaGas);
SERVOGAS.write(estadoGas);
prenderyapagar(RCHISPA, 2);
SERVOVELOCIDAD.write(estadoVelocidad);
if(estadoRevolver==0){
moverServo(SERVOBRAZO, EXTENDIDO, 45);
delay (1000);
digitalWrite(RREVOLVER, ON);
}else{
digitalWrite(RREVOLVER, estadoRevolver);
}
}
void apagar() {
encendida = 0;
SERVOGAS.write(APAGADO);
digitalWrite(REXTRACTOR, OFF);
digitalWrite(RGAS, OFF);
digitalWrite(RMOTOR, OFF);
SERVOGAS.write(APAGADO);
SERVOVELOCIDAD.write(VDETENIDO);
moverServo(SERVOBRAZO, GUARDADO, 45);
}
void prenderyapagar(int pin, int tiempo) {
digitalWrite(pin, ON);
for(int i=0; i<tiempo; i++){
pausa(1);
}
digitalWrite(pin, OFF);
dbSerialPrintln("chispa on-off");
}
char secondsToString(int seconds)
{
char buffer[5];
sprintf(buffer, "%i:%i", seconds/60, seconds%60);
return *buffer;
}
void setup() {
Serial.begin(9600);
nexInit();
pinMode(REXTRACTOR, OUTPUT);
pinMode(RMOTOR, OUTPUT);
pinMode(RCHISPA, OUTPUT);
pinMode(RGAS, OUTPUT);
pinMode(RBOMBA2, OUTPUT);
pinMode(RBOMBA3, OUTPUT);
pinMode(RBOMBA3, OUTPUT);
pinMode(RREVOLVER, OUTPUT);
pinMode(PARO, INPUT);
pinMode(SENSOR, INPUT);
digitalWrite(REXTRACTOR,OFF);
digitalWrite(RMOTOR,OFF);
digitalWrite(RCHISPA,OFF);
digitalWrite(RGAS,OFF);
digitalWrite(RBOMBA2,OFF);
digitalWrite(RBOMBA3,OFF);
digitalWrite(RBOMBA4,OFF);
digitalWrite(RREVOLVER,OFF);
digitalWrite(BUZZER,LOW);
SERVOGAS.attach(4);
SERVOVELOCIDAD.attach(6);
SERVOBRAZO.attach(8);
SERVOGAS.write(APAGADO);
SERVOVELOCIDAD.write(VDETENIDO);
SERVOBRAZO.write(GUARDADO);
nporciones.attachPush(nporcionesPushCallback);
bsiguiente.attachPush(bsiguientePushCallback);
bpause.attachPush(bpausePushCallback);
biniciar.attachPush( biniciarPushCallback);
bpl2.attachPush( bpl2PushCallback);
tm0.attachTimer(tm0TimerCallback);
}
void fincarrera(){
dbSerialPrintln("sensor leido");
if(rev){
if(sensorAct==0){
SERVOVELOCIDAD.write(VESTACIONAMIENTO);
}
sensorAct++;
}
if(sensorAct>3){
//delay(500);
sensorAct=0;
rev=contRev=0;
detachInterrupt(digitalPinToInterrupt(SENSOR));
revolver();
}
}
void finpaleta(){
detachInterrupt(digitalPinToInterrupt(SENSORPALETA));
digitalWrite(RREVOLVER, OFF);
moverServo(SERVOBRAZO, GUARDADO, 45);
}
void moverServo(Servo servo, int fin, int velocidad) {
int inicio = posServo;
moverServo(servo, inicio, fin, velocidad);
}
void moverServo(Servo servo, int inicio, int fin, int velocidad) {
if(inicio<fin){
for(int pos=inicio; pos<=fin; pos++) {
servo.write(pos);
delay(velocidad);
}
}else{
for(int pos=inicio; pos>=fin; pos--) {
servo.write(pos);
delay(velocidad);
}
}
posServo = fin;
}
void loop() {
nexLoop(nex_listen_list);
if(paro) { // si se pulsa el boton de paro
apagar();
}
}