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 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 #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; } }
|
|
|
|
|
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
|
|
|
|
|
69
|
Forum 2005-2010 (read only) / Italiano / Re: 'secondi' cannot be used as a function
|
on: January 08, 2011, 01:56:33 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); }
|
|
|
|
|
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
|
|
|
|
|