Loading...
  Show Posts
Pages: 1 ... 3 4 [5]
61  International / Italiano / Re: Lettura di un encoder incrementale on: February 20, 2011, 11:58:55 am
ho fatto le modifiche come sugerito però adesso la lettura varia tra 0 e -1 oppure tra 0 e 1 la mia idea era che appena un canale andava a uno bloccava l'altro e canold serviva per legere il fronte di salita, non sono sicuro che
Code:
if ((can_a==HIGH) && (canold_a==LOW) && (can_b==LOW)) {
sia corretto
62  International / Italiano / Lettura di un encoder incrementale on: February 20, 2011, 11:02:21 am
Salve a tutti ragazzi, sono di nuovo qui con un nuovo problema nei miei vari esperimenti sto cercando di utilizare un encoer ricavato da un vecchio videoregistratore. Quindi ho scritto un skech per leggere i due canali (A e B). Quando mi fermo su un punto continua  a in crementare i conteggio ansichè fermarsi.Questo è l skech che ho scritto

Code:
#define AR_SIZE( a ) sizeof( a ) / sizeof( a[0] )
#define CAN_A 6 // ingresso encoder canale A
#define CAN_B 7 // ingresso encoder canale B
int  impulsi = 0; // impulsi encoder
void setup(){
 
  Serial.begin(9600);       // apre la porta seriale x il pc}
 }
 void loop(){
    boolean canold_a;
    boolean canold_b;
    boolean can_a;
    boolean can_b;
    can_a=digitalRead(CAN_A);//leggo in canale a dell'encoder
    can_b=digitalRead(CAN_B);//leggo in canale b dell'encoder
    if ((can_a==HIGH) && (canold_a==LOW) && (can_b==LOW)) {
     canold_a=HIGH;
     impulsi=impulsi + 1;
     Serial.println(impulsi);
    }
    if ((can_b==HIGH) && (canold_b==LOW) && (can_a==LOW)) {
     canold_b=HIGH;
     impulsi=impulsi - 1;
     Serial.println(impulsi);
    }
   
  if (can_a==LOW && can_b==LOW ) {
  canold_a=LOW;
  canold_b=LOW;
  }
 }
63  International / Italiano / Re: modulo DS1307 RTC on: February 19, 2011, 01:25:32 pm
Risolto i pin erano 4 e 5 degli ingressi analogici
grazie
64  International / Italiano / modulo DS1307 RTC on: February 19, 2011, 12:56:38 pm
Saluti a tutti ritorno con un nuovo problema. Ho comprato un modulo di orologgio dell' adafruit l'ho collegato all' arduino adoperando il loro file di esempio ma quando vado avedere nel nel monitor (com3) il tempo non varia
Questo è il programma:
#include <Wire.h>
#include <RTClib.h>

// Date and time functions using a DS1307 RTC connected via I2C and Wire lib
 
 
RTC_DS1307 RTC;
 
void setup () {
    Serial.begin(9600);
    Wire.begin();
    RTC.begin();
 
  if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
   RTC.adjust(DateTime(__DATE__, __TIME__));
  }
 
}
 
void loop () {
    DateTime now = RTC.now();
 
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
 
    Serial.print(" since 1970 = ");
    Serial.print(now.unixtime());
    Serial.print("s = ");
    Serial.print(now.unixtime() / 86400L);
    Serial.println("d");
 
    // calculate a date which is 7 days and 30 seconds into the future
    DateTime future (now.unixtime() + 7 * 86400L + 30);
 
    Serial.print(" now + 7d + 30s: ");
    Serial.print(future.year(), DEC);
    Serial.print('/');
    Serial.print(future.month(), DEC);
    Serial.print('/');
    Serial.print(future.day(), DEC);
    Serial.print(' ');
    Serial.print(future.hour(), DEC);
    Serial.print(':');
    Serial.print(future.minute(), DEC);
    Serial.print(':');
    Serial.print(future.second(), DEC);
    Serial.println();
 
    Serial.println();
    delay(3000);
}
Il mio dubbio è non cè nessuna indicazione  dei pin da configurare pe la comunicazione.
65  International / Italiano / Re: primo circuito stampato, come faccio i buchi? on: February 12, 2011, 01:18:56 pm
Io i fori li facciò appunto con il drimmel a un bricco ho comprato delle punte da 0,8 mm per diodi e resitenze  poi una da 1mm per componenti che hanno i piedini più grossi. Le punte è meglio che siano al colbalto perche se no durano poco.Inoltre devi stare attento a fare poca pressione perchè sono fragili.Tecno
66  Forum 2005-2010 (read only) / Italiano / Re:  'secondi' cannot be used as a function on: January 08, 2011, 04:39:36 pm
ok ti ringrazio domani vedo come fare
67  Forum 2005-2010 (read only) / Italiano / Re:  'secondi' cannot be used as a function on: January 08, 2011, 04:26:16 pm
il problema è in più generale come stampare sul diplay lcd un intero o qualsia numero con segno oppure senza .Quindi come convertire un intero a unsigned char il fatto di aver preso i secondi era solo un prova per vedere se funzionava.
Tecno
68  Forum 2005-2010 (read only) / Italiano / Re:  'secondi' cannot be used as a function on: January 08, 2011, 03:18:51 pm
Io ho cercato di usare per mio uso questa parte di codice

Code:
char millis_char[16];
   unsigned long millis_ulong = millis();
   sprintf(millis_char,"%lu", millis_ulong); // Works OK: sprintf uses char arrays.
   LCDA.DisplayString(0, 0, (unsigned char *)millis_char, 16);// The LCDA function requires unsigned char arrays.


che ho trovato in rete. che ho provato cosi nel mio programma funziona stampando sul dispay i millisecondi
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1287283512
tecnico
69  Forum 2005-2010 (read only) / Italiano / Re:  'secondi' cannot be used as a function on: January 08, 2011, 01:56:33 pm
Code:
#include <DFrobot_char.h>
#include <LCD12864RSPI.h>

#define AR_SIZE( a ) sizeof( a ) / sizeof( a[0] )
#define SCR 10 // scr collegato pin 10
unsigned char Titolo[]="Timer";
unsigned char Testo1[]="Minuti";
unsigned char Testo2[]="Secondi";
char secondi_char[16];
int tempo = 0;
int T_totale = 0;
int long minuti = 0;
int long secondi = 0;

void setup()
{
  LCDA.Initialise(); // INIT SCREEN
  //delay(5000);
   minuti = 1;              // tempo in minuti
  secondi = 45;            // tempo in secondi
  T_totale = (minuti * 60) + secondi;  //tempo totale in secondi
 Serial.begin(9600);       // apre la porta seriale x il pc
}

void loop() {
  LCDA.CLEAR(); //Cancella  display
  LCDA.DisplayString(0,2,Titolo,6);
  LCDA.DisplayString(1,1,Testo1,7);
  LCDA.DisplayString(2,1,Testo2,7);
   unsigned long secondi_ulong = secondi();
   sprintf(secondi_char,"%lu", secondi_ulong); // Works OK: sprintf uses char arrays.
   LCDA.DisplayString(0, 0, (unsigned char *)secondi_char, 16);// The LCDA function requires unsigned char arrays.

  delay(1500);
  while ((minuti > 0) || (secondi > 0))
  {
  delay(1000);
  T_totale = (minuti * 60) + secondi;  //tempo totale in secondi
  if (secondi > 0) {
    digitalWrite(SCR, 1);
    secondi--;
     Serial.println(minuti);  //stampa il valore sulla porta seriale
     Serial.println(secondi);  //stampa il valore sulla porta seriale
   }
    else {
         if (minuti > 0) {
           minuti--;
           secondi = 60;
          }
 }  
}
digitalWrite(SCR, 0);
}
70  Forum 2005-2010 (read only) / Italiano / Re:  'secondi' cannot be used as a function on: January 08, 2011, 01:33:22 pm
#include <DFrobot_char.h>
#include <LCD12864RSPI.h>

#define AR_SIZE( a ) sizeof( a ) / sizeof( a[0] )
#define SCR 10 // scr collegato pin 10
unsigned char Titolo[]="Timer";
unsigned char Testo1[]="Minuti";
unsigned char Testo2[]="Secondi";
char secondi_char[16];
int tempo = 0;
int T_totale = 0;
int long minuti = 0;
int long secondi = 0;

void setup()
{
  LCDA.Initialise(); // INIT SCREEN
  //delay(5000);
   minuti = 1;              // tempo in minuti
  secondi = 45;            // tempo in secondi
  T_totale = (minuti * 60) + secondi;  //tempo totale in secondi
 Serial.begin(9600);       // apre la porta seriale x il pc
}

void loop() {
  LCDA.CLEAR(); //Cancella  display
  LCDA.DisplayString(0,2,Titolo,6);
  LCDA.DisplayString(1,1,Testo1,7);
  LCDA.DisplayString(2,1,Testo2,7);
   unsigned long secondi_ulong = secondi();
   sprintf(secondi_char,"%lu", secondi_ulong); // Works OK: sprintf uses char arrays.
   LCDA.DisplayString(0, 0, (unsigned char *)secondi_char, 16);// The LCDA function requires unsigned char arrays.

  delay(1500);
  while ((minuti > 0) || (secondi > 0))
  {
  delay(1000);
  T_totale = (minuti * 60) + secondi;  //tempo totale in secondi
  if (secondi > 0) {
    digitalWrite(SCR, 1);
    secondi--;
     Serial.println(minuti);  //stampa il valore sulla porta seriale
     Serial.println(secondi);  //stampa il valore sulla porta seriale
   }
    else {
         if (minuti > 0) {
           minuti--;
           secondi = 60;
          }
 }  
}
digitalWrite(SCR, 0);
}
71  Forum 2005-2010 (read only) / Italiano / 'secondi' cannot be used as a function on: January 08, 2011, 12:43:26 pm
Saluti a tutti questo è il mio secondo post.Sto cercando di far visualizare un intero long sul lcd 12864 st7920 sto usando una libreria trovata su http://www.dfrobot.com/image/data/FIT0021/LCD12864RSPI.rar A scrivere un messaggio si riesce bene mi serve poter scrivere anche un numero qundi ho aggiunto queste righe :
#include <DFrobot_char.h>
#include <LCD12864RSPI.h>

#define AR_SIZE( a ) sizeof( a ) / sizeof( a[0] )
#define SCR 10 // scr collegato pin 10
unsigned char Titolo[]="Timer";
unsigned char Testo1[]="Minuti";
unsigned char Testo2[]="Secondi";
char secondi_char[16];
questo in void loop
 LCDA.DisplayString(2,1,Testo2,7);
   unsigned long secondi_ulong = secondi();
   sprintf(secondi_char,"%lu", secondi_ulong); // Works OK: sprintf uses char arrays.
   LCDA.DisplayString(0, 0, (unsigned char *)secondi_char, 16);// The LCDA function requires unsigned char arrays.
quando provo a compilarlo mida il seguente errore
 'secondi' cannot be used as a function
non riesco a capire il perche
Grazzie
72  Forum 2005-2010 (read only) / Italiano / lcd yb12864zb on: December 19, 2010, 06:12:40 am
Questo è il mio primo post percui faro degli errori. Ho comprato su ebay un lcd yb12864zb e volevo collegare ,ad arduino 2009, in modo seriale per non sprecare ingressi, Da arduino playground  ho provato la libreria  12864 Graphics LCD library che funziona con collegamento parallelo in fine  dalle rete ho scaricato un libreria (avevo postato l'indirizzo ma essendo il mio primo post non è stato accettato)che funziona in seriale però ha comandi per inviare una stringa ma mi serve poter inviare un intero quindi ho modificato la liberia cosi: nel heder ho aggiunto "typedef  int numero;" ,in .ccp questa routine ,che è la modifica di una gia esistente, "
//++++++++++++++++++++++inizi


void LCD12864RSPI::DisplayInt(int X,int Y,numero *ptr,int dat)
{
  int i;

  switch(X)
   {
     case 0:  Y|=0x80;break;

     case 1:  Y|=0x90;break;

     case 2:  Y|=0x88;break;

     case 3:  Y|=0x98;break;

     default: break;
   }

  WriteCommand(Y); //
  for(i=0;i<dat;i++)
    {
      WriteData(ptr);
    }
}

//+++++++++++++++++++++++Fine aggiunta tecno+++++++++++++++++++++++++++++
Questo è sketch che io scritto
#include <DFrobot_char.h>
#include <LCD12864RSPI.h>

#define AR_SIZE( a ) sizeof( a ) / sizeof( a[0] )
#define SCR 10 // scr collegato pin 10
int numero = 1;
unsigned char titolo[]="Cronometro ,";//

unsigned char en_char1[]="minuti ";//

unsigned char en_char2[]="Secondi ";//

unsigned char en_char3[]="tecno";//


int tempo = 0;
int T_totale = 0;
int minuti = 0;
int secondi = 0;

void setup()
{
  LCDA.Initialise(); // INIT SCREEN
  delay(100);
  //LCDA.DrawFullScreen(logo);//LOGO
  delay(5000);
   minuti = 1;              // tempo in minuti
  secondi = 45;            // tempo in secondi
  T_totale = (minuti * 60) + secondi;  //tempo totale in secondi
 Serial.begin(9600);       // apre la porta seriale x il pc
}

void loop() {
  LCDA.CLEAR();//Clear
delay(1000);
LCDA.DisplayString(1,0,titolo,16);
delay(1000);
LCDA.CLEAR();//Clear
LCDA.DisplayInt(1,0,minuti,16);
delay(1000);
LCDA.CLEAR();//Clear
LCDA.DisplayString(1,0,en_char3,16);
delay(500);
  while ((minuti > 0) || (secondi > 0)){
  delay(1000);
  T_totale = (minuti * 60) + secondi;  //tempo totale in secondi
  if (secondi > 0) {
    digitalWrite(SCR, 1);
    secondi--;
     Serial.println(minuti);  //stampa il valore sulla porta seriale
     Serial.println(secondi);  //stampa il valore sulla porta seriale
   }
    else {
         if (minuti > 0) {
           minuti--;
           secondi = 60;
          }
 }  
}
digitalWrite(SCR, 0);
}
quando provo a copilare il programma mi da:
skecth_dic17a.cpp: in fuction 'void loop()':
skecth_dic17a.cpp:39: error: invalid conversion from 'int'  to 'int*'
skecth_dic17a.cpp:39: error: initializing argument 3 of 'void lcd12864rspi::displayInt(int, int, int*, int)'
dopo varie prove non ho capito niente: Spero che voi mi potete dare un aiuto grazie a tutti
Pages: 1 ... 3 4 [5]