Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| workshop:arduino [2009-06-23 18:51] – equinox | workshop:arduino [2025-11-09 09:25] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 13: | Line 13: | ||
| * [[http:// | * [[http:// | ||
| * [[http:// | * [[http:// | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | |||
| ==== Nützliche Scripts ==== | ==== Nützliche Scripts ==== | ||
| Line 27: | Line 30: | ||
| </ | </ | ||
| - | Wobei bei das Feld '' | + | Wobei '' |
| - Arduino einstecken | - Arduino einstecken | ||
| Line 34: | Line 37: | ||
| - die erste Zeile der Ausgabe des obigen Scripts enthält die richtie Seriennnummer | - die erste Zeile der Ausgabe des obigen Scripts enthält die richtie Seriennnummer | ||
| + | Nach dem anlegen der UDEV Regeln muss udev neu gestartet werden. | ||
| + | |||
| + | < | ||
| + | # / | ||
| + | </ | ||
| + | |||
| + | === Seriellen Port reseten === | ||
| + | |||
| + | Ein kleines Programm, um einen Arduino zu reseten. Funktionsweise: | ||
| + | < | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | |||
| + | #define STATE_OFF 0 | ||
| + | #define STATE_ON | ||
| + | |||
| + | void setDTRState (int fd, int state) { | ||
| + | int flags; | ||
| + | |||
| + | ioctl(fd, TIOCMGET, & | ||
| + | flags = (state == STATE_ON ? flags | TIOCM_DTR : flags & ~TIOCM_DTR); | ||
| + | ioctl(fd, TIOCMSET, & | ||
| + | } | ||
| + | |||
| + | int | ||
| + | main(int argc, char* argv[]) | ||
| + | { | ||
| + | char* device = argc < 2 ? "/ | ||
| + | int fd = open(device, | ||
| + | if (fd == 0) { | ||
| + | fprintf(stderr, | ||
| + | return EXIT_FAILURE; | ||
| + | } | ||
| + | | ||
| + | setDTRState(fd, | ||
| + | struct timeval sleeptime = {0, 100000}; // 100ms | ||
| + | select(0, NULL, NULL, NULL, & | ||
| + | setDTRState(fd, | ||
| + | sleeptime.tv_sec = 0; | ||
| + | sleeptime.tv_usec = 100000; | ||
| + | select(0, NULL, NULL, NULL, & | ||
| + | setDTRState(fd, | ||
| + | close(fd); | ||
| + | |||
| + | return EXIT_SUCCESS; | ||
| + | } | ||
| + | </ | ||
| + | Compilieren mit | ||
| + | < | ||
| + | |||
| + | Damit wird das Flashen des Arduino um einiges leichter: | ||
| + | Statt < | ||
| + | < | ||
| + | |||
| + | === Besipiel: Lauflicht === | ||
| + | |||
| + | Je eine LED auf Pin 2 bis 7 schalten. | ||
| + | **Achtung: Alle Anoden gemeinsam auf +5V legen!** | ||
| + | |||
| + | Die Anoden der LEDs werden auf +5V gelegt, zum Einschalten der LED muss der entsprechende PIN deshalb auf LOW gesetzt werden. | ||
| + | |||
| + | < | ||
| + | #define LEDS_OFF 0xFC | ||
| + | #define LEDS_ON 0x00 | ||
| + | #define LEDS_INIT 0xF8 | ||
| + | #define INTERVALL 50 | ||
| + | |||
| + | byte counter; | ||
| + | byte direction; | ||
| + | |||
| + | void setup(){ | ||
| + | pinMode(13, OUTPUT); | ||
| + | digitalWrite(13, | ||
| + | |||
| + | counter = 0; | ||
| + | direction = 1; | ||
| + | |||
| + | DDRD = 0xFC; | ||
| + | PORTD = LEDS_INIT; | ||
| + | } | ||
| + | |||
| + | byte led_table(byte led){ | ||
| + | switch(led){ | ||
| + | case 0: return LEDS_INIT; | ||
| + | case 1: return 0xF4; | ||
| + | case 2: return 0xEC; | ||
| + | case 3: return 0xDC; | ||
| + | case 4: return 0xBC; | ||
| + | case 5: return 0x7C; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | byte get_next_state(){ | ||
| + | if(counter == 5) | ||
| + | direction = 0; | ||
| + | else if(counter == 0) | ||
| + | direction = 1; | ||
| + | |||
| + | return (direction)? | ||
| + | } | ||
| + | |||
| + | byte get_next_state_oneway(){ | ||
| + | counter++; | ||
| + | counter %= 6; | ||
| + | return led_table(counter); | ||
| + | } | ||
| + | |||
| + | void loop(){ | ||
| + | PORTD = get_next_state(); | ||
| + | //PORTD = get_next_state_oneway(); | ||
| + | delay(INTERVALL); | ||
| + | |||
| + | } | ||
| + | |||
| + | </ | ||
| ---- | ---- | ||
| {{tag> | {{tag> | ||