|
A klónok CH340 Soros-USB illesztőjének drivere ( Letöltés)
Ezt hogy nincs megadva low érték kifejtenéd bővebben?
Mint írtam satu laikus vagyok a témában... Én úgy gondolom hogy először kell a lednek egy 0 érték (nem világít) hogy aztán 1 értéket tudjon beállítani a programod szerint. Mivel nem adtál meg 0 értéket így a definiálásnál autómatikusan 1-et állított be. A definiálást úgy értem amikor beírtad hogy a led a 7-es lábon van. remélem nem írtam nagy badarságot majd a kollegák kijavítanak ha igen.
Szia! Azért van így, mert oké, hogy meg van a 100 alatti érték, akkor bekapcsol a led, de nincs ami kikapcsolja. Próbáld így:
int led = 13;
int pot = 0;
int val = 0;
void setup(){
pinMode(led, OUTPUT);
Serial.begin(9600);
}
void loop(){
val = analogRead (pot);
if (val <= 100){
digitalWrite (led, HIGH);
}
else {
digitalWrite (led, LOW);
}
Serial.println(val, DEC);
}
A feltételezésem helyes volt akkor? Legalább tanulok egy keveset.
Ha jól értem, akkor te azt szeretted volna mondani, hogy nincs olyan rész, ami LOW-ra húzza, akkor igen.
Legalább ma is tanultam valamit. Amúgy maga a program érdekes,mire szeretnéd használni?
Én semmire, a kérdező gondolom pedig csak gyakorolgatni.
Köszönöm. Így már működik.
Viszont akkor mikor, milyen esetben lehet használni az If utasítást?
Elsősorban gyakorlás, de felhasználható például fény hatására be vagy kikapcsolónak; ha a potmétert fotoellenállás és ellenállással alkotott feszültség osztóra cserélem.
Az IF, magyarul HA, akkor használható, amikor valami hatására valamit szeretnél, vagyis, pl:
HA a > b akkor: xy, vagyis, abban az esetben amikor a > b akkor fog az xy program futni, ellenkező esetben továbblép a program. Neked ha kell a másik állítás is, amikor ugye nem igaz, hogy a > b, akkor odaírod az ELSE részt, ami magyarul mondjuk DE HA NEM lenne. Példa:
HA a > b akkor: xy
DE HA NEM akkor: yx
Ez így fog kinézni:
Ha a > b akkor: xy
Ha b < a akkor: yx
Remélem érthető.
Tökéletesen érthető. Köszönöm a segítségedet.
Szia, Van rajta stabilizátor, de feleslegesen ne fűtsed, mert ha elszáll, repül a panel is. Inkább tegyél még elé egy 78-, 07-09V közötti stab tokot zászlóval, az a biztos.
Ha sikerült szóra bírnod a dekódert, kérlek oszd meg a tapasztalataidat. Szerintem mást is érdekelne itt egy Arduino köré épített rádiós kapcsolás.
Még nem volt időm foglalkozni vele. Először is csinálni akarok egy kis panelt neki, mert kell hozzá pár alkatrész és mivel SMD méretű, így tüskesorra akarom kivezetni a lábakat, hogy próbapanelon tudjam tesztelgetni. Amint jutottam vele valamire írok!
Sziasztok ! Erre van valakinek valami jó ötlete ?
tedd fel külön a 2 képet. Semmi nem látszik rákattintva belőle.
Valami gyanús lehet a Servo.h állomány végén.
Ne a képre, hanem a képfájl nevére kattints!
Igen igen ez kissé "el van rontódva" a fórum "motorjában" lévő lehetőségekben. Mivel lehetne ezt jobbá tenni ezt a csatolmányos kép nézegetőt ? ...
Ez részben megoldás ...
Jobb klikk és megnyitás új lapon/ablakban ...
Ekkor nem is kell célozni a képikon vagy aláírása közt. A hozzászólás módosítva: Aug 26, 2014
Az csak a kurzol , nincs ott semmi ><
Nah de valaki segítsen megérteni a problémát , mert ha egyszer ugyanaz az osztály , semmi modósítás nincs benne , akkor mégis hogyan javítsam a hibát ? O.o , vagyis hát mi a fene a hiba ?:O
Esetleg itt egy teljes kod : nem tökéletes , tesztelni még időm nemvolt , és még kezdő vagyok arduino területén : #include <Servo.h>
class Speed
{
public:
Speed(int speed){motor_speed=speed;};
void setSpeed(int speed){motor_speed=speed;};
int getSpeed(){return motor_speed;};
private:
int motor_speed;
};
class servoRange
{
public:
servoRange(int min,int max){servo_min=min;servo_max=max; out_of_range=false;};
void setRange(int min,int max){servo_min=min;servo_max=max;out_of_range=false;};
void setRangeMin(int min){servo_min=min;out_of_range=false;};
void setRangeMax(int max){servo_max=max;out_of_range=false;};
int getRangeError(int anggle){getRangeMessage(anggle);return out_of_range;};
void getRangeMessage(int angle){if((angle<servo_min || angle>servo_max )&& out_of_range!=true) {Serial.println("Wrong ANGLE it is out of range!-try out an other angle or specify an other.");out_of_range=true;};}
int getRangeMin(){return servo_min;};
int getRangeMax(){return servo_max;};
private:
int servo_min;
int servo_max;
bool out_of_range;
};
Servo main1; /*pin3 bottom*/ Speed main1s(15); servoRange main1r(0,180);
Servo main2;Servo main3; /*pin5,pin6*/ Speed main2_3s(15); servoRange main2_3r(20,160);
Servo main4; /*pin9*/ Speed main4s(25); servoRange main4r(0,180);
Servo main5; /*pin10*/ Speed main5s(15); servoRange main5r(0,180);
Servo main6; /*pin11*/ Speed main6s(15); servoRange main6r(0,180);
volatile int pos=90;
int prev_pos_1 =0 ;
int prev_pos_2_3 =20 ;
int prev_pos_4 =0;
int prev_pos_5 =0;
int prev_pos_6 =0;
int base_pos_1=prev_pos_1;
int base_pos_2_3=prev_pos_2_3;
int base_pos_4=prev_pos_4;
int base_pos_5=prev_pos_5;
int base_pos_6=prev_pos_6;
int motor =1;
void servoControll(int servo,int angle);
void servoMover(Servo servo,Speed MySpeed,int pos,int &prev_pos);
void servoMoverDouble (Servo servo1,Servo servo2,Speed Myspeed, int pos , int &prevpos, int one_step );
void servoControll(int servo,int angle)
{
switch(servo)
{
case 1:{servoMover(main1,main1s,angle,prev_pos_1);break; }
case 2:{servoMoverDouble(main2,main3,main2_3s,angle,prev_pos_2_3,10);break; }
//case 3:{servoMover(main3,main3s,angle,prev_pos_3);break; }
case 4:{servoMover(main4,main4s,angle,prev_pos_4);break; }
case 5:{servoMover(main5,main5s,angle,prev_pos_5);break; }
case 6:{servoMover(main6,main6s,angle,prev_pos_6);break; }
};
};
void servoMover(Servo servo,Speed MySpeed,int pos,int &prev_pos)
{
if(pos>prev_pos)
{
for(int c_pos = prev_pos; c_pos < pos; c_pos += 1)
{
servo.write(c_pos);
delay(MySpeed.getSpeed());
}
}
else
{
for(int c_pos = prev_pos; c_pos > pos; c_pos -= 1)
{
servo.write(c_pos);
delay(MySpeed.getSpeed());
}
}
prev_pos=pos;
};
void servoMoverDouble (Servo servo1,Servo servo2,Speed MySpeed, int pos, int &prev_pos, int one_step )
{
if(pos>prev_pos)
{
for(int c_pos = prev_pos; c_pos <= pos; c_pos += one_step)
{
servo2.write(c_pos);
delay(MySpeed.getSpeed());
}
}
else
{
for(int c_pos = prev_pos; c_pos >= pos; c_pos -= one_step)
{
servo2.write(c_pos);
delay(MySpeed.getSpeed());
}
}
prev_pos=pos;
};
void setup()
{
Serial.begin(9600);
}
void loop()
{
if (Serial.available()==4)
{
pos=((Serial.read()-48)*100);
pos=pos+((Serial.read()-48)*10);
pos=pos+((Serial.read()-48));
motor=(Serial.read()-48);
Serial.print("The value for : (");
Serial.print(motor);
Serial.print(") is :");
Serial.print(pos);
Serial.println();
}
if (Serial.available()==3)
{
pos=((Serial.read()-48)*10);
pos=pos+((Serial.read()-48));
motor=(Serial.read()-48);
Serial.print("The value for : (");
Serial.print(motor);
Serial.print(") is :");
Serial.print(pos);
Serial.println();
}
if (Serial.available()==2)
{
pos=((Serial.read()-48));
motor=(Serial.read()-48);
Serial.print("The value for : (");
Serial.print(motor);
Serial.print(") is :");
Serial.print(pos);
Serial.println();
}
if (Serial.available()==1 && Serial.read()=='o')
{
Serial.println("The arm is shutting down");
servoControll(1,base_pos_1);
servoControll(2,base_pos_2_3);
servoControll(4,base_pos_4);
servoControll(5,base_pos_5);
servoControll(6,base_pos_6);
}
if ( Serial.available()==1 &&Serial.read()=='d')
{
Serial.println("The servos are dettaching...");
main1.detach();
main2.detach();
main3.detach();
main4.detach();
main5.detach();
main6.detach();
}
if (Serial.available()==1 && Serial.read()=='a')
{
Serial.println("The servos are attaching...");
main1.attach(3);
main2.attach(5);
main3.attach(6);
main4.attach(9);
main5.attach(10);
main6.attach(11);
}
delay(30);
if(motor<1 || motor>6){Serial.println("Wrong motor number; it must be between (0-6)");motor=1;}
else
{
switch(motor)
{
// detach servos , 'cause "buzz"ing
case 1: {if(main1r.getRangeError(pos)==0){main1.attach(3);servoControll(motor,pos);main1.detach();};break;}
/*case 2: {if(main2_3r.getRangeError(pos)==0)
{
main2.attach(4);
main3.attach(5);
main2.write(pos);
main3.write(180-pos);
main2.detach();
main3.detach();
};
break;
}
*/
case 2: {if(main2_3r.getRangeError(pos)==0){main2.attach(4);main3.attach(5);servoControll(motor,pos);main2.detach(); main3.detach();};break;}
case 4: {if(main4r.getRangeError(pos)==0){main4.attach(9); servoControll(motor,pos);main4.detach();};break;}
case 5: {if(main5r.getRangeError(pos)==0){servoControll(motor,pos);};break;}
case 6: {if(main6r.getRangeError(pos)==0){servoControll(motor,pos);};break;}
};
}
}
Sziasztok,
Egy Nokia 3410 LCD-vel bibelodok, ami allitolag 96x65 -os nem mint a 3310-es.
Mukodik a sima PCD8544-es es az LCD5110-es konyvtarfajlal is, de nem hasznalja ki az egesz feluletet.
Esetleg tudtok-e valami modositott peldanyt ezekbol a konyvtyarfajlokbol, ami menne a 96x65-os LCD-hez?
Az LCD5110 lenne a mefelelo mert azzal siman lehet kulombozo meretu karaktereket nyomtatni.
Koszonom.
Szia! Én az 5110LCD-hez az Adafruit PCD8544-et használom, abban ha megnyitod az "adafruit_PCD8544.h" fájlt valami szövegszerkesztővel, akkor át tudod írni a "#define LCDWIDTH 84" értéket 96-ra és a "#define LCDHEIGHT 48" értéket 65-re.
Ne felejts el rámenteni!
Itt a módosított "adafruit_pcd8544.h" fájl tartalma!
/*********************************************************************
This is a library for our Monochrome Nokia 5110 LCD Displays
Pick one up today in the adafruit shop!
These displays use SPI to communicate, 4 or 5 pins are required to
interface
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
Written by Limor Fried/Ladyada for Adafruit Industries.
BSD license, check license.txt for more information
All text above, and the splash screen must be included in any redistribution
*********************************************************************/
#ifndef _ADAFRUIT_PCD8544_H
#define _ADAFRUIT_PCD8544_H
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#include "pins_arduino.h"
#endif
#include <SPI.h>
#define BLACK 1
#define WHITE 0
#define LCDWIDTH 96
#define LCDHEIGHT 65
#define PCD8544_POWERDOWN 0x04
#define PCD8544_ENTRYMODE 0x02
#define PCD8544_EXTENDEDINSTRUCTION 0x01
#define PCD8544_DISPLAYBLANK 0x0
#define PCD8544_DISPLAYNORMAL 0x4
#define PCD8544_DISPLAYALLON 0x1
#define PCD8544_DISPLAYINVERTED 0x5
// H = 0
#define PCD8544_FUNCTIONSET 0x20
#define PCD8544_DISPLAYCONTROL 0x08
#define PCD8544_SETYADDR 0x40
#define PCD8544_SETXADDR 0x80
// H = 1
#define PCD8544_SETTEMP 0x04
#define PCD8544_SETBIAS 0x10
#define PCD8544_SETVOP 0x80
// Default to max SPI clock speed for PCD8544 of 4 mhz (16mhz / 4) for normal Arduinos.
// This can be modified to change the clock speed if necessary (like for supporting other hardware).
#define PCD8544_SPI_CLOCK_DIV SPI_CLOCK_DIV4
class Adafruit_PCD8544 : public Adafruit_GFX {
public:
// Software SPI with explicit CS pin.
Adafruit_PCD8544(int8_t SCLK, int8_t DIN, int8_t DC, int8_t CS, int8_t RST);
// Software SPI with CS tied to ground. Saves a pin but other pins can't be shared with other hardware.
Adafruit_PCD8544(int8_t SCLK, int8_t DIN, int8_t DC, int8_t RST);
// Hardware SPI based on hardware controlled SCK (SCLK) and MOSI (DIN) pins. CS is still controlled by any IO pin.
// NOTE: MISO and SS will be set as an input and output respectively, so be careful sharing those pins!
Adafruit_PCD8544(int8_t DC, int8_t CS, int8_t RST);
void begin(uint8_t contrast = 40, uint8_t bias = 0x04);
void command(uint8_t c);
void data(uint8_t c);
void setContrast(uint8_t val);
void clearDisplay(void);
void display();
void drawPixel(int16_t x, int16_t y, uint16_t color);
uint8_t getPixel(int8_t x, int8_t y);
private:
int8_t _din, _sclk, _dc, _rst, _cs;
volatile uint8_t *mosiport, *clkport;
uint8_t mosipinmask, clkpinmask;
void spiWrite(uint8_t c);
bool isHardwareSPI();
};
#endif
Koszi a gyors segitseget, Koszi.
En vagyok a mert nem irtam meg hogy ChipKit-em van es az Adafruit-ot sajni kedveli (en nem tudok ra megoldast), csak a sima PCD8544 -et, ezt irja ki:
Idézet: „In file included from D:\...\mpide\libraries\Adafruit_PCD8544\Adafruit_PCD8544.cpp:20:0:
d:\...\MPIDE - chipKIT\hardware\pic32\compiler\pic32-tools\bin\../lib/gcc/pic32mx/4.5.1/../../../../pic32mx/include/avr/pgmspace.h:4:2: error: #error ******** This sketch or library uses AVR-specific code that may not work with the chipKIT platform. See this forum for more information on porting code to chipKIT [www.chipkit.org/forum/viewforum.php?f=7] ********
D:\...\mpide\libraries\Adafruit_PCD8544\Adafruit_PCD8544.cpp:26:24: fatal error: util/delay.h: No such file or directory
compilation terminated.” A hozzászólás módosítva: Aug 27, 2014
Idézet: „sajni NEM kedveli”
Nem az include sorra gondoltam, hanem magára a Servo.h állományra. Pl. A Servo.h végen van egy komment kezdet, de nincs meg a lezárása. A preprocesszor az sor helyére "teszi" a h állományt, így előfordulhat, hogy az include sor utáni kód kommentbe kerül. stb.
Széttördeltem kód-ot , a servo.h és a servo.cpp file átírásával (bővítésével), most úgy nézz ki , működik .
Sziasztok,
Esetleg van valakinek valami otlete hogyan lehet ebbe a kodba nagyobb karaktereket is beszurni, ugy hogy egyszerre irjon ki normal meretu (5x7) karaktereket es nagyobbakat is.
Tudom letezik az Adafruit verzio, de mint irtam az AVR specifikus es emiatt nalam leallt az esz.
Az lenne a legmegfelelobb ha a fent emlitett koddal tudnam legalabb ket fele karaktert nyomtatni.
Koszonom.
|
|