PC - ARDUINO ovládání vstupů a výstupů

Odpovědět

tosik
Příspěvky: 90
Registrován: 11 led 2020, 14:48
Reputation: 0

Re: PC - ARDUINO ovládání vstupů a výstupů

Příspěvek od tosik » 26 úno 2020, 20:37

Díky, mrknu na to.

Prosím ještě o jednu radu. Mrkněte na kód a řekněte mi prosím PROČ?
Nechal jsem si cyklem udělat výpis hodnot načtených z EEPROM do proměnné bufer[].

Kód: Vybrat vše


#include <EEPROM.h>
byte indexProgramuL1 = 0;
byte buferL1[7];
byte adresaL1 = 100;
void setup() {
  Serial.begin(9600);
for (byte y = 0; y < 50; y++) { 
   for (byte i = indexProgramuL1; i < indexProgramuL1+6; i++) { // načtení z EE do buferu 
    buferL1[i] = EEPROM.read(adresaL1 + i);
    Serial.print(buferL1[i]);
    Serial.print(" - ");
  }
  Serial.println();
  if (indexProgramuL1 > 9) {
    indexProgramuL1 = 0;
    Serial.println("-------------------------------");
  } else {
  indexProgramuL1 += 3;
  Serial.println();
  }
}
  

} // konec setup ----------------------------------------------------

void loop() {
  

} // konec void -----------------------------------------------------


Výpis:

Kód: Vybrat vše


20:34:36.065 -> 0 - 0 - 0 - 0 - 1 - 12 - 
20:34:36.065 -> 
20:34:36.065 -> 0 - 1 - 12 - 0 - 2 - 0 - 
20:34:36.112 -> 
20:34:36.112 -> 0 - 2 - 0 - 0 - 3 - 20 - 
20:34:36.159 -> 
20:34:36.159 -> 0 - 3 - 20 - 0 - 4 - 0 - 
20:34:36.206 -> 
20:34:36.206 -> 0 - 4 - 0 - 0 - 5 - 0 - 
20:34:36.206 -> -------------------------------
20:34:36.253 -> 0 - 0 - 0 - 0 - 1 - 12 - 
20:34:36.299 -> 
20:34:36.299 -> 0 - 1 - 12 - 0 - 2 - 0 - 
20:34:36.299 -> 
20:34:36.299 -> 0 - 2 - 0 - 0 - 3 - 20 - 
20:34:36.346 -> 
20:34:36.346 -> 0 - 3 - 20 - 0 - 4 - 0 - 
20:34:36.393 -> 
20:34:36.393 -> 0 - 4 - 0 - 0 - 5 - 0 - 
20:34:36.393 -> -------------------------------
20:34:36.440 -> 0 - 0 - 0 - 0 - 1 - 12 - 
20:34:36.440 -> 
20:34:36.440 -> 0 - 1 - 12 - 0 - 2 - 0 - 
20:34:36.487 -> 
20:34:36.487 -> 0 - 2 - 0 - 0 - 3 - 20 - 
20:34:36.534 -> 
20:34:36.534 -> 0 - 3 - 20 - 0 - 4 - 0 - 
20:34:36.534 -> 
20:34:36.534 -> 0 - 4 - 0 - 0 - 5 - 0 - 
20:34:36.581 -> -------------------------------
20:34:36.628 -> 0 - 0 - 0 - 0 - 1 - 12 - 
20:34:36.674 -> 
20:34:36.674 -> 0 - 1 - 12 - 0 - 2 - 0 - 
20:34:36.674 -> 
20:34:36.674 -> 0 - 2 - 0 - 0 - 3 - 20 - 
20:34:36.721 -> 
20:34:36.721 -> 0 - 3 - 20 - 0 - 4 - 0 - 
20:34:36.721 -> 
20:34:36.768 -> 0 - 4 - 0 - 0 - 5 - 0 - 
20:34:36.768 -> -------------------------------
20:34:36.768 -> 0 - 0 - 0 - 0 - 1 - 12 - 
20:34:36.815 -> 
20:34:36.815 -> 0 - 1 - 12 - 0 - 2 - 0 - 
20:34:36.862 -> 
20:34:36.862 -> 0 - 2 - 0 - 0 - 3 - 20 - 
20:34:36.909 -> 
20:34:36.909 -> 0 - 3 - 20 - 0 - 4 - 0 - 
20:34:36.909 -> 
20:34:36.909 -> 0 - 4 - 0 - 0 - 5 - 0 - 
20:34:36.956 -> -------------------------------
20:34:37.003 -> 0 - 0 - 0 - 0 - 1 - 12 - 
20:34:37.003 -> 
20:34:37.003 -> 0 - 1 - 12 - 0 - 2 - 0 - 
20:34:37.049 -> 
20:34:37.049 -> 0 - 2 - 0 - 0 - 3 - 20 - 
20:34:37.096 -> 
20:34:37.096 -> 0 - 3 - 20 - 0 - 4 - 0 - 
20:34:37.096 -> 
20:34:37.096 -> 0 - 4 - 0 - 0 - 5 - 0 - 
20:34:37.143 -> -------------------------------
20:34:37.143 -> 0 - 0 - 0 - 0 - 1 - 12 - 
20:34:37.190 -> 
20:34:37.190 -> 0 - 1 - 12 - 0 - 2 - 0 - 
20:34:37.237 -> 
20:34:37.237 -> 0 - 2 - 0 - 0 - 3 - 20 - 
20:34:37.237 -> 
20:34:37.237 -> 0 - 3 - 20 - 0 - 4 - 0 - 
20:34:37.284 -> 
20:34:37.284 -> 0 - 4 - 0 - 0 - 5 - 0 - 
20:34:37.331 -> -------------------------------
20:34:37.378 -> 0 - 0 - 0 - 0 - 1 - 12 - 
20:34:37.378 -> 
20:34:37.378 -> 0 - 1 - 12 - 0 - 2 - 0 - 
20:34:37.424 -> 
20:34:37.424 -> 0 - 2 - 0 - 0 - 3 - 20 - 
20:34:37.424 -> 
20:34:37.471 -> 0 - 3 - 20 - 0 - 4 - 0 - 
20:34:37.471 -> 
20:34:37.471 -> 0 - 4 - 0 - 0 - 5 - 0 - 
20:34:37.471 -> -------------------------------
20:34:37.518 -> 0 - 0 - 0 - 0 - 1 - 12 - 
20:34:37.565 -> 
20:34:37.565 -> 0 - 1 - 12 - 0 - 2 - 0 - 
20:34:37.612 -> 
20:34:37.612 -> 0 - 2 - 0 - 0 - 3 - 20 - 
20:34:37.612 -> 
20:34:37.612 -> 0 - 3 - 20 - 0 - 4 - 0 - 
20:34:37.659 -> 
20:34:37.659 -> 0 - 4 - 0 - 0 - 5 - 0 - 
20:34:37.706 -> -------------------------------
20:34:37.706 -> 0 - 0 - 0 - 0 - 1 - 12 - 
20:34:37.753 -> 
20:34:37.753 -> 0 - 1 - 12 - 0 - 2 - 0 - 
20:34:37.753 -> 
20:34:37.799 -> 0 - 2 - 0 - 0 - 3 - 20 - 
20:34:37.799 -> 
20:34:37.799 -> 0 - 3 - 20 - 0 - 4 - 0 - 
20:34:37.846 -> 
20:34:37.846 -> 0 - 4 - 0 - 0 - 5 - 0 - 
20:34:37.846 -> -------------------------------


Když si ale do výpisu přidám vytištění i proměnné i, tak mi to výpis naprosto doj..., ale nechápu proč...? Chtěl jsem ověřit správnost načítání a tedy vytisknout index/hodnota.

Kód: Vybrat vše


#include <EEPROM.h>
byte indexProgramuL1 = 0;
byte buferL1[7];
byte adresaL1 = 100;
void setup() {
  Serial.begin(9600);
for (byte y = 0; y < 50; y++) { 
   for (byte i = indexProgramuL1; i < indexProgramuL1+6; i++) { // načtení z EE do buferu 
    buferL1[i] = EEPROM.read(adresaL1 + i);
    Serial.print(i);
    Serial.print("/");
    Serial.print(buferL1[i]);
    Serial.print(" - ");
  }
  Serial.println();
  if (indexProgramuL1 > 9) {
    indexProgramuL1 = 0;
    Serial.println("-------------------------------");
  } else {
  indexProgramuL1 += 3;
  Serial.println();
  }
}
  

} // konec setup ----------------------------------------------------

void loop() {
  

} // konec void -----------------------------------------------------

Výpis:

Kód: Vybrat vše


20:26:33.310 -> 0/0 - 1/0 - 2/0 - 3/0 - 4/1 - 5/12 - 
20:26:33.310 -> 
20:26:33.310 -> 3/0 - 4/1 - 5/12 - 6/0 - 7/2 - 
20:26:33.357 -> 
20:26:33.357 -> 5/12 - 6/0 - 7/2 - 
20:26:33.404 -> 
20:26:33.404 -> 5/12 - 6/0 - 7/2 - 
20:26:33.404 -> 
20:26:33.404 -> 5/12 - 6/0 - 7/2 - 
20:26:33.451 -> 
20:26:33.451 -> 5/12 - 6/0 - 7/2 - 
20:26:33.451 -> 
20:26:33.451 -> 5/12 - 6/0 - 7/2 - 
20:26:33.451 -> 
20:26:33.451 -> 5/12 - 6/0 - 7/2 - 
20:26:33.498 -> 
20:26:33.498 -> 5/12 - 6/0 - 7/2 - 
20:26:33.545 -> 
20:26:33.545 -> 5/12 - 6/0 - 7/2 - 
20:26:33.545 -> 
20:26:33.545 -> 5/12 - 6/0 - 7/2 - 
20:26:33.545 -> 
20:26:33.545 -> 5/12 - 6/0 - 7/2 - 
20:26:33.592 -> 
20:26:33.592 -> 5/12 - 6/0 - 7/2 - 
20:26:33.639 -> 
20:26:33.639 -> 5/12 - 6/0 - 7/2 - 
20:26:33.639 -> 
20:26:33.686 -> 5/12 - 6/0 - 7/2 - 
20:26:33.686 -> 
20:26:33.686 -> 5/12 - 6/0 - 7/2 - 
20:26:33.686 -> 
20:26:33.686 -> 5/12 - 6/0 - 7/2 - 
20:26:33.732 -> 
20:26:33.732 -> 5/12 - 6/0 - 7/2 - 
20:26:33.732 -> 
20:26:33.732 -> 5/12 - 6/0 - 7/2 - 
20:26:33.779 -> 
20:26:33.779 -> 5/12 - 6/0 - 7/2 - 
20:26:33.779 -> 
20:26:33.779 -> 5/12 - 6/0 - 7/2 - 
20:26:33.779 -> 
20:26:33.826 -> 5/12 - 6/0 - 7/2 - 
20:26:33.826 -> 
20:26:33.826 -> 5/12 - 6/0 - 7/2 - 
20:26:33.873 -> 
20:26:33.873 -> 5/12 - 6/0 - 7/2 - 
20:26:33.920 -> 
20:26:33.920 -> 5/12 - 6/0 - 7/2 - 
20:26:33.920 -> 
20:26:33.920 -> 5/12 - 6/0 - 7/2 - 
20:26:33.920 -> 
20:26:33.920 -> 5/12 - 6/0 - 7/2 - 
20:26:33.967 -> 
20:26:33.967 -> 5/12 - 6/0 - 7/2 - 
20:26:34.014 -> 
20:26:34.014 -> 5/12 - 6/0 - 7/2 - 
20:26:34.014 -> 
20:26:34.014 -> 5/12 - 6/0 - 7/2 - 
20:26:34.014 -> 
20:26:34.014 -> 5/12 - 6/0 - 7/2 - 
20:26:34.060 -> 
20:26:34.060 -> 5/12 - 6/0 - 7/2 - 
20:26:34.060 -> 
20:26:34.060 -> 5/12 - 6/0 - 7/2 - 
20:26:34.107 -> 
20:26:34.107 -> 5/12 - 6/0 - 7/2 - 
20:26:34.154 -> 
20:26:34.154 -> 5/12 - 6/0 - 7/2 - 
20:26:34.154 -> 
20:26:34.154 -> 5/12 - 6/0 - 7/2 - 
20:26:34.154 -> 
20:26:34.154 -> 5/12 - 6/0 - 7/2 - 
20:26:34.201 -> 
20:26:34.201 -> 5/12 - 6/0 - 7/2 - 
20:26:34.248 -> 
20:26:34.248 -> 5/12 - 6/0 - 7/2 - 
20:26:34.248 -> 
20:26:34.248 -> 5/12 - 6/0 - 7/2 - 
20:26:34.248 -> 
20:26:34.248 -> 5/12 - 6/0 - 7/2 - 
20:26:34.295 -> 
20:26:34.295 -> 5/12 - 6/0 - 7/2 - 
20:26:34.342 -> 
20:26:34.342 -> 5/12 - 6/0 - 7/2 - 
20:26:34.342 -> 
20:26:34.342 -> 5/12 - 6/0 - 7/2 - 
20:26:34.389 -> 
20:26:34.389 -> 5/12 - 6/0 - 7/2 - 
20:26:34.389 -> 
20:26:34.389 -> 5/12 - 6/0 - 7/2 - 
20:26:34.389 -> 
20:26:34.435 -> 5/12 - 6/0 - 7/2 - 
20:26:34.435 -> 
20:26:34.435 -> 5/12 - 6/0 - 7/2 - 
20:26:34.482 -> 
20:26:34.482 -> 5/12 - 6/0 - 7/2 - 
20:26:34.482 -> 
20:26:34.482 -> 5/12 - 6/0 - 7/2 - 
20:26:34.482 -> 



Proč to teď načte poprvé 6 hodnot a pak pořád po třech?

Uživatelský avatar
gilhad
Příspěvky: 778
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: PC - ARDUINO ovládání vstupů a výstupů

Příspěvek od gilhad » 26 úno 2020, 21:43

V kodu nevidim nic zvlastniho, ale nevim, cim to nechavas vypisovat, protoze to se chova docela divne

jednak to teda pise ty casy a sipky na zacatek radku

ackoli posilas data celkem pravidelne, tak ty casy skacou trochu divne i v tom spravnem vypisu - nekolik hodnot se vzdy opakuje (na milisekundu) a pak to poskoci o takovych +/- 50 milisekund, ale nepravidelne - po 2-4 radcich

v tom spatnem vypisu to taky skace, ale uz v prvni radce chybi posledni dva udaje, druha radka je konec te prvni (a chybi dva prvni udaje) a vsechny dalsi jsou jen konec te prvni - jako by mel problemy ten program, co to prijima a nedokazal to spravne vypsat, nebo naopak nedokazal dat spravne najevo, ze data nacetl a tudiz dostaval jen porad konec tehoz bufferu, ktery "neumi docist"

Takze bych se zameril na to, co ta data z Arduina cte a zobrazuje, zda neni chyba tam (a zda je to spravne nastaveno)

(co je to vlastne za program?)

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: PC - ARDUINO ovládání vstupů a výstupů

Příspěvek od KamilV » 26 úno 2020, 21:56

IMHO je to SerialMonitor v Arduino IDE, tam se dá zapnout ten prefix řádku "time -> "

tosik
Příspěvky: 90
Registrován: 11 led 2020, 14:48
Reputation: 0

Re: PC - ARDUINO ovládání vstupů a výstupů

Příspěvek od tosik » 27 úno 2020, 06:40

Jo, je to Serial monitor z IDE. A nemze byt chyba v desce (Mega z Ali)? Zkusim doma jinou.

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: PC - ARDUINO ovládání vstupů a výstupů

Příspěvek od ondraN » 27 úno 2020, 07:14

Kód: Vybrat vše

  Serial.println();
  if (indexProgramuL1 > 9) {
    indexProgramuL1 = 0;
    Serial.println("-------------------------------");
  } else {
  indexProgramuL1 += 3;
  Serial.println();
  }
po třetím průchodu máš indexProgramuL1=12 a pole má poslední člen 6. Ono už i s hodnotou 3 jseš v tom prvním cyklu za hranici pole.

Kód: Vybrat vše

   for (byte i = indexProgramuL1; i < indexProgramuL1+6; i++) { // načtení z EE do buferu 
    buferL1[i] = EEPROM.read(adresaL1 + i);
    Serial.print(buferL1[i]);
    Serial.print(" - ");
  }

tosik
Příspěvky: 90
Registrován: 11 led 2020, 14:48
Reputation: 0

Re: PC - ARDUINO ovládání vstupů a výstupů

Příspěvek od tosik » 27 úno 2020, 08:49

Jak to, že jsem za hranicí? V EE mám uloženou řadu čísel (18 hodnot) a v každém kole potřebuji načíst a uložit do pole 6 hodnot, pak posunout kurzor o tři a zase načíst 6 hodnot (poslední tři a nové tři hodnoty). Jak načte posledních 6 hodnot, vynuluje index a jede od začátku .

Uživatelský avatar
gilhad
Příspěvky: 778
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: PC - ARDUINO ovládání vstupů a výstupů

Příspěvek od gilhad » 27 úno 2020, 09:00

To ma OndraN pravdu - ja koukal jen na ty zmeny.

V prvnim pruchodu ti i jde od 0 do 6 a je ve OK.
V druhem pruchodu ti i jde od 3 do 9 a zapis do bufferL1[7]..bufferL1[9] jde mimo puvodne alokovany bufferL1 (0..6) cili si prepisujes jine promenne okolo (buferL1 = EEPROM.read(...) a dal je to jen horsi a horsi.

Ze se uz v puvodni verzi nestalo nic ocividne zleho je jen a jen pouha nahoda.

tosik
Příspěvky: 90
Registrován: 11 led 2020, 14:48
Reputation: 0

Re: PC - ARDUINO ovládání vstupů a výstupů

Příspěvek od tosik » 27 úno 2020, 09:23

Ah, to mi nedošlo . Ten zápis do bufetu musí jít zase 0 - 5, jasné ... Chlapi díky, jdu to opravit a dam vědět ... :D

tosik
Příspěvky: 90
Registrován: 11 led 2020, 14:48
Reputation: 0

Re: PC - ARDUINO ovládání vstupů a výstupů

Příspěvek od tosik » 27 úno 2020, 22:25

Tak problém byl nalezen a vyřešen, opravdu to přetékalo.
Teď už to vypisuje správně:

Kód: Vybrat vše


for (byte y = 0; y < 15; y++) {     
    for (byte z = 0; z < 6; z++) {
    buferL1[z] = EEPROM.read(adresaL1 + indexProgramuL1);
    Serial.print(indexProgramuL1);
    Serial.print("/");
    Serial.print(z);
    Serial.print( "//");
    Serial.print(buferL1[z]);
    Serial.print(" - ");
    indexProgramuL1++;
  }    
   Serial.println();
   if (indexProgramuL1 > 15) {
      indexProgramuL1 = 0;
      Serial.println("-------------------------------");
   } else {
    indexProgramuL1 -= 3;
    Serial.println();
   }
}

To y mám 15 jen abych nasimuloval, jestli se to chová při přechodu zpět na začátek.

Díky moc za pomoc, já to prostě neviděl... :-D

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 11 hostů