Soy nuevo en la programacion con arduino. Hice un programa que es una balanza con una celda de carga y otro programa que hace funcionar un motor paso a paso y un servomotor.
Al juntar los 2 lo que hace es mostrar el valor de la balanza en el serial y no anda el motor paso a paso , y al sacar en el void loop la parte de la balanza el motor paso a paso anda.
#include <LiquidCrystal.h>
LiquidCrystal lcd(22, 24, 26, 28, 30, 32);
#include "HX711.h" //Libreria balanza
#define DOUT A1 //Pata del modulo
#define CLK A0 //Pata del modulo
HX711 balanza(DOUT, CLK); //Libreria balanza
#include <Servo.h> // Servo
Servo myservo; // Servo
int pos = 0; //posicion del servo
int steps = 5; // pata del pololu
int boton = 7; //pulsador
int enable = 3; //para que no se caliente el pololu
int estado = 0; // valor que guarda el estado del pulsador
int botonstate = 0; //estado anterior para la deteccionde flancos
int val = 0; //
void setup() {
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(6,0);
lcd.print("Peso:");
Serial.begin(9600); // Balanza
Serial.print("lectura del valor del ADC: "); // Balanza
Serial.println(balanza.read()); // Balanza
Serial.println("no ponga ningun objeto sobre la balanza"); // Balanza
Serial.println("destarando..."); // Balanza
Serial.println("..."); // Balanza
balanza.set_scale(348141.4833); // Balanza
balanza.tare(20); // Balanza
pinMode (steps, OUTPUT); // Motor paso a paso
pinMode (boton,INPUT);
myservo.attach(9); // Servo
}
void loop() {
Serial.print("Peso:");
Serial.print(balanza.get_units(20),3);
Serial.println("kg");
delay(200);
lcd.setCursor(4, 1);
lcd.print(balanza.get_units(20),3);
lcd.print("kg");
delay(200);
val = digitalRead(boton) ;
if (val == HIGH)
{
botonstate = (botonstate + 1) % 4;
delay (200);
}
switch (botonstate) {
case 0:
digitalWrite(enable, LOW);
digitalWrite(steps, HIGH);
delayMicroseconds(5);
digitalWrite(steps, LOW);
delayMicroseconds(950);
digitalWrite(enable, HIGH);
break;
case 1:
digitalWrite(enable, LOW);
digitalWrite(steps, HIGH);
delayMicroseconds(5);
digitalWrite(steps, LOW);
delayMicroseconds(1500);
digitalWrite(enable, HIGH);
break;
case 2:
digitalWrite(enable, LOW);
digitalWrite(steps, HIGH);
delayMicroseconds(5);
digitalWrite(steps, LOW);
delayMicroseconds(2400);
digitalWrite(enable, HIGH);
break;
case 3:
digitalWrite(enable, HIGH);
for (pos = 0; pos <= 180; pos += 1)
{ //va de 0º a 180º
myservo.write(pos); //le dice al sero de ir a la posicion de la variabble "pos"
delay(10); //espera 10ms
}
for (pos = 180; pos >= 0; pos -= 1)
{ //va de 180º a 0º
myservo.write(pos); //le dice al sero de ir a la posicion de la variabble "pos"
delay(10); //espera 10ms
botonstate = 0;
}
break;
}
}
Ultimo_acance_lel.ino (3.7 KB)