|
A klónok CH340 Soros-USB illesztőjének drivere ( Letöltés)
Mint írtam, a videó alapján csináltam, és ott csak az rx-rx, és tx-tx lábakat köti össze, meg persze az áramot. De egy uno-ra simán felmegy így, csak a due-re nem...
Sziasztok!
Azt szeretném kérdezni, hogy bascom vagy arduino alatt valaki használt-e már SNMP-t ? Már 3 hónapja csak szenvedek de nem jutottam semmire. Feltettem egy arduino-t a házfalára kintre dobozba tettem rá pár érzékelőt és azok adatait szeretném lekérdeni úgy hogy BannanaPi-n futó nagios kérdezgetné le. Egy arduino mega2560, vagy egy uno lenne a cél panel egy w5100 shilded, vagy esetleg enc-vel. Tudna valaki segíteni ebben ?
Üdv.
Hellosztok van ez a program kódom és olyan bajom van vele hogy szematikailag jó az az a program lefut de nem csinálja amit kell . Hiába írom be pl . : V 5 + r . Semmit nem csinál vissza ad értékeket de a kimeneteken nincs jel .
#include <avr/pgmspace.h>
const static uint8_t konami_font[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xBE, 0xBE, 0x0E, 0x00, 0x00,
0x00, 0x00, 0x0E, 0x06, 0x00, 0x0E, 0x06, 0x00,
0x00, 0x28, 0xFE, 0xFE, 0x28, 0xFE, 0xFE, 0x28,
0x00, 0x08, 0x5C, 0x54, 0xFE, 0x54, 0x74, 0x20,
0x00, 0x84, 0x4A, 0x24, 0x10, 0x48, 0xA4, 0x42,
0x00, 0x60, 0x9C, 0x9A, 0xB2, 0xEC, 0x40, 0xA0,
0x00, 0x00, 0x16, 0x0E, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x38, 0x7C, 0xC6, 0x82, 0x00, 0x00,
0x00, 0x00, 0x00, 0x82, 0xC6, 0x7C, 0x38, 0x00,
0x00, 0x00, 0x44, 0x28, 0x10, 0x28, 0x44, 0x00,
0x00, 0x00, 0x10, 0x10, 0x7C, 0x10, 0x10, 0x00,
0x00, 0x00, 0x80, 0xE0, 0x60, 0x00, 0x00, 0x00,
0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00,
0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0x00,
0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02,
0x00, 0x38, 0x7C, 0xC2, 0x82, 0x86, 0x7C, 0x38,
0x00, 0x00, 0x80, 0x84, 0xFE, 0xFE, 0x80, 0x80,
0x00, 0xC4, 0xE6, 0xF2, 0xB2, 0xBA, 0x9E, 0x8C,
0x00, 0x40, 0xC2, 0x92, 0x9A, 0x9E, 0xF6, 0x62,
0x00, 0x30, 0x38, 0x2C, 0x26, 0xFE, 0xFE, 0x20,
0x00, 0x4E, 0xCE, 0x8A, 0x8A, 0x8A, 0xFA, 0x70,
0x00, 0x78, 0xFC, 0x96, 0x92, 0x92, 0xF2, 0x60,
0x00, 0x06, 0x06, 0xE2, 0xF2, 0x1A, 0x0E, 0x06,
0x00, 0x6C, 0x9E, 0x9A, 0xB2, 0xB2, 0xEC, 0x60,
0x00, 0x0C, 0x9E, 0x92, 0x92, 0xD2, 0x7E, 0x3C,
0x00, 0x00, 0x00, 0x6C, 0x6C, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0xEC, 0x6C, 0x00, 0x00, 0x00,
0x00, 0x00, 0x10, 0x38, 0x6C, 0xC6, 0x82, 0x00,
0x00, 0x00, 0x28, 0x28, 0x28, 0x28, 0x28, 0x00,
0x00, 0x00, 0x82, 0xC6, 0x6C, 0x38, 0x10, 0x00,
0x00, 0x0C, 0x0E, 0xA6, 0xA6, 0xB6, 0x1E, 0x0C,
0x00, 0x38, 0x7C, 0xC6, 0x82, 0x9A, 0xDE, 0x5C,
0x00, 0xF8, 0xFC, 0x26, 0x22, 0x26, 0xFC, 0xF8,
0x00, 0xFE, 0xFE, 0x92, 0x92, 0x92, 0xFE, 0x6C,
0x00, 0x38, 0x7C, 0xC6, 0x82, 0x82, 0xC6, 0x44,
0x00, 0xFE, 0xFE, 0x82, 0x82, 0xC6, 0x7C, 0x38,
0x00, 0xFE, 0xFE, 0x92, 0x92, 0x92, 0x92, 0x82,
0x00, 0xFE, 0xFE, 0x12, 0x12, 0x12, 0x12, 0x02,
0x00, 0x38, 0x7C, 0xC6, 0x82, 0x92, 0xF2, 0xF2,
0x00, 0xFE, 0xFE, 0x10, 0x10, 0x10, 0xFE, 0xFE,
0x00, 0x00, 0x82, 0x82, 0xFE, 0xFE, 0x82, 0x82,
0x00, 0x40, 0xC0, 0x80, 0x80, 0x80, 0xFE, 0x7E,
0x00, 0xFE, 0xFE, 0x30, 0x78, 0xEC, 0xC6, 0x82,
0x00, 0xFE, 0xFE, 0x80, 0x80, 0x80, 0x80, 0x80,
0x00, 0xFE, 0xFE, 0x1C, 0x38, 0x1C, 0xFE, 0xFE,
0x00, 0xFE, 0xFE, 0x1C, 0x38, 0x70, 0xFE, 0xFE,
0x00, 0x7C, 0xFE, 0x82, 0x82, 0x82, 0xFE, 0x7C,
0x00, 0xFE, 0xFE, 0x22, 0x22, 0x22, 0x3E, 0x1C,
0x00, 0x7C, 0xFE, 0x82, 0xA2, 0xE2, 0x7E, 0xBC,
0x00, 0xFE, 0xFE, 0x22, 0x62, 0xF2, 0xDE, 0x9C,
0x00, 0x4C, 0xDE, 0x92, 0x92, 0x96, 0xF4, 0x60,
0x00, 0x00, 0x02, 0x02, 0xFE, 0xFE, 0x02, 0x02,
0x00, 0x7E, 0xFE, 0x80, 0x80, 0x80, 0xFE, 0x7E,
0x00, 0x1E, 0x3E, 0x70, 0xE0, 0x70, 0x3E, 0x1E,
0x00, 0xFE, 0xFE, 0x70, 0x38, 0x70, 0xFE, 0xFE,
0x00, 0xC6, 0xEE, 0x7C, 0x38, 0x7C, 0xEE, 0xC6,
0x00, 0x00, 0x0E, 0x1E, 0xF0, 0xF0, 0x1E, 0x0E,
0x00, 0xC2, 0xE2, 0xF2, 0xBA, 0x9E, 0x8E, 0x86,
0x00, 0x00, 0x00, 0xFE, 0xFE, 0x82, 0x82, 0x00,
0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
0x00, 0x00, 0x82, 0x82, 0xFE, 0xFE, 0x00, 0x00,
0x00, 0x00, 0x18, 0x0C, 0x06, 0x0C, 0x18, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x06, 0x0C, 0x18, 0x00,
0xFC, 0x42, 0x89, 0x41, 0x81, 0x49, 0x82, 0x7C,
0x00, 0x00, 0x1E, 0x20, 0x40, 0x46, 0x48, 0x48,
0x48, 0x48, 0x46, 0x40, 0x20, 0x1E, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF0, 0x08, 0x04, 0xC4, 0x24,
0x24, 0x24, 0x24, 0xC4, 0x04, 0x08, 0xF0, 0x00,
0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00,
0x3C, 0x42, 0x95, 0xA1, 0xA1, 0x95, 0x42, 0x3C,
0x00, 0x00, 0x82, 0x82, 0xFE, 0xFE, 0x82, 0x82,
0x00, 0x40, 0xC0, 0x80, 0x80, 0x80, 0xFE, 0x7E,
0x00, 0xFE, 0xFE, 0x30, 0x78, 0xEC, 0xC6, 0x82,
0x00, 0xFE, 0xFE, 0x80, 0x80, 0x80, 0x80, 0x80,
0x00, 0xFE, 0xFE, 0x1C, 0x38, 0x1C, 0xFE, 0xFE,
0x00, 0xFE, 0xFE, 0x1C, 0x38, 0x70, 0xFE, 0xFE,
0x00, 0x7C, 0xFE, 0x82, 0x82, 0x82, 0xFE, 0x7C,
0x00, 0xFE, 0xFE, 0x22, 0x22, 0x22, 0x3E, 0x1C,
0x00, 0x7C, 0xFE, 0x82, 0xA2, 0xE2, 0x7E, 0xBC,
0x00, 0xFE, 0xFE, 0x22, 0x62, 0xF2, 0xDE, 0x9C,
0x00, 0x4C, 0xDE, 0x92, 0x92, 0x96, 0xF4, 0x60,
0x00, 0x00, 0x02, 0x02, 0xFE, 0xFE, 0x02, 0x02,
0x00, 0x7E, 0xFE, 0x80, 0x80, 0x80, 0xFE, 0x7E,
0x00, 0x1E, 0x3E, 0x70, 0xE0, 0x70, 0x3E, 0x1E,
0x00, 0xFE, 0xFE, 0x70, 0x38, 0x70, 0xFE, 0xFE,
0x00, 0xC6, 0xEE, 0x7C, 0x38, 0x7C, 0xEE, 0xC6,
0x00, 0x00, 0x0E, 0x1E, 0xF0, 0xF0, 0x1E, 0x0E,
0x00, 0xC2, 0xE2, 0xF2, 0xBA, 0x9E, 0x8E, 0x86,
0x00, 0x00, 0x10, 0xFE, 0xFE, 0x82, 0x82, 0x00,
0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x00,
0x00, 0x00, 0x82, 0x82, 0xFE, 0xFE, 0x10, 0x00,
0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
const uint8_t sin_lut[] PROGMEM = {
0x00,0x03,0x06,0x09,0x0c,0x0f,0x12,0x15,0x19,0x1c,0x1f,0x22,0x25,0x28,0x2b,0x2e,
0x31,0x34,0x36,0x39,0x3c,0x3f,0x42,0x44,0x47,0x49,0x4c,0x4f,0x51,0x53,0x56,0x58,
0x5a,0x5c,0x5f,0x61,0x63,0x65,0x67,0x68,0x6a,0x6c,0x6e,0x6f,0x71,0x72,0x73,0x75,
0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,
0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7c,0x7b,0x7b,0x7a,0x79,0x78,0x77,
0x75,0x74,0x73,0x71,0x70,0x6e,0x6d,0x6b,0x69,0x68,0x66,0x64,0x62,0x60,0x5e,0x5b,
0x59,0x57,0x55,0x52,0x50,0x4d,0x4b,0x48,0x46,0x43,0x40,0x3d,0x3b,0x38,0x35,0x32,
0x2f,0x2c,0x29,0x26,0x23,0x20,0x1d,0x1a,0x17,0x14,0x11,0x0e,0x0b,0x07,0x04,0x01,
0xff,0xfc,0xf9,0xf5,0xf2,0xef,0xec,0xe9,0xe6,0xe3,0xe0,0xdd,0xda,0xd7,0xd4,0xd1,
0xce,0xcb,0xc8,0xc5,0xc3,0xc0,0xbd,0xba,0xb8,0xb5,0xb3,0xb0,0xae,0xab,0xa9,0xa7,
0xa5,0xa2,0xa0,0x9e,0x9c,0x9a,0x98,0x97,0x95,0x93,0x92,0x90,0x8f,0x8d,0x8c,0x8b,
0x89,0x88,0x87,0x86,0x85,0x85,0x84,0x83,0x83,0x82,0x82,0x81,0x81,0x81,0x81,0x81,
0x81,0x81,0x81,0x81,0x81,0x82,0x82,0x83,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,
0x8b,0x8d,0x8e,0x8f,0x91,0x92,0x94,0x96,0x98,0x99,0x9b,0x9d,0x9f,0xa1,0xa4,0xa6,
0xa8,0xaa,0xad,0xaf,0xb1,0xb4,0xb7,0xb9,0xbc,0xbe,0xc1,0xc4,0xc7,0xca,0xcc,0xcf,
0xd2,0xd5,0xd8,0xdb,0xde,0xe1,0xe4,0xe7,0xeb,0xee,0xf1,0xf4,0xf7,0xfa,0xfd
};
//-----------------------------------------------
const byte laserPin = 13;
const byte laserPin2 = 12;
const byte tacoPin = 3;
int line = 0;
const char Video[] = " HELLO!!! .... I AM A LASER PROJECTOR BUILT BY RAUL AGUAVIVA MORE INFO COODINGLAB.BLOGSPOT.COM ";
char VideoRam[10];
const char *pVideo = Video;
const byte mask[8] = {
2,4,8,16,32,64,128};
int beamdelay[8] = {
0,0,0,0,0,0,0 };
boolean scroll;
unsigned int clockwall;
boolean wave;
boolean FullLaser;
boolean verbose;
volatile unsigned int rpmcount;
unsigned int rpm;
volatile unsigned long markers[7];
volatile boolean ignore = false;
volatile unsigned int start = 0;
void Reset()
{
scroll = false;
clockwall = 0;
start = 0;
wave = false;
FullLaser = false;
verbose = false;
pVideo = Video;
}
void setup()
{
Serial.begin(115200);
pinMode(laserPin, OUTPUT); // sets the pin as output
pinMode(laserPin2, OUTPUT); // sets the pin as output
pinMode(tacoPin, INPUT); // sets the pin as output
digitalWrite( tacoPin, HIGH );
rpmcount = 0;
rpm = 0;
Serial.println( "Laser Projector Ready!" );
Reset();
attachInterrupt(0, rpm_fun, FALLING);
}
void RasterLine( byte _line, unsigned int offset )
{
digitalWrite( laserPin, HIGH );
return;
int t = beamdelay[_line];
if ( wave )
{
t += (const char)pgm_read_byte( &sin_lut[ (clockwall*16 + _line*16) & 0xff ] )/2;
}
for(int i=0;i<t;i++)
{
digitalWrite( laserPin, LOW );
//digitalWrite( laserPin2, LOW );
}
byte mascara = mask[_line];
for(byte i=0;i<10;i++)
{
for(byte j=0;j<8;j++)
{
boolean m = ( pgm_read_byte( &konami_font[ (pVideo[offset>>3]-' ') * 8 + (offset&7)] ) & mascara )?HIGH:LOW;
if ( FullLaser )
m = HIGH;
for(byte k=0;k<1;k++)
{
digitalWrite( laserPin, m );
digitalWrite( laserPin2, m );
}
offset++;
}
}
digitalWrite( laserPin, LOW );
digitalWrite( laserPin2, LOW );
}
// 8224,7976,8292,7784,8228,8028,7876,
// < > < > < > >
void rpm_fun()
{
rpmcount++;
if (ignore == true)
{
return;
}
ignore = true;
static unsigned int olddelta = 0;
static unsigned int oldtime = 0;
static byte index = 0;
unsigned long t = micros();
unsigned int delta = t - oldtime;
oldtime = t;
// find pattern that signals first scanline
static byte cond = 0;
if ( olddelta > delta )
{
cond++;
if ( cond == 2 )
{
index = 3;
cond = 0;
}
}
else
{
cond = 0;
}
markers[index] = delta;
olddelta = delta;
RasterLine( index, start );
index++;
if ( index >6 )
{
index = 0;
clockwall++;
if ( scroll )
{
start++;
if ( start >55*8 )
start = 0;
}
}
ignore = false;
}
byte cmd=0;
void DoKeyboard()
{
if (Serial.available() > 0)
{
ignore = true;
unsigned char in = Serial.read();
if ( in == 'w' )
{
wave = !wave;
}
else if ( in == 'v' )
{
pVideo = VideoRam;
}
else if ( in == 'V' )
{
pVideo = Video;
}
else if ( in >= '0' && in <='9')
{
line = in-'0';
Serial.println( line, DEC );
}
else if ( in == '+' )
{
cmd++;
if ( line == 8 )
{
for(byte i=1;i<7;i++)
{
beamdelay[i]++;
}
}
else
{
beamdelay[line]++;
}
Serial.println( beamdelay[line], DEC );
}
else if ( in == '-' )
{
cmd--;
if ( line == 8 )
{
for(byte i=1;i<7;i++)
{
beamdelay[i]--;
}
}
else
{
beamdelay[line]--;
}
Serial.println( beamdelay[line], DEC );
}
else if ( in == 'r' )
{
Reset();
}
else if ( in == 'f' )
{
FullLaser = !FullLaser;
}
else if ( in == 's' )
{
scroll = !scroll;
}
else if ( in == ' ' )
{
for(byte i=0;i<7;i++)
{
Serial.print( beamdelay[i], DEC );
Serial.print(',');
}
Serial.println();
for(byte i=0;i<7;i++)
{
Serial.print( markers[i], DEC );
Serial.print(',');
}
Serial.println();
}
else if ( in == 'q' )
{
rpmcount = 0;
delay (1000);
Serial.print ((rpmcount *60) / 7, DEC);
Serial.println (" rpm");
}
ignore = false;
}
}
// |________|________|________|________|________|________|________|__|_____
// 0 1 2 3 4 5 6 7
//0:10100 ,1:9676 ,2:10116 ,3:9744 ,4:9840 ,5:10056 ,6:9868
// < > < > < < >
unsigned long lastlap;
unsigned int t1;
boolean lastcmp = true;
byte scanline = 0;
void loop()
{
DoKeyboard();
}
Sziasztok!
Mint sokan mások is, én is segítséget kérek azoktól, akik sokkal jobban otthon vannak az ARDUINO terén.
A következő a problémám. Hangsúlyozom, hogy még ismerkedek csak.
Tehát vásároltam egy 2.4 Tft SD-slottal. Rádugtam az UNo R3-ra. Nehezen ugyan de találtam egy könyvtárat ami életet lehelt bele. A grafikus teszt tökéletesen lefut. Az érintőképernyős teszt szintén. Azonban az SD-kártyáról történő kép beolvasása nagyon nem akar működni. Lefut a fordítás és rá is tölti az UNO-ra. Épp csak a kép nem látszik. Egy-egy kis csíkot látok csak. ami lépked átlósan. Csatolom a könyvtárat. Talán lesz valaki aki meg tudja mondani mi a baj.
A leírásnak megfelelő képet írtam az SD-re. Meg is találja. Épp csak nem jelenik meg a kijelzőn.
A segítséget előre is köszönöm!
Az UNO memóriája kicsi.
SD kezelés és a TFT kezelés nem igazán működik együtt
Nálam legalábbis csak a MEGA volt hajlandó kezelni (ott meg az LCD/TFT kezelés volt egy szenvedés).
Köszönöm a választ. Talán lesz valami megoldás. Legalábbis reménykedek benne.
Az első kérdés!
Ennek itt mi értelme van:
for(int i=0;i<t;i++)
{
digitalWrite( laserPin, LOW );
//digitalWrite( laserPin2, LOW );
}
t * LOW ? 100 * 0 = 0.
Szerintem itt valami hiányzik!
Ennek se látom sok értelmét:
for(byte k=0;k<1;k++)
{
digitalWrite( laserPin, m );
digitalWrite( laserPin2, m );
}
Minek a for ciklus? Ha csak 1* fut le! A hozzászólás módosítva: Jan 3, 2016
Szerintem ide nem kellenek ’&’ utasítások.
t += (const char)pgm_read_byte( sin_lut[ (clockwall*16 + _line*16) & 0xff ] )/2;
boolean m = ( pgm_read_byte( konami_font[ (pVideo[offset>>3]-' ') * 8 + (offset&7)] ) & mascara )?HIGH:LOW;
Legalább is itt ez van: A hozzászólás módosítva: Jan 3, 2016
És itt minden feltétel nélkül visszatérsz a return-al?
void RasterLine( byte _line, unsigned int offset )
{
digitalWrite( laserPin, HIGH );
return; ????????????????????????????????????
...
Akkor minek a rutin többi része?????
Ezt a kódot itt találtam :
Bővebben: Link
Már az elején volt benne a karakter kezeléssel probléma azt ki tudtam javítani. Valaki esetleg csinált már valaki ilyet vagy hasonló ? Ezt a kódot találtam a legjobbnak mivel egy változóba tudok be írni szöveget és ki írja . Vagy is ki írná meg ebbe van "tükör kalibrációs rész is " .
Hali!
Végül sikerült megoldani a problémát. Lassú is és persze kizárólag 240x320 bitkép 24 bit színmélységgel műxik. És biztosan nem a legfrappánsabb megoldás de megy.
Csatoltam a képet. A lényeg a korábban leírtakban van. Gyakorlatilag képpontonként olvassa be az sd-ről a képet. Több képpel kipróbáltam. Tökéletesen működik.
#include <Adafruit_GFX.h>
#include <Adafruit_TFTLCD.h>
#include <SPI.h>
#include <SD.h>
#include <Stdint.h>
//SPI Communication
#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4
//Color Definitons
#define USE_ADAFRUIT_SHIELD_PINOUT
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
int x,y;
File myFile;
byte a1,a2,a3;
int szin,i;
void setup() {
Serial.begin(9600);
//TFT+SD shield-en 10 az sd
if (!SD.begin(10)) {
Serial.println("initialization failed!");
return;
}
tft.reset();
tft.begin(0x9341); // ILI9341 chip van a vezérlőben
myFile = SD.open("arc.bmp",FILE_READ);
if (myFile) {Serial.println("opening arc.txt");}
tft.fillScreen(BLACK);
x=240;y=0;
for (int i=0;i<=53 ; i++){a1=(myFile.read());}
while (myFile.available()) {
a1=(myFile.read());
a2=(myFile.read());
a3=(myFile.read());
szin= tft.color565(a3,a2,a1);
tft.drawPixel(x,y,(szin));
x=x-1;
if (x==0) { y=y+1; x=240;}
}}
void loop() { }
A hozzászólás módosítva: Jan 3, 2016
//Szerintem valamenyit gyorsulna ha for helyett:
for (int i=0;i<=53 ; i++){a1=(myFile.read());}
//seek-et használnál:
if(seek(54)){
while (myFile.available()) {
a1=(myFile.read());
a2=(myFile.read());
a3=(myFile.read());
szin= tft.color565(a3,a2,a1);
tft.drawPixel(x,y,(szin));
x=x-1;
if (x==0) { y=y+1; x=240;}
}
}
Szia!
Nálam is volt, hogy rángatozott a szervó, és is szívtam vele egy kicsit. Nálam a rendszerben volt egy bluetooth modul (softwareserial-on keresztül) és azzal akadt össze.
A megoldás az lett, hogy nagyobbra állítottam a bluetooth modullal való kommunikáció sebességét.
A ciklus csak azért kell, mert a bitkép tartalmi információit onnan tárolja. A megelőző adatok jelen esetben lényegtelenek hiszen tudom, hogy 240x320 és 24 bit felbontású a kép. Igazából csak az indulást gyorsítaná meg némiképp. De azért köszönöm.
A célom meg egyébiránt egészen más project. Épp csak valahogyan meg kellett találnom a kijelző kezelésének mikéntjét. Most ezért van sikerélmény. Több órámba telt mire rájöttem mit és hogyan kell. Na meg persze azt is, hogy hol szúrtam el.
Én az ILI 9341-es sárgalábúhoz készítettem külön drivert.
Mivel mostanában csak ezt használtam.
Jól meg nyirbáltam. Pl, ha a drawPixel rutinból kivágod a sok felesleges if elset!
a gyorsulás sokat számít a kismillió pont átrajzolásánál.
Csak ennyit hagytam meg:
Ez csak egy részlet az egész fölöslegesen nagyméretű Adafruit_TFTLCD.cpp-böl
void Adafruit_TFTLCD::drawPixel(int16_t x, int16_t y, uint16_t color) {
// Clip
if((x < 0) || (y < 0) || (x >= _width) || (y >= _height)) return;
CS_ACTIVE;
setAddrWindow(x, y, _width-1, _height-1);
CS_ACTIVE;
CD_COMMAND;
write8(0x2C);
CD_DATA;
write8(color >> 8); write8(color);
CS_IDLE;
}
A maradék az egész rutinnak kb. ¼-e, kódméret csökkenés!
És 4 if else-vel gyorsabb!
Kipróbáltam. És ahogyan vártam is, teljesen jól működik így is. Köszönöm a segítséget. Ja és jogos a kódméretre való hivatkozás. Elég szűkös bizonyos esetekben az UNO.
A hozzászólás módosítva: Jan 4, 2016
Én igy kötöttem be a Megánál:
// Found arduino Mega shield + ILI9341 GLCD driver, Touch, SD mem
/ **---------------------------------------------------
GLCD + Touch + SD ILI9341 240*320 2,4" Pin out:
Arduino pin LCD pin TOUCH pin
LCD Data:
PA0 D22 DB0
PA1 D23 DB1
AP2 D24 DB2
PA3 D25 DB3
PA4 D26 DB4
PA5 D27 DB5
PA6 D28 DB6 XP
PA7 D29 DB7 YM
LCD Vezérlés:
PF0 A0 RD
PF1 A1 WR
PF2 A2 RS XM
PF3 A3 CS YP
PF4 A4 RST
SD Kártya:
SD Kártya pin
PB4 D10 SD_SS
ICSP pin
PB1 SCK SD_SCK
PB2 MOSI SD_DO
PB3 MISO SD_DI
táp: 3.3V LCD Regulátorró kivezetve a Rádió 3.3V táplálásának!
These are the Touch pins for the MEGA shield!
(YM,23)
A
|
(XM,A2)<---|--->(XP,22)
|
V
(YP,A3)
*/
Ez hozta a leg gyorsább müködést!
Persze libet is javítani kellett mert nem ezt a bekötést alkalmazták. A hozzászólás módosítva: Jan 4, 2016
Sziasztok!
Arduinoval szeretnék készíteni egy fagy riasztót. Az volna a feladata, hogy 3 helyen mér (ez az arduinotol 5-30m távolságra van). Mivel volna célszerű mérni? +1/-1 °C pontosság már elegendő. Gondolom ilyen távolságra a DS.XXXX kilőve. PT100-on gondolkoztam, de ott nagyban befolyásolja a vezeték ellenállása a mérési eredményt. PT1000 már jobb, bár ehhez viszonylag több alkatrész szükséges. Felmerült még bennem az LM35 (vagy az MCP9700). Ezek mennyire használhatóak ilyen távolságban?
30m túl sok. Vagy raksz minden szenzorhoz egy AVR-t, és majd azok kommunikálnak, vagy csak fogsz egy vezetéket, amire 5V-ot adsz, ha fagy van, ha meg nincs, akkor GND.
Szia!
DSxxxx megfelelő lesz szerintem erre a távolságra. Bár én még csak 20 méterig használtam, de ott semmi gond nem volt vele.
Olyan problémám lenen a lézer projectoral kapcsolatba hogy ezzel a hibával le áll :
Idézet: „C:\Users\Dannu\Desktop\Mirror\MirrorPov\MirrorPov.ino: In function 'void loop()':
C:\Users\Dannu\Desktop\Mirror\MirrorPov\MirrorPov.ino:54:33: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
setMessage(" HELLO WORLD", pbuf);”
/*
Laser projector made from an old hard disk drive
Author: Victor Cazacov
License: MIT License
*/
// Third party libraries:
// PWMServo - controls a servo motor (in this case ESC) attached to PWM pin without using interrupts.
// Unpack it into Libraries folder of your Arduino IDE installation.
#include "Fonts.h"
#include "Laser.h"
#include <Arduino.h>
#include <avr/pgmspace.h>
#include "MirrorController.h"
#include <PWMServo.h>
#define LASER_PIN 2
#define LINE_LENGTH 12
MirrorController* mirrorController;
char buf[20];
char message[21];
// forward declarations
void setMessage(char* msg, unsigned char pixelBuffer[5][20]);
bool readSerial();
void setup()
{
Serial.begin(57600);
Serial.println("Initializing...");
mirrorController = new MirrorController();
mirrorController->init();
pinMode(LASER_PIN, OUTPUT);
digitalWrite(LASER_PIN, HIGH);
}
int correction[8] = { 17, 10, 0, 20, 45, 0, 0, -0 }; // time offset in microseconds to compensate non-ideal shape of mirrors
int lineOrder[8] = { 0, 7, 3, 4, 1, 6, 2, 5 }; // for better balance mirroring faces are not placed in strict incremental order
void loop()
{
delay(500);
digitalWrite(LASER_PIN, LOW);
unsigned char pbuf[5][20];
setMessage(" HELLO WORLD", pbuf);
// re-arrange correction time offesets in the order of mirror faces
byte ct[8];
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
if (lineOrder[j] == i)
{
ct[j] = correction[i];
}
}
}
for (int i = 0; i < 8; i++)
{
correction[i] = ct[i];
}
Serial.println("Speeding up the mirror...");
mirrorController->start();
delay(3000);
Serial.println("Measuring rotation speed...");
long cycleTimeMs = mirrorController->calculateRotationSpeed();
sprintf(buf, "Cycle time: %ld", cycleTimeMs);
Serial.println(buf);
long t0 = 150;
long lineTime = cycleTimeMs >> 3; // time in microseconds to draw one line
long pixelTime = lineTime >> 7; // time in microseconds to draw one pixel
sprintf(buf, "Pixel time: %ld", pixelTime);
Serial.println(buf);
mirrorController->waitForBeginMarkFast();
long prevStart = micros();
delayMicroseconds(cycleTimeMs << 1);
long startTimes[8];
int msgLen = strlen(message);
do {
int pixels = msgLen << 3;
mirrorController->waitForBeginMarkFast();
long start = micros();
long* sptr = startTimes;
int* cptr = correction;
long val = start + t0;
for (int i = 0; i < 8; i++)
{
*sptr = val + (*cptr);
sptr++;
cptr++;
val += lineTime;
}
sptr = startTimes;
long t = *sptr; // time in microseconds when to start drawing next pixel
for (int i = 0; i < 8; i++)
{
int lineNr = lineOrder[i];
unsigned char* ptr = pbuf[4 - lineNr];
unsigned char bitMask = 0x80;
unsigned char info = *ptr;
if (lineNr < 5)
{
for (int p = 0; p < pixels; p++)
{
while (micros() < t)
{
// do nothing;
}
if (info & bitMask)
{
digitalWrite(LASER_PIN, HIGH);
}
else
{
digitalWrite(LASER_PIN, LOW);
}
bitMask >>= 1;
if (bitMask == 0)
{
ptr++;
info = *ptr;
bitMask = 0x80;
t += pixelTime;
}
t += pixelTime;
}
}
digitalWrite(LASER_PIN, LOW);
sptr++;
t = *sptr;
}
lineTime = (start - prevStart) >> 3;
pixelTime = lineTime >> 7;
prevStart = start;
bool refreshFlag = readSerial();
if (refreshFlag)
{
for (int i = 0; i < 5; i++)
{
FONTS.getLine(message, i, pbuf[i]);
}
}
} while (1);
}
//
// Helper functions
//
void setMessage(char* msg, unsigned char pixelBuffer[5][20])
{
strncpy(message, msg, LINE_LENGTH);
message[LINE_LENGTH] = '\0';
// pad with spaces to 12 characters
for (int i = strlen(message); i < LINE_LENGTH; i++)
{
message[i] = ' ';
}
for (int i = 0; i < 5; i++)
{
FONTS.getLine(message, i, pixelBuffer[i]);
}
}
bool readSerial()
{
bool result = false;
while (Serial.available())
{
int ch = Serial.read();
if (ch >= 32) // printable character
{
result = true;
char* rp = message + 1;
char* wp = message;
for (int i = 0; i < LINE_LENGTH - 1; i++)
{
*wp = *rp;
wp++;
rp++;
}
message[LINE_LENGTH - 1] = ch;
}
}
return result;
}
Valaki tudna segíteni hol és mi a hiba mit javítsak ki ?
Azért sír mert konstans stringből, ami ugye a " HELLO WORLD" akarsz char*-ot csinálni. Esetleg próbáld így:
char* hw = " HELLO WORLD";
setMessage(hw , pbuf);”
Amúgy ez 'csak' warning, nem hinném hogy beledöglik. A hozzászólás módosítva: Jan 4, 2016
Ez a válasza :
Idézet: „C:\Users\Dannu\Desktop\Mirror\MirrorPov\MirrorPov.ino: In function 'void loop()':
C:\Users\Dannu\Desktop\Mirror\MirrorPov\MirrorPov.ino:53:13: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
char* hw = " HELLO WORLD";
^ ”
De mind1 működik
Sziasztok!
Van egy kis problémám és hozzátok fordulnék segítségül építettem egy lézeres "cnc" és azt szeretném meg oldani hogy a lézert magától ki-be kapcsolgassa ez benne is van a programba leddel megy de mikor tranzisztorral akarom csinálni akkor már valamiért nem működik a dolog. Erről a programról lenne szó: Bővebben: Link
Bővebben: Link
Valaki esetleg tudna nekem segíteni hogy mi lehet a rossz? A cnc-s fórumba már tárgyaltuk de sajnos nem jutottunk előrébb.
Segítségeteket előre is köszönöm!
Hogy kötöd be a tranzisztort a led helyére? Milyen típust? Fel/lehúzó ellenállás?
1k ellenállásal ugye a bázisra collectorhoz meg a led. És a kimeneten meg ha mérem ilyen 0.2V de a led meg nem teljes fény erővel de világít. Próbáltam mostfet-el is de azzal se megy a dolog.
Mekkora előtét ellenállás van betéve? Mekkorával húzod merre? P vagy N?
Elég ott a bázis áram? Lerajzolnád hogy hogy van összekötve?
Ha nagyon nyögvenyelős a dolog, tegyél be egy optocsatolót és meg van oldva. A led helyére megy az optó ledje, Az optó tranzisztora pedig beköthető oda, ahová akarod.
|
|