Arduino Uno verus Nano Every

Gast #6751534
Lesenswert?

Hallo,

so kann man dir nicht helfen.. paar mehr Details wären hilfreich ;)
Kannst du mal den Code Posten ?
bzw. den Schaltplan?

Funktioniert das Übertragen nicht ?
Richtiges Board ausgewählt ?
Nach jedem Befehl mal eine Serial Ausgabe gemacht wo der "hängen" bleibt 
?

Der Uno läuft auf 5V, der Nano Every auf 3.3V! irgendwo ein Pullup auf 
5V statt 3.3V liegen?

Gruß
OP #6751598
Lesenswert?

Also das ist der Sketch wie geschrieben beim uno funktioniert er, beim 
nano habe ich dauerleuchten.
// Source zum Demonstrator vom 30. Juni 2020

int switch_pin = 12;
int led_pinI = 10;
int led_pinH = 9;
int led_pinG = 8;
int led_pinF = 7;
int led_pinE = 6;
int led_pinD = 5;
int led_pinC = 4;
int led_pinB = 3;
int led_pinA = 2;
int blinkRate;

byte leds = 0;

void setup() {
  Serial.begin ( 115200);


  pinMode(switch_pin, INPUT);
  pinMode(led_pinA, OUTPUT);
  pinMode(led_pinB, OUTPUT);
  pinMode(led_pinC, OUTPUT);
  pinMode(led_pinD, OUTPUT);
  pinMode(led_pinE, OUTPUT);
  pinMode(led_pinF, OUTPUT);
  pinMode(led_pinG, OUTPUT);
  pinMode(led_pinH, OUTPUT);
  pinMode(led_pinI, OUTPUT);

}

void loop() {
  if (digitalRead(switch_pin) == HIGH) {
    blinkRate=12;
  }
  if (digitalRead(switch_pin) == LOW) {
    blinkRate=50;


  }

  digitalWrite(led_pinA, HIGH);
  digitalWrite(led_pinB, HIGH);
  digitalWrite(led_pinC, HIGH);
  digitalWrite(led_pinD, HIGH);
  digitalWrite(led_pinE, HIGH);
  digitalWrite(led_pinF, HIGH);
  digitalWrite(led_pinG, HIGH);
  digitalWrite(led_pinH, HIGH);
  digitalWrite(led_pinI, HIGH);
  delay(blinkRate) ;

  digitalWrite(led_pinA, LOW);
  digitalWrite(led_pinB, LOW);
  digitalWrite(led_pinC, LOW);
  digitalWrite(led_pinD, LOW);
  digitalWrite(led_pinE, LOW);
  digitalWrite(led_pinF, LOW);
  digitalWrite(led_pinG, LOW);
  digitalWrite(led_pinH, LOW);
  digitalWrite(led_pinI, LOW);
  delay(blinkRate);

  Serial.println(blinkRate);
}
Gast #6751624
Lesenswert?

Hallo,

also hast du beim draufspielen schonmal keine Probleme, dass doch gut.

blinkRate ist bissel irreführend gewählt besser wäre Verzögerung.

blinkRate = 1 / (2*Verzögerung)

Wenn der switch_pin == HIGH ist hast du eine "blinkRate"(Verzögerung) = 
12
also 12ms x 2  -> 0,024s -> 1/0,024 ~ 42. also 42 mal pro Sekunde wäre 
deine blinkRate.. das kannst du auf ein Oszilloskop sehen aber für dein 
Auge ist das eine nicht ganz so stark leuchtende LED.

Wenn der switch_pin == LOW hast du immerhin ne Verzögerung von 50.
--> 1 / 2x0,05 = 10. -> blinkRate 10x die Sekunde.

Das kann das menschliche Auge noch unterscheiden.

Änder mal die Bezeichnung und nehme mal größere Werte zum Testen dann 
kannst du das auch mit dein Augen sehen ;)

Gruß
Gast #6751631
Lesenswert?

gewöhn dich gleich mal an ohne delay zu programmeiren
1
bool status=0;
2

3
void loop() {
4
  if (digitalRead(switch_pin) == HIGH) {
5
    veroegerung=12;
6
  }
7

8
  if (digitalRead(switch_pin) == LOW) {
9
    veroegerung=50;
10
  }
11

12
  static long ntime = 0;
13
  
14
  if(millis-ntime >= veroegerung){
15
   status = status^1;
16

17
   digitalWrite(led_pinA, status);
18
   digitalWrite(led_pinB, status);
19
   digitalWrite(led_pinC, status);
20
   digitalWrite(led_pinD, status);
21
   digitalWrite(led_pinE, status);
22
   digitalWrite(led_pinF, status);
23
   digitalWrite(led_pinG, status);
24
   digitalWrite(led_pinH, status);
25
   digitalWrite(led_pinI, status);
26
   
27
   ntime = millis();
28
  }
29

30
}
OP #6751728
Lesenswert?

Danke erstmal @ essenistlecker, Problem gelöst, nach langem nachdenken 
ist mir eingefallen, dass ich dieses Problem ja schon einmal bei einem 
Uno gehabt habe und zwar zum Test nur 1 LED verwendet, dann spielt die 
Platine verrückt. Fährt man mit der Handfläche drüber, hört die LED auf 
zu blinken und leuchtet durch. Bei voller Belegung, also alle 9 LED, 
funzt es. Es handelt sich dabei um Infrarot LED, die als Therapie 
eingesetzt werden. zei Blinkfrequenzen 10 und 40 hertz.
Also danke an alle und ein schönes Wochenende
Christian
#6752010
Lesenswert?

Hallo,

@ TO:
Du arbeitest laut Sketch mit offenen Eingang, da muss das Teil 
zwangsweise verrückt spielen. Du benötigst entweder den internen Pullup 
oder einen Externen.

@ essenistlecker
Übrigens arbeitet ein Nano Every ganz normal mit 5V.
Und dein Code Bsp. ist leider auch zum scheitern verurteilt, weil ntime 
den falscher Datentyp. bool negieren geht einfacher mit '!'.
https://www.arduino.cc/reference/en/language/structure/boolean-operators/logicalnot/

Ich kann das nicht so stehen lassen. Ich denke das hier ist besser. 
Weitere  Leds können ergänzt werden. Den Taster kann auch auch noch in 
eine Funktion auslagern mit bool Rückgabewert.
1
const byte pinSwitch {12};
2
unsigned long refreshRate;
3

4
void setup (void)
5
{
6
  Serial.begin(250000);
7
  Serial.println("\nµC Reset ### ### ###");
8
  pinMode(pinSwitch, INPUT_PULLUP);
9
  pinMode(LED_BUILTIN, OUTPUT);
10
}
11

12
void loop (void)
13
{
14
  if (digitalRead(pinSwitch) ) {
15
    refreshRate = 50;
16
  }
17
  else {
18
    refreshRate = 500;
19
  }
20
  
21
  heartbeat(refreshRate);
22

23
  seriellerMonitor(1000, refreshRate);
24
}
25

26

27
// ****** Funktionen ******
28
void heartbeat (const unsigned long interval)                     
29
{
30
  static unsigned long lastMillis {0};
31
  const unsigned long ms {millis() };
32
  static bool state {false};
33
  
34
  if (ms - lastMillis >= interval) {
35
    lastMillis = ms;
36
    state = !state;
37
    digitalWrite(LED_BUILTIN, state);
38
  }
39
}
40

41
void seriellerMonitor (const unsigned long interval, const unsigned long &data)                     
42
{
43
  static unsigned long lastMillis {0};
44
  const unsigned long ms {millis()};
45
  
46
  if (ms - lastMillis >= interval) {
47
    lastMillis = ms;
48
    Serial.println(data);
49
  }  
50
}
OP #6755632
Lesenswert?

@ essenistlecker
Übrigens arbeitet ein Nano Every ganz normal mit 5V.
Und dein Code Bsp. ist leider auch zum scheitern verurteilt, weil ntime
den falscher Datentyp. bool negieren geht einfacher mit '!'.
https://www.arduino.cc/reference/en/language/structure/boolean-operators/logicalnot/

Der Code funktioniert einwandfrei(!), ist bei 20 Geräten in Verwendung, 
Uno und Mega.
Beim Every habe ich das Problem, dass ich die Platine angreifen muss 
damit das Programm läuft, lasse ich die Platine los DAUERLEUCHTEN. Kennt 
jemand dieses Phänomen?
#6756576
Lesenswert?

Hallo,

ohne Schaltplan kommen wir hier nicht weiter. Meine Logik sagt mir auch 
das es Zufall ist das es mit einem Uno/Mega funktioniert wenn es an 
einem Nano Every nicht funktioniert. Denn bei gleichen Code bedeutet das 
rückwärts betrachtet das keine externen Pullups/Pulldowns vorhanden 
sind. Es reicht schon ein Steckbrett und der Nano Every verhält sich mit 
offenen Eingängen anders. Das liegt aber nicht am Nano Every.
#6758345
Lesenswert?

Hallo,

die Erkenntnis die du daraus mitnehmen musst ist, dass du keine offenen 
Eingänge haben darfst. Sprich keine undefinierten Pegel. Wenn du, was 
ich annehme, einen mechanischen Taster angeschlossen hast, dann 
benötigst du mittels externen Pullup/down oder internen Pullup immer 
einen definierten Spannungswert. Das kannst du auch auf dem Steckbrett 
ausprobieren.
Gast #6758531
Lesenswert?

Titze C. schrieb:
> @Veit D. und jetzt wird kompliziert für mich. Das Teil wird mit
> einer
> Powerbank betrieben der die Stromversorgung übernimmt. um die
> Blinkfrequenzen zu ändern verwende ich einen Kippschalter, Switch pin

Ich empfinde es als irrational, dass du mit keinem Piep auf die doch 
recht klare Pullup Ansage eingehst.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren