Fórum témák
- • Sprint-Layout NYÁK-tervező
- • Kaputelefon
- • Számítógép hiba, de mi a probléma?
- • Rádióamatőrök topikja
- • Boombox javítás
- • CNC építése házi alkatrészekből az alapoktól
- • USB 3.2 HUB modul
- • Klíma szervizelés, javítás
- • Kapcsolóüzemű tápegység
- • Autóriasztó és központi zár
- • Li-Ion saját akkucsomag készítése
- • Elektromos távirányítós kapunyitó
- • Erősítő mindig és mindig
- • Analóg oszcilloszkóp javítása
- • LED szalag
- • Hangszórójavítás (otthon)
- • Mosógép vezérlők és általános problémáik
- • Érdekességek
- • Transzformátor készítés, méretezés
- • Villanypásztor
- • Kondenzátor
- • Arduino
- • Videomagnó problémák
- • IMI villanymotor
- • Digitális adatátvitel
- • Mosogatógép hiba
- • Nagyfeszültségű tápegység
- • 3-fázisú Modbus-os teljesítményszabályzó (SCR power controller)
- • Elfogadnám, ha ingyen elvihető
- • Villanyszerelés
- • TDA7294 végerősítő
- • Klíma beszerelése, fűtés-hűtés házilag
- • Kombikazán működési hiba
- • Általános antennás kérdések, válaszok
- • Dobozolási technikák, műszerdobozok
- • Elektronikai témájú könyvek újságok
- • Elektromos vezérlésű pneumatika
- • Internetes rádióvevő
- • Alternativ HE találkozó(k)
- • 3D nyomtatás
- • Felajánlás, azaz ingyen elvihető
- • Akkumulátor töltő
- • Háromfázisú aggregátor
- • Szintetizátor javítás
- • Sütő javítás
- • Laptop javítás, tuning
- • Autós erősítős kérdések, problémák
- • Mikrohullámú sütő javítás, magnetron csere, stb.
- • Villanymotor
- • Vegyes barkácsfogások
- • Digitális óra
- • Hűtőgép probléma
- • TV hiba, mi a megoldás?
- • Szünetmentes táp javítása, élesztése
- • Erősítő építése elejétől a végéig
» Több friss téma
|
A klónok CH340 Soros-USB illesztőjének drivere ( Letöltés)
Köszönöm a válaszokat.
A probléma megoldódott.
Nem az FTDI volt rossz, hanem az Arduino Pro Mini.
Más módszerrel ( Unóval párhuzamosan) sem volt feltölthető és egy másik Pro-ra mindkét módszerrel igen. XP alól.
Még hátra van egy ellenpróba Windows 10 alól. Lehet, hogy ezt kihagyom. Van egy XP-s notebookom. Erre pont jó lesz. A hozzászólás módosítva: Jan 21, 2021
De! jól volt kötve. ezeregyszer leelenőriztem.
A reset jel sem mindig az igazi, soros kondival van megoldva, ha egyáltalán meg van, vagy elég a kondi kapacitása, vagy nem... Ez is gondot okozhat.
Illetve még egy érdekességet találtam a Pi Pico-n: "Supported input power 1.8–5.5V DC"
Mert van ams1117, vagy valami hasonló feszstab van rajta, hanem egy boost-buck converter. Szóval 2 ceruzaelemről vagy egy Li-ion celláról is simán elmegy, nem kell mellé külön áramkör.
Addig addig beszélünk róla, hogy csak veszek egyet!
A külön assemblyvel programozható PIO periféria nagyon ötletes, tetszik.
Sziasztok!
Hol találok arra valami leírást, hogy az Arduino melyik Timereket használja egy STM32103-ban? Másrészt meg keresek infót arról, hogy hogyan lehet megoldani a nem használt Timerek használatát Arduino alól ? Persze mindez STM32F103-on.
Van valakinek erről infója?
Fejből nem tudom, stm-en tiszta arduinot nem használok (meg mással sem nagyon), de a forrásokból biztosan ki lehet deríteni.
Kedves Fórumtársak!
Kettős számláló építését szeretném de nem találtam rá kész programot.
16*2 LCD-vel szeretném építeni, UNO-val, két külön reed relés bemenettel .
Tudtok segíteni hogy van-e használható ami készen van vagy legalább kiindulásnak jó?
2db Vízóra állását szeretném távleolvasással figyelni elsőre csak napi leolvasással.
Itt még jó lenne ha a tényleges óraállás beírható lenne a számláló indulásaként. ezred köbmétereket tehát litert mérne, de a kijelző köbmétert jelezne ki.
Később naplózni szeretném hogy grafikon is legyen belőle.
tehát vannak tervek, segítsetek lsz. elindulni!
Olyan számlálóm már működik ami egy órát figyel, de tovább kéne lépni.
A
Hali!
Ha már van egyórás, akkor csak a megfelelő programrészeket kell megduplázni a másik input pin-nel, és változókkal...
Milyen órát figyel az, ami már működik? A vízórát hogyan tervezed figyelni? Van valamilyen elektronikus kimenete?
Hali!
Ez ennyire egyszerű lenne? Van benne egy ciklus, azt hogy fűzzem egymásba? Vagy csak tegyem egymás mellé ?
Megszakítással kezeld le az óráktól érkező impulzusokat.
Mivel senki sem orákulum, nem tudjuk megmondani mit változtass a kódodon! Mellékeld hogy lássuk miről van szó!
Hali!
Ez egy mellék vízmérő. Van egy mágnes az óra mutatóján, azt figyeli a reed relé.
Sziasztok!
Bocsánat, gondolhattam volna, küldöm..
Igen, az a lényeg hogy tedd egymás mellé! HA ez a kód már működik egy órára, akkor a benne lévő részeket meg kell duplázni ahogy kolléga is mondta.
Ami most benne van az egyik órára, azt átmásolod mögé (természetesen értelemszerűen), és nem a régi óra bemeneteket használod, hanem az újakat. Kb ennyi.
Viszont a kódod küllemére érdemes kicsit többet szánni, mert amíg ilyen saláta, nagyon nehéz elemezni. Neked is jót tesz majd, amikor megpróbálod bővíteni.
A rendszerleírást pedig az indító kérdésbe ajánlott beleírni, hogy ne nekünk kelljen utólag kifaggatni a részletekről.
Próbáld meg, aztán majd segítünk! A hozzászólás módosítva: Jan 25, 2021
Ezt biza jobban át kell írni, nem egyszerű duplázás, mert ciklusban várja hogy a reed mozduljon... vagyis ez alatt a másik reedet nem venné észre.
Mint javasolta Mnyugger át kéne írni megszakításosra, vagy változóban tárolni mindkét reed állapotát, és ha valamelyiken változás van azt számolni
Sziasztok. Van egy programom, enkóderre alapul, de jelenleg az nem elérhető csak nyomógomb.
Milyen formában változtassak hogy a sima nyomógombokkal is használható legyen a program?
#include <Wire.h> // I2C library
#include <LiquidCrystal_I2C.h> // I2C LCD library
LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 20 chars and 4 line display
//--Define constants
#define encoder0PinA 2 // Setup the encoder pins
#define encoder0PinB 4 // Setup the encoder pins
#define encoderbtn 6 // encoder pushbutton
#define DDS_CLOCK 180000000 // 30MHz x 6 (onboard rock)
//---define variables
volatile long encoder0Pos = 10000000; // setup a value to count with
volatile long oldencoder0Pos = encoder0Pos ; // used to compare
int varVal; // variable for reading the pin status
int varHz = 1; // 1=Hz, 2=KHz, 3=10KHz, 4=100KHz, 5=MHz tuning step mode
int long varMult = 1; // used to plug in as the multiplier
char varBuf1[8]; // used to convert an int to a string array for the freq display
char varBuf2[10]; // used to format the freq display with commas
unsigned long varCurrentMillis; // current time via the Millis function
long varPreviousMillis = 0; // used as a timer to avoid bounce
long varInterval = 500; // interval used with a timer (milliseconds)
byte ddsLOAD = 8; // AD9851 LOAD Arduino D8
byte ddsCLOCK = 9; // AD9851 CLOCK Arduino D9
byte ddsDATA = 10; // AD9851 FQ_UD Ardunio D10
long varTuning_word; // Used to hold the word for the DDS
void setup() {
//---Setup encoder
pinMode(encoderbtn, INPUT);
pinMode(encoder0PinA, INPUT);
digitalWrite(encoder0PinA, HIGH); // turn on pullup resistor
pinMode(encoder0PinB, INPUT);
digitalWrite(encoder0PinB, HIGH); // turn on pullup resistor
attachInterrupt(0, doEncoder, CHANGE); // encoder pin on interrupt 0 - pin 2
//---Initial screen setup
lcd.init(); // initialize the lcd
lcd.backlight(); // turn on the lcd backlight
lcd.clear(); // good practice to make sure that display is clear
lcd.setCursor(0,2); // column,row
lcd.print("Zikha DDS Generator");
lcd.setCursor(4,3); // column,row
lcd.print("AM modulation");
lcd.setCursor(0,0); // column,row
lcd.print("Freq: ");
sprintf(varBuf1,"%8lu", encoder0Pos); // convert initial freq for display
sprintf(varBuf2,"%1c%1c,%1c%1c%1c,%1c%1c%1c", varBuf1[0], varBuf1[1], varBuf1[2], varBuf1[3], varBuf1[4], varBuf1[5], varBuf1[6], varBuf1[7], varBuf1[8]);
lcd.print(varBuf2);
lcd.setCursor(0,1); // column,row
lcd.print("Hertz 1"); // prints out step; should variablize
//---setup pins for AD9851
pinMode (ddsDATA, OUTPUT); // sets pin 10 as OUPUT
pinMode (ddsCLOCK, OUTPUT); // sets pin 9 as OUTPUT
pinMode (ddsLOAD, OUTPUT); // sets pin 8 as OUTPUT
sendFrequency(encoder0Pos); // send the initial freq to the DDS
}
void loop(){
encoderStatus(); // check for encoder button press
lcdStatus(); // function for lcd updates
if (encoder0Pos != oldencoder0Pos) // only update the DDS if the freq has changed
sendFrequency(encoder0Pos); // function to update the DDS
}
void sendFrequency(long encoder0Pos){ // function to update the DDS
varTuning_word = (encoder0Pos * pow(2, 32)) / DDS_CLOCK; // set value for the DDS
digitalWrite (ddsLOAD, LOW); // take load pin low
//--start loop--
for(int i = 0; i < 32; i++) // loop through the bits
{
if ((varTuning_word & 1) == 1) // test for binary 1
outOne(); // function to send 1 serial
else
outZero(); // function to send 0 serial
varTuning_word = varTuning_word >> 1;
}
//--end loop--
byte_out(0x09); // send the end command
digitalWrite (ddsLOAD, HIGH); // take the load pin high
}
void byte_out(unsigned char byte) // spin through a byte (8 bits)
{ // send it a bit a time
int i;
for (i = 0; i < 8; i++)
{
if ((byte & 1) == 1)
outOne();
else
outZero();
byte = byte >> 1;
}
}
void outOne(){ // send 1 to the DDS
digitalWrite(ddsCLOCK, LOW); // set the ddsCLOCK pin low
digitalWrite(ddsDATA, HIGH); // set the ddsDATA pin high
digitalWrite(ddsCLOCK, HIGH); // set the ddsCLOCK pin HIGH
digitalWrite(ddsDATA, LOW); // set the ddsDATA ping low
}
void outZero(){ // send 0 to the DDS
digitalWrite(ddsCLOCK, LOW); // set the ddsCLOCK pin low
digitalWrite(ddsDATA, LOW); // set the ddsDATA pin low
digitalWrite(ddsCLOCK, HIGH); // set the ddsCLOCK pin high
}
void encoderStatus (){ // this is checking for the button press and setting the MHZ, KHz, Hz cursor
varCurrentMillis = millis(); // set variable = time
if(varCurrentMillis - varPreviousMillis > varInterval) {
varPreviousMillis = varCurrentMillis;
varVal = digitalRead(encoderbtn); // read input value and store it in val
if (varVal == LOW) { // check if the button is pressed
if (varHz == 6) { // 1 Hz, 2 100Hz, 3 KHz, 4 10KHz, 5 100KHz, 6 MHz
varHz = 0; // reset from MHz to Hz
}
varHz = varHz + 1; // move one position
}
}
}
void lcdStatus (){
sprintf(varBuf1,"%8lu", encoder0Pos);
sprintf(varBuf2,"%1c%1c,%1c%1c%1c,%1c%1c%1c", varBuf1[0], varBuf1[1], varBuf1[2], varBuf1[3], varBuf1[4], varBuf1[5], varBuf1[6], varBuf1[7], varBuf1[8]);
if (encoder0Pos != oldencoder0Pos){
lcd.setCursor(6,0); // column,row
lcd.print(varBuf2); // prints out the freq
}
switch (varHz) {
case 1: // if 1 move the cursor to Hz
lcd.setCursor(0,1); // column,row
lcd.print("Hertz 1 "); // prints out step
varMult = 1;
break;
case 2: // if 2 move the cursor to 100 Hz
lcd.setCursor(0,1); // column,row
lcd.print("Hertz 100 "); // prints out step
//varMult = 1000/2; // original encoder with detents
varMult = 100; // AA0ZZ encoder, no detents
break;
case 3: // if 2 move the cursor to KHz
lcd.setCursor(0,1); // column,row
lcd.print("Kilohertz 1 "); // prints out step
//varMult = 1000/2; // original encoder with detents
varMult = 1000; // AA0ZZ encoder, no detents
break;
case 4: // if 3 move the cursor to 10KHz
lcd.setCursor(0,1); // column,row
lcd.print("Kilohertz 10 "); // prints out step
//varMult = 10000/2; // original encoder with detents
varMult = 10000; // AA0ZZ encoder, no detents
break;
case 5: // if 4 move the cursor to 100KHz
lcd.setCursor(0,1); // column,row
lcd.print("Kilohertz 100 "); // prints out step
//varMult = 100000/2; // original encoder with detents
varMult = 100000; // AA0ZZ encoder, no detents
break;
case 6: // if 5 move the cursor to MHz
lcd.setCursor(0,1); // column,row
lcd.print("Megahertz 1 "); // prints out step
//varMult = 500000; // original encoder with detents
varMult = 1000000; // AA0ZZ encoder, no detents
break;
}
if (encoder0Pos <= 00000001) { // lower bounds limit
encoder0Pos = 00000001;
}
if (encoder0Pos >= 30000000) { // upper bounds limit
encoder0Pos = 30000000;
}
}
void doEncoder(){
oldencoder0Pos = encoder0Pos; // reset the variables so that we can compare them next time
if (digitalRead(encoder0PinA) == HIGH) { // found a low-to-high on channel A
if (digitalRead(encoder0PinB) == LOW) { // check channel B to see which way
// encoder is turning
encoder0Pos = encoder0Pos - varMult; // CCW
}
else {
encoder0Pos = encoder0Pos + varMult; // CW
}
}
else // found a high-to-low on channel A
{
if (digitalRead(encoder0PinB) == LOW) { // check channel B to see which way
// encoder is turning
encoder0Pos = encoder0Pos + varMult; // CW
}
else {
encoder0Pos = encoder0Pos - varMult; // CCW
}
}
}
/* to read the other two transitions - just use another attachInterrupt()
in the setup and duplicate the doEncoder function into say,
doEncoderA and doEncoderB.
You also need to move the other encoder wire over to pin 3 (interrupt 1).
*/
Sziasztok!
Van egy kínai lézergravírozóm kínai arduino nano-val és GRBL 1.1 firmware-el.
Előfordult már, hogy lefagyott a program és ilyenkor egyhelyben áll a lézer és égeti a fát.
Létezik programfagyás ellen valami megoldás? Pl.: valamelyik kimetére egy jel hogyha fagyás van és egy relével bontani a tápját? Vagy, hogy önmagát kapcsolja le ha ilyet észlel?
Bármilyen megoldás érdekel, feltéve ha rá megoldás.
Előre is köszi!
Watchdog. Nézd meg az adatlapot, és a példákat, hogyan kell használni. A hozzászólás módosítva: Jan 26, 2021
Barkácsolnék az x és y tengelyhez egy-egy újraindulós monoflop-ot, amely bemenete a STEP-re van kötve. Ha nincs léptetés, monoflop lejár, lézert letiltja.
Szoftverbe utólag macerás betenni, meg kell keresni, ellenőrizni minden hosszabb ciklust...
Nem kell ellenőrizni. A WDT reseteli az MCU-t ha elszáll a szoftver.
Ha viszont olyan ciklusba lép a kontroller amiben túlcsordulhat a wdt counter és nincs kiadva benne az időszakos wdt reset, akkor resetelni fog kéretlenül is, nem fog működni a kód.
A watchdog számlálót törölni kell rendszeresen, ha jól fut a program vagy a fő ciklusban, illetve olyan hosszabb hurkokban, amely ideje meghaladja wdt számláló max értékének megfelelő időt.
Ha elszáll a program a számláló törlése nem valósul meg, a watcdog megszólal.
Szóval át kell nézni a szoftvert, nem elég csak a fő ciklusba betenni. Egy ilyen bonyolult programot átnézni, minden "szükséges" helyre betenni a törlést, igencsak macerás, és ha mégis valahonnan kimaradt, akkor majd lehet 1 hét málva derül ki, mikor lesz egy nem kivánt reset
Köszönöm a segítséget mindenkinek!
A monoflop-os dolgot fogom megvalósítani. Köszönöm az ötletet!
Sziasztok!
Minap vettem egy kijelzőt az aliexpressről. Ki akartam próbálni a TFT_eSPI valamint az Arduino_GFX könyvtárral de nem sikerült. Végül a buydisplay honlapján megtaláltam ezt a kijelzőt és az ottani példakódot próbálva működött, de furcsán viselkedik:
Képernyőfrissítéskor elhalványul, a színek nem jelenek meg rendesen, kivéve ha a fillScreen parancsot használom. Nem tudok rájönni mi lehet a gondja. Ha esetleg a használhatóvá tételében tudnátok segíteni, azt megköszönném. A könnyebb megértés véget mellékelek egy videót a működéséről.
Ebből a nyák nélüli változatot vettem meg: Aliexpress
És innen származik a grafikus teszt: Buydisplay
A képernyőről készült videó: Link
A próbát egy megával végeztem szoftveres SPI-vel és a kijelzőhöz csak a háttérvilágítást korlátozó ledet tettem pluszba, mást nem. Még annyi, hogy a kijelző meghajtó egy GC9A01-es IC.
A kód mellett még pár .h és .cpp fájl is van a példakódhoz, ha kell, bemásolom azokat is.
/***************************************************
EastRising Technology Co.,LTD
Examples for ER-TFTM1.28-1 graphics test
Display is Hardward or Software SPI SPI 4-Wire SPI Interface 3.3V Power Supply
NOTE: testOK: DUE If you use MEGA and UNO board, you need to add level conversion.
****************************************************/
/*
==TFT Hardware SPI connection ==
OLED => Arduino
*1. GND -> GND
*2. VCC -> 3.3
*3. SCL -> SCK
*4. SDA -> MOSI
*5. RES -> 8
*6. DC -> 9
*7. CS -> 10
*8. BLK -> NC
*/
/*
==TFT Software SPI connection ==
OLED => Arduino
*1. GND -> GND
*2. VCC -> 3.3
*3. SCL -> 13
*4. SDA -> 11
*5. RES -> 8
*6. DC -> 9
*7. CS -> 10
*8. BLK -> NC
*/
#include "SPI.h"
#include "ERGFX.h"
#include "TFTM1.28-1.h"
#define TFT_RST 8
#define TFT_DC 9
#define TFT_CS 10
// If using the Hardware SPI
//GC9A01 tft = GC9A01(TFT_CS, TFT_DC,TFT_RST);
// If using the Software SPI
#define TFT_CLK 13
#define TFT_MOSI 11
GC9A01 tft = GC9A01(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST);
void setup() {
Serial.begin(9600);
Serial.println("GC9A01 Test!");
tft.begin();
}
void loop(void) {
Serial.print(F("Screen fill "));
Serial.println(testFillScreen());
delay(1000);
Serial.print(F("Text "));
Serial.println(testText());
delay(3000);
Serial.print(F("Horiz/Vert Lines "));
Serial.println(testFastLines(GC9A01_RED, GC9A01_BLUE));
delay(1000);
Serial.print(F("Rectangles (outline) "));
Serial.println(testRects(GC9A01_GREEN));
delay(1000);
Serial.print(F("Rectangles (filled) "));
Serial.println(testFilledRects(GC9A01_YELLOW, GC9A01_MAGENTA));
delay(1000);
Serial.print(F("Circles (filled) "));
Serial.println(testFilledCircles(10, GC9A01_MAGENTA));
Serial.print(F("Circles (outline) "));
Serial.println(testCircles(10, GC9A01_WHITE));
delay(1000);
Serial.print(F("Triangles (outline) "));
Serial.println(testTriangles());
delay(1000);
Serial.print(F("Triangles (filled) "));
Serial.println(testFilledTriangles());
delay(1000);
Serial.print(F("Rounded rects (outline) "));
Serial.println(testRoundRects());
delay(1000);
Serial.print(F("Rounded rects (filled) "));
Serial.println(testFilledRoundRects());
delay(1000);
Serial.println(F("Done!"));
}
unsigned long testFillScreen() {
unsigned long start = micros();
tft.fillScreen(GC9A01_WHITE);
return micros() - start;
}
unsigned long testText() {
tft.fillScreen(GC9A01_BLACK);
unsigned long start = micros();
tft.setCursor(100, 10);
tft.setTextColor(GC9A01_MAGENTA); tft.setTextSize(2);
tft.println("Hellow!");
delay(2000);
tft.setCursor(50, 30);
tft.setTextColor(GC9A01_YELLOW); tft.setTextSize(2);
tft.println(123456.78);
delay(2000);
tft.setCursor(50, 50);
tft.setTextColor(GC9A01_RED); tft.setTextSize(3);
tft.println(0xDEADBEEF, HEX);
delay(2000);
tft.setCursor(10, 80);
tft.setTextColor(GC9A01_GREEN); tft.setTextSize(2);
tft.println("www.buydisplay.com");
delay(2000);
tft.setTextColor(GC9A01_CYAN); tft.setTextSize(4);
tft.println("EastRising");
delay(2000);
tft.setCursor(35,160);
tft.setTextColor(GC9A01_BLUE); tft.setTextSize(5);
tft.println("Groop");
delay(2000);
return micros() - start;
}
unsigned long testLines(uint16_t color) {
unsigned long start, t;
int x1, y1, x2, y2,
w = tft.width(),
h = tft.height();
tft.fillScreen(GC9A01_BLACK);
x1 = y1 = 0;
y2 = h - 1;
start = micros();
for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color);
x2 = w - 1;
for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color);
t = micros() - start; // fillScreen doesn't count against timing
tft.fillScreen(GC9A01_BLACK);
x1 = w - 1;
y1 = 0;
y2 = h - 1;
start = micros();
for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color);
x2 = 0;
for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color);
t += micros() - start;
tft.fillScreen(GC9A01_BLACK);
x1 = 0;
y1 = h - 1;
y2 = 0;
start = micros();
for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color);
x2 = w - 1;
for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color);
t += micros() - start;
tft.fillScreen(GC9A01_BLACK);
x1 = w - 1;
y1 = h - 1;
y2 = 0;
start = micros();
for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color);
x2 = 0;
for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color);
return micros() - start;
}
unsigned long testFastLines(uint16_t color1, uint16_t color2) {
unsigned long start;
int x, y, w = tft.width(), h = tft.height();
tft.fillScreen(GC9A01_BLACK);
start = micros();
for(y=0; y<h; y+=5) tft.drawFastHLine(0, y, w, color1);
for(x=0; x<w; x+=5) tft.drawFastVLine(x, 0, h, color2);
return micros() - start;
}
unsigned long testRects(uint16_t color) {
unsigned long start;
int n, i, i2,
cx = tft.width() / 2,
cy = tft.height() / 2;
tft.fillScreen(GC9A01_BLACK);
n = min(tft.width(), tft.height());
start = micros();
for(i=2; i<n; i+=6) {
i2 = i / 2;
tft.drawRect(cx-i2, cy-i2, i, i, color);
}
return micros() - start;
}
unsigned long testFilledRects(uint16_t color1, uint16_t color2) {
unsigned long start, t = 0;
int n, i, i2,
cx = tft.width() / 2 - 1,
cy = tft.height() / 2 - 1;
tft.fillScreen(GC9A01_BLACK);
n = min(tft.width(), tft.height());
for(i=n; i>0; i-=6) {
i2 = i / 2;
start = micros();
tft.fillRect(cx-i2, cy-i2, i, i, color1);
t += micros() - start;
// Outlines are not included in timing results
tft.drawRect(cx-i2, cy-i2, i, i, color2);
}
return t;
}
unsigned long testFilledCircles(uint8_t radius, uint16_t color) {
unsigned long start;
int x, y, w = tft.width(), h = tft.height(), r2 = radius * 2;
tft.fillScreen(GC9A01_BLACK);
start = micros();
for(x=radius; x<w; x+=r2) {
for(y=radius; y<h; y+=r2) {
tft.fillCircle(x, y, radius, color);
}
}
return micros() - start;
}
unsigned long testCircles(uint8_t radius, uint16_t color) {
unsigned long start;
int x, y, r2 = radius * 2,
w = tft.width() + radius,
h = tft.height() + radius;
// Screen is not cleared for this one -- this is
// intentional and does not affect the reported time.
start = micros();
for(x=0; x<w; x+=r2) {
for(y=0; y<h; y+=r2) {
tft.drawCircle(x, y, radius, color);
}
}
return micros() - start;
}
unsigned long testTriangles() {
unsigned long start;
int n, i, cx = tft.width() / 2 - 1,
cy = tft.height() / 2 - 1;
tft.fillScreen(GC9A01_BLACK);
n = min(cx, cy);
start = micros();
for(i=0; i<n; i+=5) {
tft.drawTriangle(
cx , cy - i, // peak
cx - i, cy + i, // bottom left
cx + i, cy + i, // bottom right
tft.color565(0, 0, i));
}
return micros() - start;
}
unsigned long testFilledTriangles() {
unsigned long start, t = 0;
int i, cx = tft.width() / 2 - 1,
cy = tft.height() / 2 - 1;
tft.fillScreen(GC9A01_BLACK);
start = micros();
for(i=min(cx,cy); i>10; i-=5) {
start = micros();
tft.fillTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i,
tft.color565(0, i, i));
t += micros() - start;
tft.drawTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i,
tft.color565(i, i, 0));
}
return t;
}
unsigned long testRoundRects() {
unsigned long start;
int w, i, i2,
cx = tft.width() / 2 - 1,
cy = tft.height() / 2 - 1;
tft.fillScreen(GC9A01_BLACK);
w = min(tft.width(), tft.height());
start = micros();
for(i=0; i<w; i+=6) {
i2 = i / 2;
tft.drawRoundRect(cx-i2, cy-i2, i, i, i/8, tft.color565(i, 0, 0));
}
return micros() - start;
}
unsigned long testFilledRoundRects() {
unsigned long start;
int i, i2,
cx = tft.width() / 2 - 1,
cy = tft.height() / 2 - 1;
tft.fillScreen(GC9A01_BLACK);
start = micros();
for(i=min(tft.width(), tft.height()); i>20; i-=6) {
i2 = i / 2;
tft.fillRoundRect(cx-i2, cy-i2, i, i, i/8, tft.color565(0, i, 0));
}
return micros() - start;
}
Előre is köszönöm szépen!
Sziasztok.
Építettem egy műszert, ami NEO7M GPS modulból kap frekvenciát. Szükségem lenne kijelezni egy LED bekapcsolásával amikor valós GPS kapcsolat van. Praktikusan a $GPGGA sorból a hatodik (FIX) adat amikor nagyobb mint nulla, akkor kellene a LED-et bekapcsolni.
Mivel a programozás nem erősségem, ARDUINO UNO-m viszont van kéznél, kérdezem, hogy tudna-e valaki segíteni egy ilyen feladatra készült programmal?
Hát, előre is köszönöm, ha akad valakinek.
|
|