Go Down

Topic: piccola domandina su I2C (Read 1 time) previous topic - next topic

tronicman

#15
Nov 07, 2013, 11:40 pm Last Edit: Nov 07, 2013, 11:46 pm by tronicman Reason: 1
mah in verità nemmeno io.......cmq appena ho decommentato il Serial.begin ha smesso di dare i caratteri strani, che si vedevano sin dalla fase di setup, quando stampava "Starting System"

Code: [Select]
#include <SoftwareSerial.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad_I2C.h>
#include <Keypad.h>
#include "sms.h"
#include "SIM900.h"
#include "call.h"

SMSGSM sms;
CallGSM call;

char position; 
char phone_number[20];
char sms_text[160];
boolean started=false;
byte stat=0;

LiquidCrystal_I2C lcd(0x20,16,2);

#define I2CADDR 0x24

const byte ROWS = 4;
const byte COLS = 4;

char hexaKeys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = {7, 6, 5, 4};
byte colPins[COLS] = {3, 2, 1, 0};

Keypad_I2C customKeypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS, I2CADDR);

char password[5] = "1234";
char tmpKey[10];
int tmpKeyIndex = 0;
boolean login, a, aa, b, bb, c, cc;
int temp;
String mess;

void setup()
{
 
  lcd.init();                     
  lcd.backlight();
 
  pinMode(sensAA, INPUT);
  digitalWrite(sensAA, LOW);
 

  customKeypad.begin( );
  //Serial.begin(9600); ----------------->qui  ho decommentato
  lcd.print(F("Starting system"));
if (gsm.begin(9600)){
     lcd.setCursor(0,1);
     lcd.print(F("GSM status:READY"));
     started=true; 
  }else { lcd.setCursor(0,1);
          lcd.print(F("GSM status:IDLE"));
  }
  delay(500);
  lcd.clear();
};

void loop()
{
 
  temp = analogRead(0);
  temp = (5.0 * temp * 100.00) / 1024.0;
 
  checkALARM();
 
  if (!login) {lcd.setCursor(0,0);
               lcd.print(F("Password:"));
               lcd.setCursor(0,1);
               lcd.print(mess);
               lcd.print(F("  T:"));
               lcd.print(temp);
               lcd.print(F("  "));
               }
               
  char Key = customKeypad.getKey();
  if (Key){
      tmpKey[tmpKeyIndex] = Key;
      lcd.setCursor((9+tmpKeyIndex),0);
      tmpKeyIndex++;
      lcd.print(Key);
       
   
      if (String(Key)=="#") { lcd.setCursor(0,0);
                              lcd.print(F(" disconnesso")); 
                              delay(500);
                              lcd.clear();
                              login = false;
                              tmpKeyIndex = 0;}
                             
      if (String(Key)=="*") {         
        if (checkPass() || login == true) {
            lcd.setCursor(0,1);
            lcd.print(F("comando: "));
            checkCMD(String(tmpKey));
            login = true; }
          else {lcd.setCursor(0,1);
                lcd.print(F(" Password errata"));
                delay(500);
                lcd.clear();
                login = false; }
                   
         tmpKeyIndex = 0;
      }
     
  }


ora solo se premo il carattere  # mi compaiono i caratteri strani


leo72

1) perché includi le lib <Keypad_I2C.h>  e <Keypad.h>? La prima esclude l'altra.
2) forse la seriale è usata per il debug da una delle tante lib incluse.

tronicman

#17
Nov 07, 2013, 11:59 pm Last Edit: Nov 08, 2013, 12:03 am by tronicman Reason: 1
se non la includo mi da:

ALLARME_i2c:45: error: ‘makeKeymap’ was not declared in this scope
ALLARME_i2c.ino: In function ‘void loop()’:
ALLARME_i2c:101: error: ‘class Keypad_I2C’ has no member named ‘getKey’


e poi le due librerie keypad sono incluse anche nell esempio

leo72

La Keypad_I2C che conosco io include già di suo la Keypad e la Wire:
Code: [Select]
#include "Keypad.h"
#include "Wire.h"


https://github.com/joeyoung/arduino_keypads/tree/master/Keypad_I2C

tronicman

se apri l'esempio CustomKeypad_I2C.ino  nel link che mi hai postato ci sono entrambe le librerie incluse

Code: [Select]
/* @file CustomKeypad.pde
|| @version 1.0
|| @author Alexander Brevig
|| @contact alexanderbrevig@gmail.com
||
|| @description
|| | Demonstrates changing the keypad size and key values.
|| #
Use with I2C i/o G. D. (Joe) Young Feb 28/12
*/
#include <Keypad_I2C.h>
#include <Keypad.h> // GDY120705
#include <Wire.h>

leo72

Ho letto le note, hai ragione tu.  :smiley-sweat:
Quote
To use the Keypad_xxx libraries requires that the Keypad library be present and its header <Keypad.h> be included within your sketch.

tronicman

#21
Nov 08, 2013, 10:19 pm Last Edit: Nov 08, 2013, 10:35 pm by tronicman Reason: 1
continuando a fare prove.....sempre piu improbabili......mi è venuta come la sensazione che il problema provenisse dall' alimentazione.

Il mio progetto prevede un alimentatore 12V che alimenta il mio Arduino Mega (Vin GND) + un regolatore di tensione (preso da Arduino Basic Connections 12V -> 5V per non attingere tutto dall'arduino)  + shield GSM + shield 4 Relay + circuito I2C che gestisce LCD e Keypad.

-Se accendo il tutto senza il cavo usb inserito nel Arduino i caratteri strani si presentano subito, già nelle prime righe del setup dove stampo "Starting System" senza riuscire a vedere la seconda riga dove stampo "GSM: ready".......aspetto qualche secondo, premo il tasto Reset di arduino e parte tutto arrivando al loop.

-Se invece accendo il tutto con il cavo usb inserito nell'arduino mi salta i problemi iniziali arrivando al loop in modo corretto.

Comunque vada se premo il tasto # inizia a sbarellare



vorrei aggiungere che il 7805 che regola i 12v è alettato con un dissipatore di alluminio di dim. 5x3cm alto 1,5cm e scalda di brutto

ho una porzione di codice che legge la temp. proveniente da un LM35......senza usb collegata scrive 8°-9° (strano sono troppo pochi cmq)......se collego l'usb 10°-11°........se la stacco immediatamente continua riscrive 8°-9°

Testato

La variazione sulla lettura analogica non ti sta indicando una differenza di temperatura, ma ma differenze si due alimentatori perché cambia il riferimento pure il calcolo. Monitora la tensione con un tester
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

tronicman


La variazione sulla lettura analogica non ti sta indicando una differenza di temperatura, ma ma differenze si due alimentatori perché cambia il riferimento pure il calcolo. Monitora la tensione con un tester



cioè guardo se ci sono variazioni sull'erogazione di corrente sia sull'uscita dell ali a 12v che del regolatore a 5v......devo vedere se rimangono stabili ?


aggiungo una info:

AVR Memory Usage
----------------
Device: Unknown

Program:   22628 bytes
(.text + .data + .bootloader)

Data:       2188 bytes
(.data + .bss + .noinit)

leo72


aggiungo una info:

AVR Memory Usage
----------------
Device: Unknown

Program:   22628 bytes
(.text + .data + .bootloader)

Data:       2188 bytes
(.data + .bss + .noinit)


Tombola!
La SRAM del 328 è di soli 2048 byte. Tu già all'avvio hai dei dati che sicuramente andranno salvati in porzioni di memoria inesistente, con tutti i problemi del caso.

tronicman

Io ho un Atmega 2560.....quanti byte ha??

leo72

Come non detto, la MEGA ha 8K di RAM

Testato

#27
Nov 10, 2013, 10:17 am Last Edit: Nov 10, 2013, 10:19 am by Testato Reason: 1
x tronic: non credo sia il problema delle alimentaizoni, ti stavo solo spiegando perche' vedi quella variazione sulla temp, e' normale quando passi da un alimentazione ad un altra visto che e' un sensore analogico e ti cambia la tensione.
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

tronicman

#28
Nov 11, 2013, 12:06 pm Last Edit: Nov 11, 2013, 12:11 pm by tronicman Reason: 1
Ragazzi forse ce l'ho fatta !!!!!!!

Ho iniziato a togliere piu codice possibile, tutto il loop e parti del setup......per esclusione sono arriato al dannatissimo

lcd.backlight();

tolto quello nonho piu caratteri strani ne all'avvio e nemmeno se premo il famoso tasto # che sembrava essere maledetto, non so spiegarmelo.

Ma come può essere possibile???


ps
magicamente il regolatore 7805 è tornato a scaldare poco insomma il giusto, la temperatura segnata dal LM35 è tornata reale e non artica

Testato

#29
Nov 11, 2013, 05:00 pm Last Edit: Nov 11, 2013, 05:04 pm by Testato Reason: 1
che pin usi per accendere e spegnere la retroilluminazione ? hai messo una resistenza di limitazione ?
nella mia libreria puoi usare qualsiasi pin, ma lo devi dichiarare insieme a righe e colonne, non so nella tua, cmq nel codice postato non c'e' dichiarato il pin, quindi non serve il comando backlight, il led di retroilluminazione lo tieni acceso fisso ?
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Go Up