Fórum témák

» Több friss téma
Fórum » Arduino
 
Témaindító: groening, idő: Szept 28, 2008
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Lapozás: OK   544 / 552
(#) GPeti1977 válasza KoblogPerGyok hozzászólására (») Júl 7, 2019 / 1
 
A parancs vevő rész ugyanaz:
if (Serial.available() > 0) {
commandChar = Serial.read();
rec = true;
}
if(rec== true){
rec = false;
switch (commandChar){
case 'a':
//csinal valamit
delay(10);
Serial.print('A');
break;
...

A vezérlő kódja:
if (Serial1.available() > 0) {
rec=Serial1.read();
//Serial.println(rec);
recbit=true;
}
if(recbit == true){
recbit = false;

if(lastsend=='a' && rec == 'A'){
zummer1();
}
else if(lastsend=='o' && rec == 'O'){
zummer1();
}
...

Küldéskor elmentem egy globális válozóba a legutolsó küldött adatot:
Serial1.print('o');
lastsend = 'o';
(#) suszitibi válasza kapu48 hozzászólására (») Júl 12, 2019 /
 
Nem írtam, hogy prellezik. Épp azt írtam, hogy nem prellezik. Az, hogy folyamatosan küldi a jelet, nem prellezés. Hallokal terveztem, de érintő szenzorok lesznek, így könnyebb. A prell mentesítés itt is meg van. A gombok, csak ideiglenesen vannak, amíg nincsenek szenzorok.
Elvileg megoldódott. Ha kész lesz letesztelem és ha minden OK, elküldöm a programot.
Üdv: Tibi
(#) berkesandor hozzászólása Júl 13, 2019 /
 
GPRS segítségével szeretnék adatokat feltölteni egy SQL adatbázisba.
Adott a Pro Mini és egy Sim800.
Ezekkel az AT parancsokkal lehet feltölteni az adatokat:

AT+CGATT?
AT+SAPBR=3,1,"CONTYPE","GPRS"
AT+SAPBR=3,1,"APN","internet"
AT+SAPBR=1,1
AT+HTTPINIT
AT+HTTPPARA="URL","http://********.hu/write_data_s.php?data1=2.22&data2=3.33"
AT+HTTPACTION=0
AT+HTTPREAD
AT+HTTPTERM

Csináltam egy softserial-os kis programot. A soros monitorra beírom (vagy bemásolom) a parancsokat sorban, majd továbbítom a SIM800 felé, minden szépen megy.

Ha programból küldöm egymás után a parancsokat, akkor az AT+SAPBR=1,1 -nál folyton error-t dob.
Emeletem a parancsok közti időt, de az sem segít.
Mit rontok el?
Hol van a kutya elásva?
  1. #include <Sim800L.h>
  2. #include <SoftwareSerial.h>               
  3.  
  4. #define RX  5
  5. #define TX  4
  6. #define RESET  8
  7.  
  8. Sim800L GSM(RX, TX);
  9.  
  10. uint8_t index;                               // to indicate the message to read.
  11.  
  12. byte cgatt = 0;
  13. byte sapbr1 = 0;
  14. byte sapbr2 = 0;
  15. byte sapbr3 = 0;
  16.  
  17. byte httpinit = 0;
  18. byte url = 0;
  19. byte para = 0;
  20. byte action = 0;
  21. byte httpread = 0;
  22. byte term = 0;
  23.  
  24. void setup() {
  25.   Serial.begin(9600);
  26.   GSM.begin(9600);
  27.   pinMode( RESET, OUTPUT);
  28.  
  29.  
  30.   digitalWrite(RESET, LOW);
  31.   delay (1000);
  32.   digitalWrite(RESET, HIGH);
  33.   delay (3000);
  34.  
  35.   delay(100);
  36.   GSM.print(F("AT\r\n"));
  37.  
  38.   delay(100);
  39.   GSM.print(F("AT\r\n"));
  40.  
  41. }
  42.  
  43. void loop() {
  44.  
  45.  
  46.   if(GSM.available()){
  47.     Serial.write(GSM.read());
  48.   }
  49.   //Read Arduino IDE Serial Monitor inputs (if available) and send them to SIM800
  50.   if(Serial.available()){   
  51.     GSM.write(Serial.read());
  52.   }
  53.  
  54.  
  55.  
  56.   if ( cgatt == 0 && millis() > 25000)
  57.       {GSM.println("AT+CGATT?\r\n");
  58.        cgatt = 1;}
  59.  
  60.    if ( sapbr1 == 0 && millis()30000)
  61.       {GSM.println("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"\r\n");
  62.       //delay(1000);
  63.        sapbr1 = 1;}
  64.  
  65.    if ( sapbr2 == 0 && millis()35000)
  66.       {GSM.println("AT+SAPBR=3,1,\"APN\",\"internet\"\r\n");
  67.        //delay(4000);
  68.        sapbr2 = 1;}     
  69.  
  70.  
  71.    if ( sapbr3 == 0 && millis() > 40000)
  72.       {GSM.println("AT+SAPBR=1,1 \r\n");
  73.       //delay(2000);
  74.        sapbr3 = 1;}
  75.  
  76.      
  77.  
  78.    if ( httpinit == 0 && millis() > 45000)
  79.       {GSM.println("AT+HTTPINIT\r\n");
  80.        httpinit = 1;}
  81.  
  82.  
  83.  
  84.      if ( url == 0 && millis() > 50000)
  85.       {    GSM.println("AT+HTTPPARA=\"URL\",\"http:**********.hu/write_data_s.php?data1=2.88&data2=2.93\"\r\n");
  86.          url = 1;}
  87.  
  88.    if ( para == 0 && millis() > 55000)
  89.       {GSM.println("AT+HTTPACTION=0\r\n");
  90.        para = 1;}
  91.        
  92.  
  93.    if ( httpread == 0 && millis() > 60000)
  94.       {GSM.println("AT+HTTPREAD\r\n");
  95.        httpread = 1;}
  96.        
  97.  
  98.    if ( term == 0 && millis() > 65000)
  99.       {GSM.println("AT+HTTPTERM\r\n");
  100.        term = 1;}
  101.      
  102. }
A hozzászólás módosítva: Júl 13, 2019
(#) Bakman válasza berkesandor hozzászólására (») Júl 13, 2019 /
 
Egy USB-UART modul segítségével hasonlítsd össze a két adatot, látni fogod mi a különbség a kettő között és már meg is lesz a hiba.
(#) proba válasza berkesandor hozzászólására (») Júl 13, 2019 /
 
Lehet hiányzik neki valami init rész. Esetleg mint primitív hiba a SIM zárolt, vagy a szolgáltatónál nincs minden engedélyezve. Ha telefonba teszed a kártyát ott megy?
(#) KoblogPerGyok válasza berkesandor hozzászólására (») Júl 13, 2019 /
 
Szia!

Vedd ki az 1,1 utáni space-nek látszó karaktert. Lehet nem white space, hanem valami mássá konvertálódik a fordítóban.

Illetve nem értem miért kell két soremelés kocsi vissza. A GSM.println() nem ezt teszi? Lehet tévedek csak egy tipp.
(#) berkesandor válasza KoblogPerGyok hozzászólására (») Júl 14, 2019 /
 
Köszönöm az ötletek, közben megoldódott a probléma.
#Bakman: jó öltet, de előbb megoldódott, mint hogy rávettem volna magam a modulozásra
#proba: a parancsok ugyanazok, meg a sim kártya is, ezért ezeket a hibákat kizárnám.
#KoblogPerGyok: Szinte minden példában a \r\n szerepel, nem tudom csak így jó e, de eddig mindig működött.

A megoldás: Ne kérdezzétek miért van így, vagy miért csak így működik, nem tudom.
A reset lábbal először kikapcsolom a SIM800-t, várok pár másodpercet ráresetelek, és működik. Ha csak sima resetet adok neki akkor nem.
(#) proba válasza berkesandor hozzászólására (») Júl 14, 2019 /
 
Ami még eszembe jutott,
egyik lehet valamely egyébként bemeneti lábon tápfeszültséget kap kikapcsolás után is, így csak félhalott lesz. Így félálomból ébred.
illetve a katalógus szerint a bemenetek jobban szeretnék a 2,8V-ot mint a 3,3-at. Ha a modul nem teljesen korrekt, a magasabb bemenő feszültségre is csinál hülyeséget. Némely modul eladó leteszi az esküt, hogy TTL szintű a modulja, de ez koránt sincs úgy, még a 3,3V is sok neki.
A hozzászólás módosítva: Júl 14, 2019
(#) Kovidivi válasza proba hozzászólására (») Júl 15, 2019 /
 
Ezt nem teljesen értem. Ha van a bemenettel soros ellenállás, akkor ha az Arduino tápjánál nagyobb feszültség érkezik a bemenetre (egy diódányival nagyobb), akkor automatikusan a feszültség ott le lesz csökkentve, betáp+diódányi feszültségre. A soros ellenállást úgy kell megválasztani, hogy az Arduino tápja és az Arduino is kezelni tudja ezt a plusz áramot.
(#) berkesandor válasza proba hozzászólására (») Júl 15, 2019 /
 
Használok szintillesztőt. 2,8 V-t kap a Sim. Jobb a békesség.
(#) asrock válasza berkesandor hozzászólására (») Júl 15, 2019 /
 
Soros ellenállás nem elég fesz osztó kell spi busra 5v to 3.3v pl (3k3, 1k8) lenti képnél..
plBővebben: Link
(#) proba válasza asrock hozzászólására (») Júl 15, 2019 /
 
Mint írtam, nem 3,3V kell a bemenetekre hanem maximum 2,8V.
Kovidivi:
Osztó kell, mert a soros ellenálláson nem folyik akkora áram, hogy kellő feszültség essen rajta. A lábakon befolyó áram pedig a belső referencia feszültség felé van elvezetve, a túlfeszültség ennek a potenciálját emeli. Nem az arduinót kell védeni ( az jól viseli soros ellenállással), hanem a sim800 modult.
A hozzászólás módosítva: Júl 15, 2019
(#) asrock hozzászólása Júl 17, 2019 /
 
Mi a gond?

hibba kod: expected ';' before 'Serial'


  1. #include <Wire.h>
  2. #include <Adafruit_Sensor.h>
  3. #include <Adafruit_BME280.h>
  4.  
  5.  
  6. #define SEALEVELPRESSURE_HPA (1013.25)
  7.  
  8. Adafruit_BME280 bme; // I2C
  9.  
  10. unsigned long delayTime;
  11.  
  12. float pressure;       //To store the barometric pressure (Pa)
  13. float temperature;    //To store the temperature (oC)
  14. float SLpressure_mB;
  15. int ELEVATION = 290//PUT HERE THE ELEVATION OF YOUR LOCATION IN METERS
  16.  
  17. void setup() {
  18.     Serial.begin(115200);
  19.    
  20.     Serial.println(F("BME280 test"));
  21.  
  22. }
  23.  
  24.  
  25. void loop() {
  26.     printValues();
  27.     delay(1000);
  28. }
  29.  
  30.  
  31. void printValues() {
  32. pressure = bme.readPressure();
  33. temperature = bme.readTemperature();
  34. SLpressure_mB = (((pressure * 100.0)/pow((1-((float)(ELEVATION))/44330), 5.255))/100.0)
  35.  
  36.      Serial.print("Temperature = ");
  37.     Serial.print(temperature);
  38.     Serial.println(" *C");
  39.  
  40.     Serial.print("Pressure = ");
  41.  
  42.     Serial.print(pressure/ 100.0F);
  43.     Serial.println(" hPa");
  44.  
  45.     Serial.print("Approx. Altitude = ");
  46.     Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
  47.     Serial.println(" m");
  48.  
  49.     Serial.print("Humidity = ");
  50.     Serial.print(bme.readHumidity());
  51.     Serial.println(" %");
  52.     Serial.println();
  53.    
  54.     Serial.print("Equivalent Sea Level Pressure: ");
  55.     Serial.print(SLpressure_mB, 2);
  56.     Serial.println(" mB");
  57. }
(#) Kari55 válasza asrock hozzászólására (») Júl 17, 2019 /
 
Szerintem a 34. sor végén hiányzik a pontosvessző.
(#) asrock válasza Kari55 hozzászólására (») Júl 17, 2019 /
 
kösz!
(#) atus1981 hozzászólása Júl 17, 2019 /
 
Sziasztok!
Arduinoval szeretnék megvalósítani egy keltetőgép vezérlést. Milyen hő-és páratartalom szenzorokkal érdemes nekilátni? A ds18b20 vagy lm35 ? Dh11 vagy dh22? Vagy valami komolyabbal kellene?
Ja és PID vezérléssel fog fűteni.
Köszi.
(#) asrock hozzászólása Júl 17, 2019 /
 
Mi a hiba: no matching function for call to 'Adafruit_BME280::readPressure(float&)'

  1. void printValues() {
  2. //String pre [bme.readPressure[SLpressure_mB]);
  3. String pre (bme.readPressure(SLpressure_mB));
  4. String temp (bme.readTemperature());
  5.  
  6. float SLpressure_mB = (((pressure * 100.0)/pow((1-((float)(ELEVATION))/44330), 5.255))/100.0)
  7.  
  8. P.setIntensity(1);
  9.   char time_string[100];
  10.  
  11.  sprintf(time_string, "%d/*C        %d/mPa       ",temp.toInt(),pre.c_str());
  12.   P.displayText(time_string, PA_CENTER, SCROLL_SPEED2, PAUSE_TIME3, PA_SCROLL_RIGHT ? PA_SCROLL_LEFT : PA_SCROLL_RIGHT);
  13.  
  14.  
  15.   while (!P.displayAnimate()) {
  16.   P.displayAnimate();
  17.   ESP.wdtFeed();
  18.    
  19. }
(#) Rober_4 hozzászólása Júl 17, 2019 /
 
Ma megjött az Arduino Due alaplap.
Az első tesztek után nagyon csalódott vagyok.
Régen egy 100Mhz-es pentium 1-es elvitt a vállán egy egész oprendszert+ egy csomó audió programot. Ezzel a cuccal meg három szinusz függvényt nem lehet kiszámolni valós időben, 12biten és az értéküket a DAC-ra kiírni, pedig 84Mhz-en ketyeg, és nekem elég lenne 100nanoszekundumonként 6 számítás. 84000000/10000/6=1400. Tehát 1400 órajelciklus alatt kellene megoldania egy szinusz függvény értékszámítást. Persze velem is van a baj, nem igazán értem miért kell a színuszt radiánban számolni, számomra fokokban érthető 90-nél csúcs, 180-nál nulla, és így egy csomó konverzió, és double változók tömkelege akadályozza a teljesítményt...
Eléggé elszomorodtam. Ha valaki tud jó bufferes megoldást a DAC kezeléséhez, ne kíméljen! Esetleg eladó, vagy olyan boardra cserélendő, ami ki tudja számolni ezeket valósidőben, és nem kell hozzá megvenni egy dsp fejlesztőeszközt 100ezerért. (Bocs de nagyon mérges vagyok, elcsesztem rá 8ezer Ft-ot )
A hozzászólás módosítva: Júl 17, 2019
(#) _BiG_ válasza Rober_4 hozzászólására (») Júl 18, 2019 /
 
Az megvan, hogy a Pentium egy CISC processzor koprocesszorral, ami a lebegőpontos számolásokat csinálja?
Ezzel szemben az Arduino magja egy RISC procin alapul, ráadásul az aritmetikai egysége sem bonyolult.
(#) cua válasza Rober_4 hozzászólására (») Júl 18, 2019 /
 
1/84000000=0.000000012=12ns
100/12~=8.3 ciklus
Azert ennyibol nehez kihozni egy szinuszt...
A hozzászólás módosítva: Júl 18, 2019
(#) icserny válasza Rober_4 hozzászólására (») Júl 18, 2019 /
 
"nekem elég lenne 100nanoszekundumonként 6 számítás"
A 84 MHz-en ketyegő MCU 100 ns alatt legjobb esetben is csak 8,4 utasítást tud végrehajtani.
(#) Kovidivi válasza Rober_4 hozzászólására (») Júl 18, 2019 / 1
 
Ha át tudod írni a függvényt, hogy ne lebegőpontos számokkal számoljon, nagy mértékű gyorsulást fogsz elérni, tippem szerint legalább 4x gyorsabb lesz.
A sin fv-ed is optimalizálni kellene. Esetleg a beépített Arduino-s fv-t használod? Ha igen, az valószínűleg univerzálisra van megírva, rengeteg feltételrendszerrel, minden hibát megvizsgálva. Ezekre szerintem neked nincs szükséged.
Összefoglalva, nem biztos, hogy a hardware a kevés (elképzelhető!), de lebegőpontos számítással, és egy optimalizálatlan fv-nyel ne akarj hiper-szuper sebességet elérni!
A hozzászólás módosítva: Júl 18, 2019
(#) Rober_4 válasza Kovidivi hozzászólására (») Júl 18, 2019 /
 
Köszönöm mindenkinek, kidobálom a levegőpontos dolgokat belőle, lehet használok wavetábla értékeket, ennek ellenére gyenge ez a proci is sajnos...
(#) benjami válasza Rober_4 hozzászólására (») Júl 18, 2019 / 1
 
Mivel a DAC-nak egész számokat kell küldeni, felesleges a lebegőpontos számokkal bűvészkedni. Szinusz előállításhoz meg használj táblázatot a lebegőpontos és lassú beépített függvény helyett. A másik lehetőség, hogy FPU-t is tartalmazó M4 procit használsz, pl. ezt.
(#) Rober_4 válasza benjami hozzászólására (») Júl 18, 2019 /
 
Közben kipróbáltam az Audio.h függvénytárat és lehet megoldja a bufferelési problémákat. Most egyszerre már 7 háromszögjel szól különböző hangmagasságban+egy zajgenerátor.
A szinusz részt valahogy átgondolom még egyszer ez alapján indultam el:
fm szintézis a ym2151-ben
Ugye itt az fm modulációt egymásba ágyazott függvényekkel alakítják ki (elméletileg):
két vezérlő operátornál: y = Sin(x1+Sin(x2))
három vezérlő operátornál: y = Sin(x1+Sin(x2+Sin(x3)))
Itt az x1 határozza meg a vivőfrekvenciát, az x2, és x3 a modulációt.
Számítógépen megírtam C#-ban remekül működik.
Az eredeti Yamaha chip 7 MHz-en megcsinálja ezeket a számításokat, tehát mennie kell itt is, leegyszerűsítem amennyire tudom. Köszönök mindent!
(#) benjami válasza Rober_4 hozzászólására (») Júl 18, 2019 / 1
 
Ha megnézed az általad belinkelt yamaha adatlapot, ott is látható, hogy nem számolja a szinuszt, hanem táblázatból olvassa ki. Abban is biztos vagyok, hogy lebegőpontos számokat sem használ.
(#) Rober_4 válasza benjami hozzászólására (») Júl 18, 2019 /
 
Persze, csak meg akartam úszni, hátha
(#) juhasz10 hozzászólása Júl 18, 2019 /
 
Üdv!
Ha külső megszakítást használok, hall szenzor jelét figyelem, miért nem működik rendesen az I2C 1602-es kijelző?
(#) sargarigo válasza juhasz10 hozzászólására (») Júl 18, 2019 /
 
Kód nélkül arra tippelek hogy elhasználtad az i2c kivezetését. Gondolom a te paneleden is duplán van kivezetve. Vagy sokáig vagy a megszakításban, ezekre gondolok.
(#) juhasz10 válasza sargarigo hozzászólására (») Júl 18, 2019 /
 
Uno 2-es Pinen van a megszakítás. Az i2c A4-A5. Más nincs használatban egyelőre.
Arra gondolok nincs-e valami összeakadás, vagy kikötés, hogy nem lehet használni.
A hozzászólás módosítva: Júl 18, 2019
Következő: »»   544 / 552
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu