Forum: Mikrocontroller und Digitale Elektronik C für Arduino Anfänger


von chris_ (Gast)


Lesenswert?

Hallo Zusammen,

da ich immer wieder Leuten Mikrocontroller-Einführungskurse gebe, bin 
ich auf eine Idee gekommen:
Im Internet gibt es Online-Compiler für C, wie z.B. diesen hier:
http://codepad.org/

Damit nun ein Anfänger ein wenig C über kann, habe ich gerade eben 
folgendes Framework geschrieben:
1
/*
2
============================================================================
3
Name : arduinoBase
4
Author : ChrisMicro
5
Version :
6
Copyright : GPL license 3
7
Date : 30 October 2014
8
Description : Arduino Simulation Framwork for simple learning of the 
9
Arduino Syntax
10
11
You may use codepad to test your work:
12
13
http://codepad.org/
14
15
============================================================================
16
*/
17
18
#define HIGH 1
19
#define LOW 0
20
#define INPUT 0
21
#define OUTPUT 1
22
23
void pinMode(int pin, int mode)
24
{
25
    printf("Anschluss Nr:%d",pin );
26
    if(mode==INPUT) printf(" auf Eingang setzen");
27
    if(mode==OUTPUT) printf(" auf Ausgang setzen"); 
28
}
29
30
void digitalWrite(int pin, int mode)
31
{
32
    printf("Anschluss Nr:%d",pin );
33
    if(mode==INPUT) printf(" = 0\n\r");
34
    if(mode==OUTPUT) printf(" = 1\n\r"); 
35
}
36
void delay(int d)
37
{
38
  printf("warte %d",d);
39
  printf(" Millisekunden\n\r");
40
}
41
42
/*
43
============================================================================
44
START of ARDUINO CODE
45
============================================================================
46
*/
47
48
// Arduino blink example from
49
// http://arduino.cc/en/tutorial/blink
50
51
int led = 13;
52
53
// the setup routine runs once when you press reset:
54
void setup() {                
55
  // initialize the digital pin as an output.
56
  pinMode(led, OUTPUT);    
57
}
58
59
// the loop routine runs over and over again forever:
60
void loop() {
61
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
62
  delay(1000);               // wait for a second
63
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
64
  delay(1000);               // wait for a second
65
}
66
67
68
/*
69
============================================================================
70
END of ARDUINO CODE
71
============================================================================
72
*/
73
void main()
74
{  
75
  int n;
76
  setup();
77
  for(n=0;n<10;n++) loop();
78
79
  /*
80
  while(1)
81
  { 
82
    loop();
83
  }*/
84
85
}
86
*/
Diesen Code kann man in den Online-Compiler posten und quasi als 
Simulation ausprobieren.

Viel Spaß damit,
chris_

von m.n. (Gast)


Lesenswert?

> Date : 30 October 2014

Bist Du Deiner Zeit weit voraus, oder willst Du Banalitäten verkaufen?

von Egon (Gast)


Lesenswert?

> ..oder willst Du Banalitäten verkaufen?
Ich nehme an, dass Du noch nie in der Lehre gearbeitet hast.
Dort gibt es manchmal das Problem, dass Software nicht richtig 
installiert ist, oder nicht genügend Geräte vorhanden sind.
Mit einem Online-Compiler kann man das Problem umgehen, da nichts 
installiert werden muss.
Außerdem ist es so, dass sich Anfänger auf das Wesentliche konzentrieren 
müssen, dass heißt sie können den Code oben nicht von alleine tippen, 
sondern sie brauchen ein Template, welches oben gepostet wurde.
Das kann man mit copy und paste in

http://codepad.org/

hinein kopieren und dann laufen lassen.

von zezee (Gast)


Lesenswert?

>Diesen Code kann man in den Online-Compiler posten und quasi als
>Simulation ausprobieren.

Kann man.
Der sagt:

In function 'main':
Line 74: warning: return type of 'main' is not 'int'
t.c: At top level:
Line 86: error: expected identifier or '(' before '/' token

von Karl H. (kbuchegg)


Lesenswert?

Egon schrieb:

> Außerdem ist es so, dass sich Anfänger auf das Wesentliche konzentrieren
> müssen

Schon richtig.
Aber dann sollen sie sich einen echten Arduino nehmen und den 
programmieren.
Das Erlebnis, dass da eine echte LED auch wirklich leuchtet ist schon 
mal die halbe Miete. Das kann einem eine Online-Simulation niemals 
abnehmen. Und bei den paar Euro, die ein Arduino Nachbau kostet, ist das 
auch nicht die Welt. Wer in µC-Programmierung ernsthaft einsteigen will 
und das Lernen will kommt um eine derartige Investition nicht rum.

> dass heißt sie können den Code oben nicht von alleine tippen,
> sondern sie brauchen ein Template, welches oben gepostet wurde.
> Das kann man mit copy und paste in
>
> http://codepad.org/
>
> hinein kopieren und dann laufen lassen.

Schön.
Wobei sich mit der Sinn verschliesst, aus der Arduino Umgebung gerade 
mal 2 Funktionen zu simulieren.

Abgesehen davon sehe ich in dem geposteten Code nichts, was ein Anfänger 
nicht können müsste um überhaupt sinnvoll µC programmieren zu können. Um 
es klipp und klar zu sagen: Wenn das jemand nicht programmieren kann, 
dann kann der Weg nicht sein, ihm eine halbseidene Simulation zu geben, 
sondern dann soll er sich ein C Buch schnappen und erst mal am PC seine 
ersten Programm schreiben. Ist er dann bei Funktionen und Arrays 
angelangt, hat er auch das nötige Rüstzeug, um auf einem Arduino 
(allerdings einem echten) seine ersten Programme zu schreiben.


Nichts für ungut. Ich honoriere die Absicht. Aber so ist das sinnlos.

von chris_ (Gast)


Lesenswert?

>Kann man.
>Der sagt:

>In function 'main':
>Line 74: warning: return type of 'main' is not 'int'
>t.c: At top level:
>Line 86: error: expected identifier or '(' before '/' token

Upps, da sieht man es mal wieder, wie schnell ein kleiner Fehler 
unterläuft.
Das letzte
1
*/

weglassen, dann geht es.
Über den Returnwert von Main lässt sich streiten, aber natürlich ist es 
schöner, wenn kein "warning" ausgeworfen wird, welches einen Anfänger 
verwirren könnte.

von m.n. (Gast)


Lesenswert?

Karl Heinz schrieb:
> Nichts für ungut. Ich honoriere die Absicht. Aber so ist das sinnlos.

Insbesondere wenn man mal eine LED blinken sehen will:

chris_ schrieb:
> delay(1000);               // wait for a second

Frage: "Welche Baudrate muß man einstellen, damit delay(1000) real 1 
Sekunde wartet?"

von Karl H. (kbuchegg)


Lesenswert?

chris_ schrieb:

> Über den Returnwert von Main lässt sich streiten

Äh.
Nein.
Lässt sich nicht.

Der Return Typ von main() ist int. Punkt.
Steht so im C Standard.

von Cyblord -. (cyblord)


Lesenswert?

chris_ schrieb:
> Über den Returnwert von Main lässt sich streiten

Du unterrichtest Menschen? Und erzählst denen dann so einen quatsch?

von zezee (Gast)


Lesenswert?

>Du unterrichtest Menschen? Und erzählst denen dann so einen quatsch?
Reg Dich ab.
Das ganze Internet ist voll mit Diskussionen darüber.
Es wird diskutiert.
Es wird gestritten.
Ob die Diskussionen allerdings notwendig sind, steht auf einen anderen 
Blatt.

von Cyblord -. (cyblord)


Lesenswert?

zezee schrieb:
>>Du unterrichtest Menschen? Und erzählst denen dann so einen quatsch?
> Reg Dich ab.

Schon dabei. Nicht ärgern nur wundern.... nicht ärgern nur wundern...

von Franz (Gast)


Lesenswert?

>> Reg Dich ab.
>Schon dabei. Nicht ärgern nur wundern.... nicht ärgern nur wundern...
Oder noch besser: Du solltest Threads mit dem Topic "Arduino" 
ignorieren.
Als Arduino Allergiker solltest Du solche Threas meiden, sonst bekommst 
Du noch einen anaphylaktischen Schock.

Hilfe findest Du hier:
http://www.allergie-elternmagazin.de/allergieschock.html

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.