Arduino mintaprogramok
Arduino mintaprogramok
Azért szeretném megnyitni ezt az új témát, ami valójában nem az, mert hiányát érzem annak, hogy Arduinóval ügyködők, mint én is. Nem sok magyarázó mintaprogramokat találnak, legalább is magyarul.
Káosz annak aki most lépett erre az ösvényre, mint például nekem is.
Káosz annak aki most lépett erre az ösvényre, mint például nekem is.
1 mHz
Elsőként azt szeretném megtudni hogyan lehet a maximális frekit elérni, amit az Arduino tud 1-4 MHz.
Erre keresve a lehetőségeket, legelőször ezt próbáltam ki.
Ennek a programnak a max. kimenő frekvenciája 7 kHz.
Ha csak simán bekapcsolok egy PWM lábat ott pedig 490 Hz.
int pirosledPin =9; // pirosledlába 10-es digitális kimeneten
int zoldledPin = 11; // pirosledlába 11-es digitális kimeneten
int potPin = 0; // potenciométer jellába analóg 0-án
int potval = 0; // poti variációs érték
void setup()
{
pinMode(pirosledPin, OUTPUT); // pirosled kimenetként
pinMode(zoldledPin, OUTPUT); // zöldled kimenetként
}
void loop()
{
potval = analogRead(potPin); //potenciométer állapotát olvassa ki
analogWrite(potPin, potval); // a kiolvasott értéket behejetesíti a potval azonosítókba
{
digitalWrite(pirosledPin, HIGH);// led magas szinten
delay(potval); // potenciométerrel megállapított szünet idő
digitalWrite(pirosledPin, LOW); // led alacsony szinten
delayMicroseconds(1);
}
{
digitalWrite(zoldledPin, HIGH); // led alacsony szinten
delay(potval); // potenciométerrel megállapított szünet idő
digitalWrite(zoldledPin, LOW); // led magas szinten
delayMicroseconds(1); // szünet idő
}
}
Az ötleteket szívesen venném.
Erre keresve a lehetőségeket, legelőször ezt próbáltam ki.
Ennek a programnak a max. kimenő frekvenciája 7 kHz.
Ha csak simán bekapcsolok egy PWM lábat ott pedig 490 Hz.
int pirosledPin =9; // pirosledlába 10-es digitális kimeneten
int zoldledPin = 11; // pirosledlába 11-es digitális kimeneten
int potPin = 0; // potenciométer jellába analóg 0-án
int potval = 0; // poti variációs érték
void setup()
{
pinMode(pirosledPin, OUTPUT); // pirosled kimenetként
pinMode(zoldledPin, OUTPUT); // zöldled kimenetként
}
void loop()
{
potval = analogRead(potPin); //potenciométer állapotát olvassa ki
analogWrite(potPin, potval); // a kiolvasott értéket behejetesíti a potval azonosítókba
{
digitalWrite(pirosledPin, HIGH);// led magas szinten
delay(potval); // potenciométerrel megállapított szünet idő
digitalWrite(pirosledPin, LOW); // led alacsony szinten
delayMicroseconds(1);
}
{
digitalWrite(zoldledPin, HIGH); // led alacsony szinten
delay(potval); // potenciométerrel megállapított szünet idő
digitalWrite(zoldledPin, LOW); // led magas szinten
delayMicroseconds(1); // szünet idő
}
}
Az ötleteket szívesen venném.
Szerintem szed le innen:
http://www.arduino.cc/playground/Main/M ... Curriculum
Ezeket:
Getting Started Section - download here (1.78MB)
Learning Section - download here (4.62MB)
Reference Section - download here (3.62MB)
Ennél jobbat én sem tudok!

http://www.arduino.cc/playground/Main/M ... Curriculum
Ezeket:
Getting Started Section - download here (1.78MB)
Learning Section - download here (4.62MB)
Reference Section - download here (3.62MB)
Ennél jobbat én sem tudok!
Tipp, talán:
http://www.ladyada.net/learn/arduino/
http://www.ladyada.net/learn/arduino/
Jó volt a link Róbert.
Az érdekessége az, hogy már egyszer megtaláltam, de elsiklottam mellette.
Már is született belőle egy 53kHz -es jel.
int ledPin = 7; // 7 kimenet bekapcsolva
int val; // variációs státusz
void setup() {
pinMode(ledPin, OUTPUT); // 7 pin kimenetként kezelve
}
void loop(){
val = digitalRead(ledPin); // 7 pin állapota kiolvasva
if (val == LOW) { // ha egyenlő alacsony jellel
digitalWrite(ledPin, HIGH); // akkor kírja 7 pin lábát magas jelre
}
if (val == HIGH) { // ha magassal egyenlő
digitalWrite(ledPin, LOW); // kiírja 7 pin lábát alacsonyra
}
}
Az érdekessége az, hogy már egyszer megtaláltam, de elsiklottam mellette.
Már is született belőle egy 53kHz -es jel.
int ledPin = 7; // 7 kimenet bekapcsolva
int val; // variációs státusz
void setup() {
pinMode(ledPin, OUTPUT); // 7 pin kimenetként kezelve
}
void loop(){
val = digitalRead(ledPin); // 7 pin állapota kiolvasva
if (val == LOW) { // ha egyenlő alacsony jellel
digitalWrite(ledPin, HIGH); // akkor kírja 7 pin lábát magas jelre
}
if (val == HIGH) { // ha magassal egyenlő
digitalWrite(ledPin, LOW); // kiírja 7 pin lábát alacsonyra
}
}
Nem tudom itt nincsen ELSE ág?
Mert így esetleg még gyorsabb lenne:
if (val == LOW) { // ha egyenlő alacsony jellel
digitalWrite(ledPin, HIGH); // akkor kírja 7 pin lábát magas jelre
else // ha magassal egyenlő
digitalWrite(ledPin, LOW); // kiírja 7 pin lábát alacsonyra
}
Vagy a Case is gyorsabb az if-nél!

Mert így esetleg még gyorsabb lenne:
if (val == LOW) { // ha egyenlő alacsony jellel
digitalWrite(ledPin, HIGH); // akkor kírja 7 pin lábát magas jelre
else // ha magassal egyenlő
digitalWrite(ledPin, LOW); // kiírja 7 pin lábát alacsonyra
}
Vagy a Case is gyorsabb az if-nél!
Kipróbáltam.
Valóban, kicsit gyorsabb. Most 58.6 kHz.
Megnézem ezt az Case parancsot is, de ezt még értelmeznem kell mi is lenne ez.
int ledPin = 7; // 7 kimenet bekapcsolva
int val; // variációs státusz
void setup() {
pinMode(ledPin, OUTPUT); // 7 pin kimenetként kezelve
}
void loop(){
val = digitalRead(ledPin); // 7 pin állapota kiolvasva
if (val == LOW) { // ha egyenlő alacsony jellel
digitalWrite(ledPin, HIGH); // akkor kírja 7 pin lábát magas jelre
}
else if(val == HIGH) { // ha magassal egyenlő
digitalWrite(ledPin, LOW); // kiírja 7 pin lábát alacsonyra
}
}
Valóban, kicsit gyorsabb. Most 58.6 kHz.
Megnézem ezt az Case parancsot is, de ezt még értelmeznem kell mi is lenne ez.
int ledPin = 7; // 7 kimenet bekapcsolva
int val; // variációs státusz
void setup() {
pinMode(ledPin, OUTPUT); // 7 pin kimenetként kezelve
}
void loop(){
val = digitalRead(ledPin); // 7 pin állapota kiolvasva
if (val == LOW) { // ha egyenlő alacsony jellel
digitalWrite(ledPin, HIGH); // akkor kírja 7 pin lábát magas jelre
}
else if(val == HIGH) { // ha magassal egyenlő
digitalWrite(ledPin, LOW); // kiírja 7 pin lábát alacsonyra
}
}
De ha csak egy nagyon gyors rezgést akarsz, akkor:
void loop(){
digitalWrite(ledPin, HIGH); // akkor kírja 7 pin lábát magas jelre
digitalWrite(ledPin, LOW); // kiírja 7 pin lábát alacsonyra
}

Az else-ben az a lényeg, hogy nem kel bele még 1 feltétel vizsgálat!
void loop(){
val = digitalRead(ledPin); // 7 pin állapota kiolvasva
if (val == LOW) { // ha egyenlő alacsony jellel
digitalWrite(ledPin, HIGH); // akkor kírja 7 pin lábát magas jelre
}
else { // ha magassal egyenlő
digitalWrite(ledPin, LOW); // kiírja 7 pin lábát alacsonyra
}
}

void loop(){
digitalWrite(ledPin, HIGH); // akkor kírja 7 pin lábát magas jelre
digitalWrite(ledPin, LOW); // kiírja 7 pin lábát alacsonyra
}
Az else-ben az a lényeg, hogy nem kel bele még 1 feltétel vizsgálat!
void loop(){
val = digitalRead(ledPin); // 7 pin állapota kiolvasva
if (val == LOW) { // ha egyenlő alacsony jellel
digitalWrite(ledPin, HIGH); // akkor kírja 7 pin lábát magas jelre
}
else { // ha magassal egyenlő
digitalWrite(ledPin, LOW); // kiírja 7 pin lábát alacsonyra
}
}
Hát igen.
Így már más a történet, 127 kHz.
int ledPin = 11; // 7 kimenet bekapcsolva
int val; // variációs státusz
void setup() {
pinMode(ledPin, OUTPUT); // 7 pin kimenetként kezelve
}
void loop(){
digitalWrite(ledPin, HIGH); // akkor kírja 7 pin lábát magas jelre
digitalWrite(ledPin, LOW); // kiírja 7 pin lábát alacsonyra
}
Így már más a történet, 127 kHz.
int ledPin = 11; // 7 kimenet bekapcsolva
int val; // variációs státusz
void setup() {
pinMode(ledPin, OUTPUT); // 7 pin kimenetként kezelve
}
void loop(){
digitalWrite(ledPin, HIGH); // akkor kírja 7 pin lábát magas jelre
digitalWrite(ledPin, LOW); // kiírja 7 pin lábát alacsonyra
}
4Mhz-en azért többnek kellene leni?
Nincsen bekapcsolva a 8-as órajel osztás?

Adatlap 27.-oldal Default Clock Source:
http://www.atmel.com/dyn/resources/prod ... oc2545.pdf
Ha CKDIV8=0 átkapcsolod 1-re. 8Mhz-vel fog menni a procid.
Nincsen bekapcsolva a 8-as órajel osztás?
Adatlap 27.-oldal Default Clock Source:
http://www.atmel.com/dyn/resources/prod ... oc2545.pdf
Ha CKDIV8=0 átkapcsolod 1-re. 8Mhz-vel fog menni a procid.
Tipp:
Fix frekis PWM segitsegevel?
http://www.arduino.cc/en/Tutorial/PWM
Az Arduino-t nem arra találták, hogy hogy a HW-t maximálisan kihasználjuk. Építészek, művészeknek könnyen kezelhető - ám kissé kötött - free GPL hardver + sw rendszert keszittetek...
Igy sokminden fordul be a kódba. Pl. a Arduino-0012-hoz kepest a Arduino-0015 már sokat optimalizál! (viszont vannak benne még hibák
).
Fix frekis PWM segitsegevel?
http://www.arduino.cc/en/Tutorial/PWM
Az Arduino-t nem arra találták, hogy hogy a HW-t maximálisan kihasználjuk. Építészek, művészeknek könnyen kezelhető - ám kissé kötött - free GPL hardver + sw rendszert keszittetek...
Igy sokminden fordul be a kódba. Pl. a Arduino-0012-hoz kepest a Arduino-0015 már sokat optimalizál! (viszont vannak benne még hibák