Go Down

Topic: LCD i2c Arduino nano LiquidCrystal_I2C [SOLUCIONADO] (Read 1 time) previous topic - next topic

cuchara

Hola !!

Hace ya algunos años que descubrí Arduino y me entretuve con algunos pequeños proyectos,
pero la falta de tiempo y el trabajo me alejaron completamente de la practica... por lo mismo deje muchos proyectos sin terminar.

Hoy retomo el curso  listo para terminar lo que comencé... pero los problemas comienzan,  :(  ya que fue hace mas de 5 años que no toco un Arduino.


Pues les platico mi problema esperando  me puedan dar un poco de su tiempo.

Tengo un pequeño código que trabaja con una 1602 LCD sin el Serial Interface Module un Servo, pot, y algunos botones. Este código ya estaba listo y funcionando   con una placa de Arduino uno.... pero hoy ya no cuento con el Arduino uno, en su lugar tengo un Arduino Nano usb y un LCD con el Serial Interface Module.  

Intento adaptar el código con una nueva librería que trabaja con el Serial Interface Module pero no lo logro ya que también tengo que pensar en el cambio de pines debido a que también cambie el Arduino uno por el Arduino Nano.



el código funciona así : generar  un valor con un potentiometer, Y registra en un botón después generar un segundo valor con el mismo  potentiometer, Y registrar el segundo valor en un segundo botón, Para que posteriormente cuando presioné el button1, el servo lea el valor de botón 1 y se mantiene en esa posición, Y cuando presiono el button 2, El servo lee el button2 y se mantiene en esa posición
y de esa manera poder designar valores en los botones


ejemplo
pongo el potentiometer  en  el valor 90  (lo que hace que el servo vaya a 90°)

yo preciono  el boton1   (el arduino lee el valor y lo almacena)

pongo el potentiometer  en  el valor 70  (lo que hace que el servo vaya a 70°)


presiono  el botón 2   (el arduino lee el valor y lo almacena)

después cada vez que yo empuje  el boton1 el arduino manda el servo a la posición 90°
y lo mismo para el boton 2 a la posición 70




este es el código original que trabajaba con Arduino Uno y la LCD sin el Modulo serial :

Code: [Select]

  #include<Wire.h>
  #include<LiquidCrystal_I2C.h>
 
  #include <Servo.h>
  
  #define bm0      6
  #define bm1    7
  #define bm2    8
  
  #define bmas      9
  #define bmenos    10
  #define bmod      5
  #define potpin    A0
  #define servopin  12
  

 LiquidCrystal_I2C lcd(0x27,16,2);
  
  int     pot = 0;
  int lastpot = 0;
  int  servoValue;
  Servo   myservo;
  int   modo = -1;
  int   mem0 = -1;
  int   mem1 = -1;
  int   mem2 = -1;
  int retardo = 1;                        // two memories to hold servo positions
  int    blik = 0;  // del is the param to manage the delay (1/speed) of the servo.
 /////////////////////////////////////////////////////////////////////////////////////////                                            
 void setup()
 {
  lcd.init();
  lcd.backlight();
  
  lcd.begin(16, 2);
    
  Serial.begin(9600);
  Serial.println("Start ..");

  pinMode(bmod, INPUT);
  pinMode(bm0, INPUT);  
  pinMode(bm1, INPUT);
  pinMode(bm2, INPUT);
  
  pinMode(bmas, INPUT);
  pinMode(bmenos, INPUT);

  
  digitalWrite(bmod, HIGH);
  digitalWrite(bm0, HIGH);  
  digitalWrite(bm1, HIGH);                // internal pullup
  digitalWrite(bm2, HIGH);
  
  // internal pullup
  digitalWrite(bmas, HIGH);               // internal pullup
  digitalWrite(bmenos, HIGH);             // internal pullup

  myservo.attach(13);
  myservo.write(90);                     // set servo to mid-point
 

 

                                      
    
    
  }
///////////////////////////////////////////////////////////////////////////////
  void loop()
  {
    {
    lcd.setCursor(10,1);lcd.print("B1");
    lcd.setCursor(7,1);lcd.print("B2");
    lcd.setCursor(13,1);lcd.print("B0");
    
    lcd.setCursor(3,0);lcd.print(pot);
    lcd.setCursor(0,0);lcd.print(retardo);
    
    lcd.setCursor(10,0);lcd.print(mem1);
    lcd.setCursor(7,0);lcd.print(mem2);
    lcd.setCursor(13,0);lcd.print(mem0);
    
    lcd.setCursor(3,1);lcd.print("Pot");
    lcd.setCursor(0,1);lcd.print("Sd");}
  
  
  
                                                                              
  


  
                                                                               // READ POT
  pot = analogRead(potpin);                                                    // 0..1023
  if (abs(lastpot -pot) < 3) pot = lastpot;
  else lastpot = pot;
  servoValue = map(pot,0,1023,0,180);
                                                                              // servoValue = pot; //4;

                                                                              // CHECK BUTTONS PRESSED
                                                                              // position buttons
  if (digitalRead(bm0) == LOW)                                                // pressed
     { if (mem0 == -1)                                                // not pressed before
     {mem0 = servoValue;}                                              // remember current value
   else {servoValue = mem0;}}                                              // set remembered value
    
  if (digitalRead(bm1) == LOW)                                                // pressed
   {if (mem1 == -1)                                                        // not pressed before
     {mem1 = servoValue;}                                              // remember current value
    else
     {servoValue = mem1;}}                                              // set remembered value
      
  if (digitalRead(bm2) == LOW)  
   {if (mem2 == -1)
    {mem2 = servoValue;}
    else
    {servoValue = mem2;}}
    
 

                                                                              // speed buttons
  if (digitalRead(bmas) == LOW)
       retardo = max(retardo-=1, 0);
  if (digitalRead(bmenos) == LOW)
        retardo = min(retardo+=1, 99);                                         // value can be tweaked
    Serial.println(retardo);
    

  Serial.print("SERVO: ");
  Serial.println(servoValue);
  Serial.print(" speed: ");
  Serial.println(retardo);
                                                                                // speed buttons


  int start = myservo.read();                                                 // get current position;
  int stop = servoValue;                                                      // new position
  if (start != stop)
  {
    int step = (stop - start)>0?1:-1;
    for (int i=start; i!=stop; i+= step)
    {
      myservo.write(i);
      delay(retardo);
      
      
      
    
    
     }
   }    
 }


No se que es lo que va mal  pero el servo no sigue el potenciometro  y los botones no registran los valores
parece que tiene algo que ver con los pines del arduino nano. Puedo usar los mismo como si fuera el arduino uno?

esta es la Lcd  

(Sd)  = velocidad
(Pot) = posición del potentiometer
(B1)  = Memoria
(B2)  = Memoria
(B3)  = Memoria








De antemano gracias

surbyte

Lee las normas del foro, 
edita tu título y quita la palabra ayuda.

cuchara

 :)  Todo era un problema con las conexiones ... intento eliminar el topic pero no veo como  :)

Hector_A

#3
Jun 28, 2016, 06:33 pm Last Edit: Jun 29, 2016, 04:28 am by Hector_A
Tu no lo puedes eliminar y nadie va a eliminarlo, a pesar de que algunos podemos.

Lo que te pido, si ya está solucionado, es que edites el título de tu primer mensaje poniendo [SOLUCIONADO] y así lo podremos cerrar para que no sea abierto dentro de quichicientos años por algún despistado.

:D

surbyte

El problema de usar Protoboards. Yo hace mucho que no los uso.

Go Up